C用户输入和链接列表

我试图从用户输入中获取一个字符串,然后将其与我之前在代码中创建的链接列表进行比较,并找到应该插入字符串的位置。 当用户输入任何内容并点击进入时停止循环。

我能够吸收字符串并找到要插入的位置,但我想要做的是循环直到用户输入空白输入。 这导致我的代码在某处破解,我不太清楚为什么。 我在我的代码中插入了断点来调试它,但我相信我遇到了fgets的问题。 任何帮助都会很棒。

当我说代码“中断”时,输出的样子是这样的:

BREAK1: AAAA BREAK2 BREAK4 AAAA 0 BREAK5 

字符串和位置是正确的,但它在多行上打印,然后继续循环而不重置。 以下是我的代码::

 // NO FILE, SO INTAKE STRINGS /////////////////////////////////////////////////// /////////////////////////////////////////////////// else{ fgets(buff,BUFF_SIZE,stdin); buff[strlen(buff)] = '\0'; while (buff[0] != '\0'){ printf("BREAK1: %s\n", buff); // set curr = root node curr = root; printf("BREAK2\n"); while (curr->next){ if (strcmp(buff, curr->stringDat) == 1){ insertPnt++; curr = curr->next; printf("BREAK3\n"); } else{ printf("BREAK4\n"); insert(buff, insertPnt, root); printf("%20s %d\n", buff, insertPnt); break; } } // clear buffer for (i = 0; i < BUFF_SIZE; i++) { buff[i] = 0; } printf("BREAK5\n"); // user input fgets(buff, BUFF_SIZE, stdin); buff[strlen(buff)] = '\0'; printf("BREAK6\n"); } } 

****更新的代码(仍然没有停止在BLANK入口处)****

 else{ while (fgets(buff, BUFF_SIZE, stdin) != NULL){ buff[strlen(buff) - 1] = '\0'; insertPnt = 1; printf("BREAK1: %s\n", buff); // set curr = root node curr = root; printf("BREAK2\n"); while (curr->next){ if (strcmp(buff, curr->stringDat) > 0){ insertPnt++; curr = curr->next; } else{ insert(buff, insertPnt, root); printf("%-20s %d\n", buff, insertPnt); // PRINT LINKED LIST print(root); break; } } // clear buffer for (i = 0; i < BUFF_SIZE; i++) { buff[i] = 0; } printf("BREAK5\n"); } } 

字符串和位置是正确的,但它是在多行上打印

因为你没有剥离由fgets提取的尾随新行:

 fgets(buff,BUFF_SIZE,stdin); buff[strlen(buff)] = '\0'; /* This is a NO-OP */ 

改成

 char *ptr; fgets(buff,BUFF_SIZE,stdin); if (ptr = strchr(buff, '\n')) { *ptr = '\0'; }