[英]Why does the Runtime error occur?
我正在使用GNU GCC Compiler编写代码块编辑器。我编写了以下代码(包括相关的库和头文件)
int main()
{
char a;
scanf("%c",&a);
switch(a)
{
case '1':
scanf("%c",&a);
if(a=='3')
{
printf("3\n");
}else
{
printf("4\n");
}
break;
case '2':
printf("HELLO\n");
break;
}
return 0;
}
当我运行代码时,终端显示光标以获取字符。我输入1
并按下返回键。所以它要我输入另一个字符。这次我输入3
并再次按下返回键。而不是打印3
在终端发生了一件坏事:运行时错误。 为什么会这样?我犯了哪个错误?我是否忽略了一些范围规则?如果我这样做了,我忽略了哪个范围规则?
该计划没有错。 您只需要跳过前一个scanf
留下的'\\n'
字符。
当您按Enter键时 ,额外的字符'\\n'
将进入输入缓冲区。 这个'\\n'
被当前的scanf
遗留下来。 在下一次读取时, scanf
将读取此剩余字符,您将获得该程序的意外行为。
要跳过此换行符,您可以在%c
之前放置一个空格
scanf(" %c",&a);
// ^^ A space before %c can eat up any number of white spaces.
另一种方法是在每次scanf
之后放置这一行
int ch;
while((ch = getchar()) != EOF && ch != '\n');
更改scanf("%c",&a);
到scanf(" %c",&a);
这是从stdin读取字符时从输入缓冲区跳过空间的基本规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.