繁体   English   中英

为什么会出现运行时错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM