我有一个程序,可以将人员输入信息转换为结构数组。信息包括城市名称,日期编号和华氏温度。由于某种原因,它会跳过您输入城市名称的部分。
void input_TempInfo(struct TempInfo * arr, int size)
{
int i, k;
for (i = 0, k = 0; k < size; i++, k++)
{
printf("\nEnter the city: ");
while (getchar() != '\n') << **Edit**
;
while (((arr[k].city[i] = getchar()) != '\n') && (i < MAXCHARS))
i++;
arr[k].city[i] = '\0';
do
{
printf("\nEnter the day: ");
scanf("%i", &arr[k].day);
if (arr[k].day < 1 || arr[k].day > 366)
{
printf("\nInvalid day number. Type another: ");
scanf("%i", &arr[k].day);
}
} while (arr[k].day < 1 || arr[k].day > 366);
printf("Enter a temperature in Fahrenheit: ");
scanf("%lf", &arr[k].fahr);
arr[k].cels = (arr[k].fahr - 32) * 5/9;
}
}
答案 0 :(得分:0)
使用scanf()时,换行符中会出现换行符。 Scanf()在使用换行符时没有问题,但是你的getchar()循环会立即结束getchar()) != '\n'
。
您可以检查第一个char是否是换行符并在使用getchar()读取之前使用它。
答案 1 :(得分:0)
在阅读城市名称时,请使用getchar()
,而不是scanf
从
printf("\nEnter the city: ");
while (getchar() != '\n') << **Edit**
;
while (((arr[k].city[i] = getchar()) != '\n') && (i < MAXCHARS))
i++;
arr[k].city[i] = '\0';
到
printf("Enter the city: \n");
scanf("%s", &arr[k].city);
或//不使用scanf
char c;
while (((c = getchar()) != '\n') && (i < MAXCHARS -1)) { //Because the last character would be '\0' (NULL).
arr[k].city[i] = c;
i++;
}
arr[k].city[i] = '\0';