c-scanf出现问题

  • 本文关键字:问题 c-scanf scanf
  • 更新时间 :
  • 英文 :


我已经将此代码作为一个更大程序的一部分编写:

   main()
{     int num;
      char word[50];
      list_head=NULL;

while(1)
      {     
            puts("Give number  : ");
            scanf("%d",num);
            if (num==0) break;
            printf("Give name : ");
            gets(word);
            if (strcmp(word,"")==0) break;
            add_node_to_list(num,word);
            }

当我运行程序时,屏幕上会出现消息"Give number:",当我给出一个数字时,会出现一条消息("程序没有响应,将关闭"),就像无限循环的情况一样。我通过调试推断出问题是scanf,但我不确定。

两件事。

  1. scanf()中的&和其他提到的一样:

    scanf("%d",&num);
    
  2. 取整数后,输入中有一个剩余的n缓冲器因此gets()将输入""

    因此,在scanf()之后执行getchar()。这会带走来自输入缓冲器的CCD_ 8和CCD_。

此外,最好不要将get用于字符串输入。

scanf(3)需要变量的地址才能正常工作。

更改

scanf("%d",num);

scanf("%d", &num);

您应该提供num的地址,而不是num本身。现在,应用程序正试图在第一次运行时写入地址0。

正确的方法是

scanf("%d",&num);

顺便说一句,如果你已经阅读了编译器的警告,你就会知道了。

其他人说了什么-;在CCD_ 11中是重要的。此外,您的scanf将读取数字,但不会读取后面的换行符,因此gets()读取该换行符并生成一个空字符串。在%d后面加一个空白可以修复scanf("%d ", &num)

通常,您根本不应该使用gets(),因为它不会检查缓冲区溢出(如果您输入的字符超过50个,就会发生有趣的事情),但现在还可以,因为您还在学习中。

相关内容

  • 没有找到相关文章

最新更新