在c中读取单独的用户输入行

Reading separate lines of user input in c

我有一个 C 程序需要读取两行用户输入。第一行将是 3 个由空格分隔的数字,第二行是一个数字。像这样:

2 5 7
6

这是我的代码:

int main(int argc, char** argv){
    int a, b, c, d;
    char line[256];
    while(fgets(line, sizeof(line), stdin)){
        a = atoi(strtok(line, " "));
        b = atoi(strtok(NULL, " "));
        c = atoi(strtok(NULL, " "));
    }
    scanf("%d", &d);
    printf("a : %d b: %d c: %d d: %d",a, b, c, d);

}

这个程序最终给了我一个 Segmentation Fault 11

while 循环的第二次迭代将读取第二行,即只有一个整数的那一行。这意味着,在第一个之后对 strtok 的任何后续调用将 return NULLatoi(NULL) 将调用未定义的行为(此处以分段错误的形式)。

假设文件始终与您描述的文件具有完全相同的格式,只需删除 while 循环:

int main(int argc, char** argv){
     int a, b, c, d;
    char line[256];

    fgets(line, sizeof(line), stdin));
    a = atoi(strtok(line, " "));
    b = atoi(strtok(NULL, " "));
    c = atoi(strtok(NULL, " "));

    scanf("%d", &d);
    printf("a : %d b: %d c: %d d: %d",a, b, c, d);
}