我正在尝试使用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]”,也会显示相同的内容。
请帮忙
答案 0 :(得分:0)
好吧,我自己找到了一个问题的答案。我之前的代码中的一个函数有
的scanf("%d",&安培; n)的
众所周知,输入输入后我们按回车键。这被视为' \ n'由编译器存储在缓冲区中。我的下一个scanf语句(我得到错误的那个)(scanf("%[^ \ n]",q)直接从缓冲区中取出了' \ n'因此它不能接受任何输入,因为\ n终止输入。我使用的编译器是turbo C ++。在一些空字符串的情况下,它报告错误。因此我得到了错误消息。要解决这个问题,我不得不使用
在scanf("%[^ \ n]",q)语句之前的的getchar()
语句,以便' \ n'从缓冲区中删除并作为getchar语句的输入。