为什么我的代码在第一个 if 语句处中断?
Why does my code break at the first if statement?
#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
使用strncmp
。strcmp
将比较字符串中的所有字符,直到达到终止的空字符或字符不同。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;
}
}
}
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 如何在不中断的情况下正确使用C++中的切换用例语句中的Fallthrough
- C++ 中断语句不起作用
- 为什么我的代码在第一个 if 语句处中断?
- 我的 break 语句没有中断 for 循环
- 控制开关语句的流而不中断
- 中断语句未退出循环
- 错误:中断语句不在循环或交换机内
- 中断语句不会退出循环
- while语句中断循环
- 在clang-format中控制语句之后中断
- 我如何告诉gcc在switch/case语句上警告(或失败)而不中断?
- 切换语句,在C++中的每个事例步骤都自动中断
- return语句何时中断函数