C++ 为什么我的代码在第一个if语句时中断? 包括 包括 包括 int主空隙 { 字符*名称; int容量=0; int size=0; 字符名[100]; printf Enter number 4表示您要停止输入名称。\n; 而1 { printf输入:\n; fgetsname、sizeofname、stdin; printf%s,名称; 如果strcmpname,结束!=0 { printf你好; } 如果strcmp name,end==0 { 印刷品; } } }
我试图保持循环以获得用户输入,并在用户输入某个字符或单词时中断循环。C++ 为什么我的代码在第一个if语句时中断? 包括 包括 包括 int主空隙 { 字符*名称; int容量=0; int size=0; 字符名[100]; printf Enter number 4表示您要停止输入名称。\n; 而1 { printf输入:\n; fgetsname、sizeofname、stdin; printf%s,名称; 如果strcmpname,结束!=0 { printf你好; } 如果strcmp name,end==0 { 印刷品; } } },c++,c,C++,C,我试图保持循环以获得用户输入,并在用户输入某个字符或单词时中断循环。 但是当我输入end时,我希望输出是bye,但输出是hello。这是由输入函数fgets引起的。改用cin,一旦输入结束,您将获得预期的输出 使用strncmp代替strcmp。strcmp将比较字符串中的所有字符,直到到达终止的空字符或字符不同为止。strncmp将只比较两个字符串中的前n个值。还应该在printfbye之后添加break以离开循环 #include <stdio.h> #include <c
但是当我输入end时,我希望输出是bye,但输出是hello。这是由输入函数fgets引起的。改用cin,一旦输入结束,您将获得预期的输出 使用strncmp代替strcmp。strcmp将比较字符串中的所有字符,直到到达终止的空字符或字符不同为止。strncmp将只比较两个字符串中的前n个值。还应该在printfbye之后添加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;
}
}
}
问题很微妙。请阅读有关FGET的详细信息。然后在调用fgets后查看调试器中name的值 fgets在看到换行符时结束输入,但结果中包含换行符。因此名称以字符串结尾\n;将其与目的进行比较将失败 如果要使用fgets,则必须允许该换行符,并与end\n进行比较
如果这是C代码,请使用scanf。如果这是C++代码,使用STD::CIN和流提取器。
,正如其他人已经提到的:FGET也存储了行的结尾字符N。如果与end进行比较,\n它将起作用。
看起来缺少一个}。。。为什么要显示printf Enter number 4?是否要停止输入名称。\n;?sry这是一个打字错误,在那之前我试着使用isalpha,但忘了更改它,但它仍然不难阅读。使用正确的标识。欢迎使用SO。除非你想混合这两种语言,请决定你是否想问C或C++,只使用相关的标签。BTW,你应该删除C++语言标签,或者使用C++头文件。C和C++是不同的语言。例如,C++有文本的STD::String类型,C没有。谢谢,我最近开始在C上,我已经在这个问题上停留了很长时间。这是错误的。strcmpname,end将不会超出名称中的第四个字符,因为end只有4个字符。更改为strncmp可以使此特定示例正常工作,因为fgets读取换行符并将换行符放入名称中。但这与名称是100个字符的数组无关。名称中的值是以nul结尾的字符串,即C样式的字符串,strcmp知道如何处理该字符串。您真的不想对每次字符串比较都要比较的文本长度进行硬编码。这是一场维护噩梦。@PeteBecker你是对的,我弄错了。从不需要比较整本书。是的,问题消失了。这与错误已修复的情况不同。一个好的答案可以解释这个问题来自何处,以及为什么修复会起作用。而且,由于这个代码不被编译为C++,这里所用的C++特性是从主的省略返回值,所以C++解决方案可能不合适。我已经删除了我以前的评论,它过于苛刻。只是想确定一下:“换行符”是否总是\n出现在所有操作系统上?或者是R或甚至\r\n?@阿德里安——在C和C++代码中,字符\n是换行符。在输出时,标准库负责将该字符转换为在目标平台上开始新行所需的任何字节序列,反之亦然。#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;
}
}
}