我下面有一个主要函数,但是,该行 - gets(newstring);永远不会得到提示,并且程序会跳过获取和插入行,我被告知这可能是浅行问题,但我不知道这是什么意思以及如何修复它,请帮助,谢谢,
int main() {
char newstring [25];
int removeelem;
int findelem;
struct data_node *first=NULL, *ptr;
printf ("Enter list command (+-flx): ");
scanf (" %c", &key);
switch (key) {
case '+':
printf ("+ detected \n");
printf ("Enter key data: \n");
scanf ("%D", &newelem);
printf ("What string to store? \n");
gets(newstring);
insert(&first, newelem,newstring);
break;
}
}
最佳答案
scanf ("%D", &newelem);
当您输入号码时,您按了“返回”键。 '\n'
符号仍保留在文件缓冲区中,因为您还没有要求 scanf
读取它。下次您调用 gets
时,它会读取一行,即 0 个符号 - 它会立即看到 '\n'
。
要解决您的问题,您需要手动删除 '\n'
(例如通过虚拟 gets
),或使用
scanf ("%D\n", &newelem);
顺便说一句,尽量避免获取
。这个函数很危险,因为它不知道缓冲区的大小限制,任何现代编译器都会大声警告你不要使用它。尝试改用fgets
。
关于C 编程浅线修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22787774/