C语言 我的 if 语句与我希望它做的事情相反



我有一个程序,要求用户输入一个单词,他们输入的每个单词都会添加到链表中。当用户输入"END"程序应该列出所有节点时。

我的问题是程序只将单词"END"添加到列表中,当用户输入其他任何内容时,就会触发 else 条件:列表中的所有项目都被打印出来,但所有这些单词都只是"END"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node {
char word[32];
struct node *next;
};
int main() {
struct node *head = NULL, *cur = NULL;
char input[32];
while(1) {
cur = malloc(sizeof(struct node));
printf("Enter words: ");
scanf("%s", input);
if (strcmp(input, "END") == 0) {
cur->next = head;
strcpy(cur->word, input);
head = cur;
} else {
struct node *iter = head;
while (iter != NULL) {
printf("Contents: %sn", iter->word);
iter = iter->next;
}
}
}
}

通过使 if 语句检查条件是否== 1它只是让用户继续输入单词,而不管用户输入什么,例如"END".

任何帮助将不胜感激。

if 语句中的条件

if (strcmp(input, "END") == 0)

表示存储在数组input中的字符串等于字符串文字"END"。 因此,如果数组包含字符串"END"则在列表中插入一个新节点。

此外,您必须在此检查之后而不是之前为新节点分配内存。否则会出现内存泄漏。

请注意,你有一个无限循环。

并且您需要释放所有分配的内存。

看来你的意思是像下面这样

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N   32
struct node 
{
char word[N];
struct node *next;
};
int main(void) 
{
struct node *head = NULL;
char input[N];
printf( "Enter words: " );
while ( scanf( "%31s", input ) == 1 )
{
char tmp[N];
size_t i = 0;
while ( ( tmp[i] = toupper( ( unsigned char )input[i] ) ) != '' ) ++i;
if ( strcmp( tmp, "END" )  == 0 ) break;
struct node *current = malloc( sizeof( struct node ) );
strcpy( current->word, input );
current->next = head;
head = current;
}
for ( struct node *current = head; current != NULL; current = current->next )
{
printf( "%s -> ", current->word );
}
puts( "NULL" );
while ( head != NULL )
{
struct node *current = head;
head = head->next;
free( current );
}
return 0;
}

程序输出将如下所示

Enter words: Jackson Jake Hello end
Hello -> Jake -> Jackson -> NULL

首先,您需要将字符串添加到列表中,直到在比较不为零时使用strcmp() != 0END输入字符串。

其次,创建包含新字符串添加的当前cur节点需要有一个尾部指针才能使用节点添加新字符串next如下所示。此外,对于节点,您需要确保head始终位于列表的开头。

第三,您需要break列表何时成功打印,否则您将永远陷入while(1)循环。

int main() {
struct node *head = NULL, *next = NULL, *cur = NULL;
char input[32];
while(1) {
printf("Enter words: ");
scanf("%s", input);
if (strcmp(input, "END") != 0) {
cur = malloc(sizeof(struct node));
cur->next = NULL;
strcpy(cur->word, input);
if (head == NULL) {
head = cur;
next = head;
}
next->next = cur;
} else {
struct node *iter = head;
while (iter != NULL) {
printf("Contents: %sn", iter->word);
iter = iter->next;
}
break;
}
}

相关内容

  • 没有找到相关文章

最新更新