0
#include<iostream.h>
#include<conio.h>

void main()
{
    clrscr();
    char c[50];

    //cin>>c;
    cin.getline(c,50);

    //cout.write(c,50);
    cout<<c;
    getch();
}

50文字未満を入力すると、ガベージ値が取得されます。なぜそうなのですか?

4

3 に答える 3

1

配列を初期化しませんでした:

#include<iostream>
#include<conio.h>
using std::cout;
using std::cin;

int main()
{
    clrscr();

    char c[50] = {};//initialize your array here!

    cin.getline(c,50);
    cout<<c;

    getch();

    return 0;
}

また:

  • iostream.hは古くなっています。
  • クロスプラットフォーム開発を目指している場合は、避けてください:<conio.h>そして、その結果、それが定義する関数がコードで使用されます:clscr()およびgetch().
  • 可能であれば、可能な限り C 文字列を避けてください。C++ を使用している場合は、次を使用します:<string>ライブラリとstd::string. 詳細については、こちらをご覧ください: C-String と C++Strings の効率
  • を使用して、バッファリングされた入力に対して同様の議論を行うことができますがcin.getline()、最終的な目標がわからないため、それについて適切にコメントすることはできません。しかし、バッファリングされた入力をしようとしているようです。
于 2013-08-11T11:21:24.293 に答える
0

シンプルでクリーンなアプローチ

#include<iostream>
#include<string>
int main()
{
    std::string str;
    getline(std::cin, str);
    cout<<str;
    std::cin.get();    //or std::cin.ignore();
}

注意すべき点:

  1. 新しい標準では、main() の戻り値の型は.(何も返さないint)である必要があると指定されています。voidint

  2. 時代遅れgetchar()です。

  3. 実装が簡単で安全であるため、std::string代わりに配列を使用しますchar

于 2013-08-11T11:39:52.757 に答える
0

ファイルが 16 ビットでエンコードされていることに気づかなかったため、指定された回答を使用しても同じ問題が発生しました。そのため、std::wstring (および std::wifstream) を使用する必要がありました。

于 2016-05-04T17:50:06.367 に答える