gpt4 book ai didi

c - 关于 scanf() 的奇怪跳过

转载 作者:行者123 更新时间:2023-11-30 20:11:15 24 4
gpt4 key购买 nike

我一直在尝试使用链表进行一些操作,主要是因为我想找到一种方法来确定由用户输入确定的序列的长度。问题是

终端输出

[filip@filip PointerCheck]$ ./PointerCheck.o 
Enter number to populate the list..
1 2 3
c
Enter number to populate the list..
Printing...
1 2 3
3

为什么列表中的第二个总体被跳过?

我已经尝试了多种方法,并且我相信问题出在 while 循环条件中的某个地方,涉及 scanf();
列表函数应该正常工作,因为来自 add_to_list() 的单独调用实际上会在列表中插入一个整数,并且 print_list() 会打印所有这些整数。所以我猜,它一定是 while 循环,特别是 scanf();

C 代码

void user_input_list(void) {
int *input = NULL;
input = (int *) malloc(sizeof(int));
printf("Enter number to populate the list..\n");
while (scanf("%d", input)) {
add_to_list(*input, 1);
}
}

int main(int argc, char const *argv[]) {
int i = 0;
struct node *ptr = NULL;

user_input_list();

user_input_list();

print_list();
printf("%d\n", lenght_list());

return 0;
}

这是整个文件,实时 [link]以及 pastebin

最佳答案

您似乎正在输入一个非数字字符来表示输入结束。但是,scanf() 遇到的第一个不匹配字符会留在输入流中。因此,您需要先清除输入流中的多余字符,然后再尝试再次读取输入流。执行此操作的标准方法是:

int c;

while ((c = getchar()) != '\n' && c != EOF)
continue;

这会丢弃输入流中的字符,直到到达换行符或EOF。注意,getchar()在出错时返回EOF,并且用户也可能输入EOF,因此需要测试明确它是为了避免可能的无限循环。

关于c - 关于 scanf() 的奇怪跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41496297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com