C 编程浅线修复

标签 c

我下面有一个主要函数,但是,该行 - 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/

相关文章:

arrays - 将字符串 char 设置为 null 会导致 C 中的内存泄漏吗?

c - C中将字符串添加到char数组并用\0分隔

c - 解析文件时的 fscanf 格式字符串

C boolean 无效值处理

c++ - 以系统用户身份调用应用程序(Windows)

c - 为什么在 for 循环中包含 for 循环

c - 如何修改configure.ac以在最终Makefile中添加库目标?

c - 将数据写入文件 : fflush() takes a lot of time

c - C 中数组的随机性 数组中的随机性

C - 巨大数组 - 段错误(核心转储)