【发布时间】:2019-11-08 19:08:29
【问题描述】:
我正在编写一个程序,我需要用户输入这样的一行 (1, Stelios, 1.81, Greece)。
我想到的第一件事是使用gets(),因为我想接受空格输入。经过几次尝试编译但没有成功,我读到它因危险而从 C-11 中删除。
接下来我使用了scanf() 和fgets(),但它会跳过输入,就像它们从未出现过一样,而且似乎没有任何效果。
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *f;
char line[30];
char name[30];
printf("\nGive the name: \n");
scanf("%s", name);
f = fopen(name, "w");
printf("\nGive the line to enter file: ");
//gets(line);
//fgets(line, 50, stdin);
//scanf ("%[^\n]", line);
//scanf ("%[^\n]%*c", line);
printf("%s", line);
fclose(f);
}
这就是我尝试的一切。
【问题讨论】:
-
“它会跳过输入,就像它们从未存在过一样”,因为之前的(未显示)代码。发布minimal reproducible example
-
您最好的选择是
fgets。这可能是“跳过输入,就像它们从未存在过一样”,因为输入流上留下了一个换行符,您之前对scanf的调用没有使用该换行符。这是scanf的超级烦人的弱点之一——它不能很好地配合以后对fgets的调用。 -
我一次只用一个,而不是一起用。没有任何效果,gets、fgets 或 scanf 无效。
-
fgets() 工作得很好——是你的代码坏了。但是,如果您不向我们展示,我们将无法帮助您。
-
好的,抱歉,请稍等
标签: c string compilation