【问题标题】:I can't input a string with spaces我无法输入带空格的字符串
【发布时间】: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


【解决方案1】:

尝试在scanf("%s", name); 之后添加getchar();,然后使用gets() 得到你想要的行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2017-09-06
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多