为什么我的代码在第一个 if 语句处中断?

Why does my code break at the first if statement?

本文关键字:语句 中断 if 第一个 我的 代码 为什么      更新时间:2023-10-16
#include <stdio.h>
#include <ctype.h>
#include<string.h>
int main (void)
{
char *names;
int capacity = 0;
int size = 0;
char name[100];
printf ("Enter number 4 is you want to stop inputting names.n");
while (1)
{
printf ("Input:n");
fgets(name, sizeof(name),stdin);
printf ("%s", name);
if (strcmp(name, "end")!= 0)
{
printf ("hello");
}
if (strcmp (name, "end")== 0)
{
printf("bye ");
}
}
}

我试图继续循环以获取用户输入并在用户输入某个字符或单词时脱离循环。 但是当我输入"end"时,我希望输出是"再见",但输出是"hello"。

这个问题很微妙。阅读文档以了解fgets。然后在调用fgets后查看调试器中name的值。

fgets在看到换行符时结束输入,但在结果中包含换行符。所以name最终得到字符串"endn";将其与"end"进行比较将失败。

如果要使用fgets则必须允许该换行符,并与"endn"进行比较。

如果这是 C 代码,请使用scanf。如果这是C++代码,请将std::cin与流提取器一起使用。

这是由您的输入函数fgets引起的。改用cin,一旦输入">结束",您将获得预期的输出">再见"。

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <iostream>
using namespace std; 
int main (void) {
char *names;
int capacity = 0;
int size = 0;
char name[100];
printf ("Enter number 4 is you want to stop inputting names.n");
while (1)
{
printf ("Input:n");
cin >> name;
printf ("%s", name);
if (strcmp(name, "end")!= 0)
{
printf ("hello");
}
else if (strcmp (name, "end")== 0)
{
printf("bye ");
}
}
}

正如其他人已经提到的:fgets()也存储行尾字符n。如果您与"endn"进行比较,它将起作用。

而不是strcmp使用strncmpstrcmp将比较字符串中的所有字符,直到达到终止的空字符或字符不同。strncmp只会比较两个字符串中的前 n 个值。此外,您应该在printf("bye")后添加break以离开循环。

#include <stdio.h>
#include <ctype.h>
#include<string.h>
int main (void)
{
char *names;
int capacity = 0;
int size = 0;
char name[100];
printf ("Enter number 4 is you want to stop inputting names.n");
while (1)
{
printf ("Input:n");
fgets(name, sizeof(name),stdin);
printf ("%s", name);
if (strncmp(name, "end", 3)!= 0)
{
printf ("hello");
}
if (strncmp (name, "end", 3)== 0)
{
printf("bye ");
break;
}
}
}