虽然我可以使用字符串,但我想了解为什么我正在处理的这个小示例会以这种方式运行,我该如何解决?
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 空终止符......但我仍然认为我应该能够读取第一个数字,而不仅仅是默认为 0。而且我不明白为什么其余的数字都可以(并非全为 0)。
澄清:我只能读取 4/5 的数字,第一个总是 0。
编辑:
我已经测试过,似乎这是导致问题的原因:
主文件
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);
...
}
并收工。