C 比较两个字符
为什么这样不行?我想比较两个C 比较两个字符,c,char,comparison,strcmp,C,Char,Comparison,Strcmp,为什么这样不行?我想比较两个chars //Login. char myName = 'name'; //Login Temp. char nameTemp[10]; again: printf("Name?\t"); scanf("%c", *nameTemp); if (strcmp(myName, nameTemp) == 0) { printf("Hej"); } else { print
char
s
//Login.
char myName = 'name';
//Login Temp.
char nameTemp[10];
again:
printf("Name?\t");
scanf("%c", *nameTemp);
if (strcmp(myName, nameTemp) == 0) {
printf("Hej");
}
else { printf("Wrong. Try again"); goto again; }
这条线错了
char myName = 'name';
myName只能容纳1个字符,您正试图在变量中放入字符串。您需要一个空分隔字符数组。我认为您需要更改
char myName = 'name';
为此:
char *myName = "name";
因为myName
只能保存一个字符,所以您将一个字符串存储在错误的位置
也可以这样更改您的scanf:
scanf("%s", nameTemp);
//Login.
char myName = "name";
//Login Temp.
char nameTemp[10];
int matched = 0;
while (!matched) {
printf("Name?\t");
int readSucceeded = scanf("%9s", nameTemp);
if (readSucceeded && strcmp(myName, nameTemp) == 0) {
printf("Hej");
break;
}
else {
printf("Wrong. Try again");
}
}
注意:-
char*用于指向字符数据值的简单数组。更改:
char myName = 'name';
char myName = 'name';
到
这里应该有指向字符数组的指针,而不是一个字符。
也改变
scanf("%c", *nameTemp);
到
您应该扫描字符数组而不是一个字符
在这类节目中,你是怎么做到的?在这个世界上,为什么不使用普通
而使用循环?要在c中声明字符串,必须声明char类型的指针,如下所示
char *myName="name";
数组的名称就足够了,因为它是一个指针
scanf("%s", nameTemp);
您似乎对指针和值类型没有很好的理解。例如:
char myName = 'name';
这根本不是你想的。如果希望此变量保存字符串,则应为char*
类型,而不是char
。而且文字'name'
不是字符串“name”
——单引号表示字符文字而不是字符串文字。四个字符的文字是一种很少使用且很少有用的构造,它将所有字符组合成一个整数——在本例中,一个整数包含字符“n”、“A”、“m”和“e”的字节值。(这在旧的Mac OS上经常被用于文件元数据。我不确定它是否在其他地方被广泛使用。)
此外,您的阅读代码不正确:
scanf("%c", *nameTemp);
格式说明符“%c”查找单个字符而不是字符串,而*nameTemp
表示“取消引用指针nameTemp
”,这根本不是您想要在此处执行的操作。相反,您需要“%s”格式说明符,只需传递nameTemp
,因为scanf需要一个指针
此代码的正确惯用版本应如下所示:
scanf("%s", nameTemp);
//Login.
char myName = "name";
//Login Temp.
char nameTemp[10];
int matched = 0;
while (!matched) {
printf("Name?\t");
int readSucceeded = scanf("%9s", nameTemp);
if (readSucceeded && strcmp(myName, nameTemp) == 0) {
printf("Hej");
break;
}
else {
printf("Wrong. Try again");
}
}
(警告:在浏览器中编写,未经测试,但希望您能理解。)您必须更改此设置
到
或
“行不通”是什么意思?你预计会发生什么,实际会发生什么?相信我-你不需要gotoIt看起来好像你是编程新手,所以我也要指出,这一点更为贴切@crashmstr:-忽略了这一点。谢谢现在更新我的答案!但我想我现在已经太迟了:(@crashmstr:-非常感谢,先生!这不是一个字符串-这是一个多字符文字。奇怪的是,我认为它甚至不会警告你,因为这些文字会生成整数,而将整数截断成字符并不是一个错误。
char *myName = "name";
char myName[] = "name";