【发布时间】:2017-07-19 03:33:27
【问题描述】:
我似乎无法弄清楚我的输出发生了什么。我正在读取多行用户输入并输出超出下限的相应输入。由于某种原因,当我输出时,输出的字符串省略了字符串的第一个字符。谁能告诉我为什么会这样?
#include <stdio.h>
typedef struct{
char name[4];
int population;
} state;
enum { MAX_STATES = 10 };
int main()
{
state myStates[MAX_STATES];
int c;
int i = 0;
while ((c = getchar())!= EOF)
{
scanf("%s %d\n", myStates[i].name, &myStates[i].population);
i++;
}
// printf("Last character is [%d]\n", c);
printf("");
if (c <= 0)
{
for(int j = 0; j <= MAX_STATES; j++)
{
if(myStates[j].population >= 10)
printf("%s %d\n", myStates[j].name, myStates[j].population);
else
break;
}
}
return 0;
}
输入:
TX 23
CA 45
输出:
X 23
A 45
更新代码:
#include <stdio.h>
typedef struct{
char name[4];
int population;
} State;
enum { MAX_STATES = 10 };
int main()
{
State myStates[MAX_STATES];
int i, j;
// Function to read in multiple lines (up to 10) of user input; loop
// controls in place, detects format problems, prevents string buffer
// overflows.
for (i = 0; i < MAX_STATES; i++)
{
if (scanf("%2s %d\n", myStates[i].name, &myStates[i].population) != 2)
break;
}
// Function to output (stdout) array of State structs that exceed 10
// population.
for(j = 0; j < i; j++)
{
if(myStates[j].population >= 10)
printf("%s %d\n", myStates[j].name, myStates[j].population);
else
break;
}
return 0;
}
发布的输出只会持续到输入小于 10 并跳出循环。当我没有那个 break 语句时,我在最后一行得到了垃圾输出。有什么改进输出的建议吗?
【问题讨论】:
-
可能是因为在您将其分配给州名之前,它已在您的
getchar调用中被读取。不知道你的输入到底是什么,我会先检查一下,看看它是你的输出还是你的输入函数。 -
我进行了编辑以将输入与输出分开。如果 getchar() 是问题所在,如何在保持 while() 循环的同时替换它?