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

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

最佳答案

读取城市名称时,不要使用 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';

关于无法将字符串输入结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26836749/

相关文章:

c - 卵石时间颜色配置

c - 变量类型结构体是否必须是数组才能存储 100 个元素?

javascript - javascript 数组中的水平到垂直

java - 用于 java 的 Linux 字符串命令

java - 在 Android 中加载大文本

javascript - 使用setTimeout逐字符打印字符串

c - 是什么导致了C代码中的段错误,跨函数的动态分配

c - C语言中如何用宏替换函数

c++ - 单击几下后 WinAPI 菜单卡住

c++ - 将字符串添加到未知大小的数组 C++