2014-04-01 19 views
-1

我有一个主要功能在下面,但是,行 - 获取(newstring);从来没有得到提示,程序跳过获取和插入线,有人告诉我,可能是一个线状的浅的问题,但我不知道那是什么意思,如何解决它,请帮忙,谢谢,c编程浅线修复

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; 
    } 
} 
+1

尝试打印'key'的值用于调试目的。你在哪里声明了“钥匙”? 'gets()'被弃用,并且如果输入超过24个字符将导致未定义的行为。在一行中声明多个指针是不好的风格。检查scanf的返回值,它可能会失败,因为它需要在字符前面有一个空格。您的打印行末尾有不需要的空格。这对开始足够了吗? –

+0

另外,如果这是作业,请标记为这样。 –

回答

0
scanf ("%D", &newelem); 

当您输入号码时,您将按'返回'键。 '\n'符号仍然保留在文件缓冲区中,因为您还没有要求scanf也读取它。下一次您拨打gets它读取一个,这是0个符号 - 它立即看到'\n'

解决您的问题,您需要手动删除'\n'(例如通过虚拟gets),或通过使用

scanf ("%D\n", &newelem); 

顺便说一句,尽量避免gets。这个函数是危险的,因为它不知道缓冲区的大小限制,任何现代编译器都会警告你不要使用它。尝试使用fgets来代替。