无法将字符串输入结构数组

时间:2014-11-10 04:26:23

标签: c arrays string struct

我有一个程序,可以将人员输入信息转换为结构数组。信息包括城市名称,日期编号和华氏温度。由于某种原因,它会跳过您输入城市名称的部分。

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;
    }
}

2 个答案:

答案 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';