scanf出了点问题

时间:2014-04-13 13:15:42

标签: c 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,但我不确定。

4 个答案:

答案 0 :(得分:1)

两件事。

  1. 其他人提及&中的scanf()

    scanf("%d",&num);
    
  2. 取整数后,输入中有\n个剩余部分 缓冲。因此gets()会输入""

    getchar()之后执行scanf()。这会带走 来自输入缓冲区的\ngets()将正常工作。

  3. 此外,字符串输入更好not to use gets

答案 1 :(得分:0)

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

更改

scanf("%d",num);

scanf("%d", &num);

答案 2 :(得分:0)

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

正确的方法是

scanf("%d",&num);

顺便说一句,你知道如果你已经引用了编译器警告。

答案 3 :(得分:0)

其他人说的话 - &在scanf("%d", &num)中很重要。此外,您的scanf将读取该数字,但后面的换行符,因此您的gets()读取该换行符并产生一个空字符串。在%d修正后面留空 - scanf("%d ", &num)

通常情况下,你根本不应该gets()因为它没有检查缓冲区溢出(如果你输入超过50个字符会发生有趣的事情),但是没关系现在,因为你还在学习。