为什么这不起作用?我想比较两个char
。
//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; }
答案 0 :(得分:4)
变化:
char myName = 'name';
到
const char *myName = "name";
你应该在这里指向chars数组而不是一个char。 也改变
scanf("%c", *nameTemp);
到
scanf("%s", nameTemp);
您应该扫描字符数组而不是一个字符。
goto
在这种程序中?为什么在世界上你没有使用普通while
循环?
答案 1 :(得分:3)
此行错误
char myName = 'name';
myName只能容纳1个字符,并且您正在尝试将字符串放入变量中。你需要一个空分隔的char数组。
答案 2 :(得分:3)
我认为你需要改变
char myName = 'name';
到此:
char *myName = "name";
由于myName
只能容纳一个字符而你正在存储一个错误的字符串。
同样更改您的scanf:
scanf("%s", nameTemp);
注意: - 强>
char * 用于指向一个简单的字符数据值数组。
答案 3 :(得分:2)
要在c中声明一个字符串,必须声明一个char类型的指针,如下所示
char *myName="name";
并且数组的名称就足够了,因为它是一个指针
scanf("%s", nameTemp);
答案 4 :(得分:1)
您似乎对指针和值类型没有扎实的理解。例如:
char myName = 'name';
这不是根本你在想什么。如果您希望此变量包含字符串,则该字符串应为char *
而不是char
。文字'name'
不是字符串"name"
- 单引号表示字符文字而不是字符串文字。四字符字符文字是一种很少使用且很少有用的结构,它将所有字符组合成一个整数 - 在这种情况下,一个整数包含字符'n','a','m'和'E'。 (过去常常在旧的Mac OS上用于文件元数据。我不确定它是否曾在其他地方常用。)
此外,您的阅读代码不正确:
scanf("%c", *nameTemp);
格式说明符“%c”查找单个字符而不是字符串,而*nameTemp
表示“取消引用指针nameTemp
”,这根本不是您要在此处执行的操作。相反,你想要“%s”格式说明符,只是传递nameTemp
,因为scanf想要一个指针。
此代码的正确惯用版本应如下所示:
//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");
}
}
(警告:用浏览器编写,未经过测试,但希望你能得到这个想法。)
答案 5 :(得分:0)
你必须改变这个
char myName = 'name';
到
char *myName = "name";
或
char myName[] = "name";