在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 NULL
和 atoi(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);
}
我有一个 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 NULL
和 atoi(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);
}