我被要求从用户那里获取第一个和第二个名字并在文件中搜索它。当用户输入字符“x”时,我也会被要求终止。或者' X'。
AddressComponent
它应该显示" BYE"并终止程序,但当我输入第一个printf("\nEnter the name and surname for WHR calculation (Exit - X): ");
scanf("%s %s",name,surname);
while(strcmp(name,'X')==0 ||strcmp(name,'x')==0){
printf("BYE!!\n");
exit(1);
}
并点击输入时,没有任何反应,直到我再次输入x
并点击输入。< / p>
答案 0 :(得分:1)
您将关闭1个字符,但后面跟着新行(回车):
if ( tolower( name[0] ) == 'x' && name[1] == 0 )
{
printf( "BYE!\n" );
exit( 1 );
}
while
循环不需要strcmp
必须与"x"
而不是'x'
进行比较,但它比简单的字符比较更长。 PS:tolower
需要#include <ctype.h>
。
答案 1 :(得分:1)
使用do while
循环,这会一直要求输入,直到用户输入"x"
或"X"
。 do while
循环是理想的,因为while 条件位于循环的 end ,这意味着循环将始终在至少每个程序执行一次。然后它将继续询问用户输入,直到用户输入所提到的字符串(x或X)。
do {
printf("\nEnter the name and surname for WHR calculation (Exit - X): ");
scanf("%s %s",name,surname);
// Do more work here...
} while((strcmp(name, "X") != 0) && (strcmp(name, "x") != 0));
// Finish program
printf("BYE!!\n");
exit(1);
请注意,strcmp()
需要包含string.h
。
答案 2 :(得分:1)
这里有几个基本错误: -
首先,如果您正在使用while,则最好使用if here
第二,你正在比较角色&#39; X&#39;或者&#39; x&#39;用字符串
我正在运行代码为我工作
char name[100], surname[100];
printf("\nEnter the name and surname for WHR calculation (Exit - X): ");
scanf("%s %s",name,surname);
printf("\n%s surname %s \n", name ,surname);
if(strcmp(name,"X")==0 ||strcmp(name,"x")==0){
printf("BYE!!\n");
exit(1);
}
答案 3 :(得分:1)
此代码等待用户输入两个单词,用空格/换行符分隔:
scanf("%s %s",name,surname);
系统不会继续执行您的其他代码,直到它从用户那里得到它想要的东西 - 两个字 - 或者发生错误(例如用户可以按 Ctrl + C )。
您似乎希望允许用户为name
提供“x”并立即退出。所以你应该拆分输入代码:
scanf("%s",name);
scanf("%s",surname);
并填写检查中间x
的代码:
scanf("%s",name);
if(strcmp(name,"X")==0 ||strcmp(name,"x")==0){
printf("BYE!!\n");
exit(1);
}
scanf("%s",surname);
如果你想检查名字和姓氏(也许用户输入他的姓氏为x
以便退出),你应该复制代码或将其填入函数:
scanf("%s",name);
check_for_x(name);
scanf("%s",surname);
check_for_x(surname);
...
void check_for_x(const char *str)
{
if(strcmp(str,"X")==0 ||strcmp(str,"x")==0){
printf("BYE!!\n");
exit(1);
}
}