无法用空格输入句子

时间:2017-04-10 14:55:27

标签: c

我正在尝试使用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",那么我没有分段错误。像gets(一般保护错误)和fgets(根本不要求输入)等功能也无法接受输入。

更令人好奇的是,当我在一个单独的文件中执行这些语句而没有其余的代码时,它们会正确执行。

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

请帮忙

1 个答案:

答案 0 :(得分:0)

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

  

的scanf("%d",&安培; n)的

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

  

的getchar()

在scanf("%[^ \ n]",q)语句之前的

语句,以便' \ n'从缓冲区中删除并作为getchar语句的输入。