【问题标题】:inability to input sentences with white space无法输入带有空格的句子
【发布时间】:2017-04-10 14:55:27
【问题描述】:

我正在尝试使用 c 制作 20 个问题的游戏。以下是其中一个函数的代码摘录。

int question_input(void)
{
    char q[100];
    int i=0;
    printf("Enter the question or say if you want to guess\n");
    scanf("%[^\n]",q);
    i=check_if_guess(q);
    if(i==0)
    {
        printf("Say yes or no\n");
        scanf("%s",q);
    }
    return i;
}

我在执行和调试时遇到一般保护错误,我发现问题出在

scanf("%[^\n]",q)

声明。

如果将相同的语句更改为"%s",那么我不会遇到分段错误。 get(一般保护错误)和fgets(根本不要求输入)等函数也无法接受输入。

更好奇的是,当我在单独的文件中执行这些语句时,没有其余代码,它们可以正常执行。

即使我尝试“%99[^\r\n]”,它也显示相同。

请帮忙

【问题讨论】:

标签: c


【解决方案1】:

嗯,我自己找到了问题的答案。我之前代码中的一个函数有

scanf("%d",&n)

众所周知,输入输入后,我们按下回车键。编译器将其视为 '\n' 并存储在缓冲区中。我的下一个 scanf 语句(我出错的那个)(scanf("%[^\n]",q) 立即从缓冲区中取出了 '\n'。因此它不能接受任何输入,因为 \n终止输入。我使用的编译器是turbo C++。在某些空字符串的情况下,它会报告错误。因此我得到了错误消息。为了解决这个问题,我不得不使用

getchar()

scanf("%[^\n]",q) 语句之前的语句,以便将 '\n' 从缓冲区中删除并作为 getchar 语句的输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2016-02-23
    • 2016-05-11
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多