文字列を使用できますが、私が取り組んでいるこの小さな例がこのように動作する理由と、どうすれば修正できるかを理解したいですか?
int ReadInput() {
char buffer [5];
printf("Number: ");
fgets(buffer,5,stdin);
return atoi(buffer);
}
void RunClient() {
int number;
int i = 5;
while (i != 0) {
number = ReadInput();
printf("Number is: %d\n",number);
i--;
}
}
これにより、理論的には、または少なくとも私の頭の中では、入力から 5 つの数値を読み取ることができます (ただし、それらは上書きされます)。
ただし、これは当てはまりません。何があっても 0 を読み取ります。
printf が \0 null ターミネータを置くことは理解しています...しかし、デフォルトで 0 にするだけでなく、最初の数字を読み取ることができるはずだとまだ思います。そして、残りの数字がOKである理由がわかりません(すべて0ではない)。
明確化:私は 4/5 の数字しか読めません。最初は常に 0 です。
編集:
私はテストしましたが、これが問題を引き起こしているようです:
main.cpp
scanf("%s",&cmd);
if (strcmp(cmd, "client") == 0 || strcmp(cmd, "Client") == 0)
RunClient();
何とかして。
編集:
誰かがコンパイルしたい場合のコードは次のとおりです。まだ直し方がわからない
最終編集:
エラーを取り除くことができませんでした。単純に @ReadInput を追加することにしました
int ReadInput(BOOL check) {
...
if (check)
printf ("Number: ");
...
@RunClient()
void RunClient() {
...
ReadInput(FALSE); // a pseudo - buffer flush. Not really but I ignore
while (...) { // line with garbage data
number = ReadInput(TRUE);
...
}
そして、それを一日と呼びます。