我正在尝试扫描输入,如果用户键入“是”则输入“etc”否则退出。但它没有正常工作,当我输入是,它表示无效。提前谢谢。
#include <stdio.h>
char yes='yes';
char name[100];
int main()
{
puts("Starting History Project please Enter your name: ");
scanf("%s",&name);
printf("Hey %s!",name);
puts("My name is C! Are you interested about my history? yes or no");
scanf("%s", &yes);
if (yes == 'yes')
{
printf("Starting ADT \n");
}
else
{
printf("Invalid\n");
exit(0);
}
return(0);
}
答案 0 :(得分:2)
变量yes是一个char,因此只能包含一个字符或转义序列。将char与'yes'进行比较就像将字母'y'与“yes”进行比较。 'yes'是非法的,它是一个字符串,不能有单引号。您应该使用0 == strcmp(inputStr, "yes")
代替。
答案 1 :(得分:1)
我的编译器推出了以下警告,也许你应该修复它们?
foo.c:2:10: warning: multi-character character constant [-Wmultichar]
char yes='yes';
^
foo.c:2:10: warning: implicit conversion from 'int' to 'char' changes value from 7955827 to 115
[-Wconstant-conversion]
char yes='yes';
~~~ ^~~~~
foo.c:12:16: warning: format specifies type 'char *' but the argument has type 'char (*)[100]' [-Wformat]
scanf("%s",&name);
~~ ^~~~~
foo.c:21:16: warning: multi-character character constant [-Wmultichar]
if (yes == 'yes')
^
foo.c:21:13: warning: comparison of constant 7955827 with expression of type 'char' is always false
[-Wtautological-constant-out-of-range-compare]
if (yes == 'yes')
~~~ ^ ~~~~~
foo.c:28:9: warning: implicitly declaring library function 'exit' with type 'void (int) __attribute__((noreturn))'
exit(0);
^
foo.c:28:9: note: please include the header <stdlib.h> or explicitly provide a declaration for 'exit'
6 warnings generated.
另外,
==
不会在C中进行字符串比较。yes
问题分配空间。 答案 2 :(得分:0)
scanf中不需要&
。见http://www.cplusplus.com/reference/cstdio/scanf/
答案 3 :(得分:0)
如果yes
要接收字符串,那么您应该将其定义为字符串,就像name
一样。
char yes [32];
例如。
在测试中:
if (yes == 'yes')
'
分隔符用于字符常量而非字符串常量 - 您需要"
。
此外,在C中,字符串不是第一类数据类型,因此您不能简单地使用==
运算符测试相等性。相反,玩具需要库支持字符串操作(或逐个字符测试):
if( strcmp( yes, "yes" ) )
在scanf
调用本身,标识符name
已经是一个地址,&
不是必需的,实际上会导致错误的行为。
答案 4 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char name[100];
char input[16];
puts("Starting History Project please Enter your name: ");
scanf("%s", name);
printf("Hey %s! ", name);
puts("My name is C! Are you interested about my history? yes or no");
scanf(" %s", input);
if (!strcmp(input, "yes")){
printf("Starting ADT \n");
} else {
printf("Invalid\n");
exit(0);
}
return 0;
}