我已将此代码编写为更大程序的一部分:
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,但我不确定。
答案 0 :(得分:1)
两件事。
其他人提及&
中的scanf()
:
scanf("%d",&num);
取整数后,输入中有\n
个剩余部分
缓冲。因此gets()
会输入""
。
在getchar()
之后执行scanf()
。这会带走
来自输入缓冲区的\n
和gets()
将正常工作。
此外,字符串输入更好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个字符会发生有趣的事情),但是没关系现在,因为你还在学习。