我试图得到一个程序,让用户输入一个单词或字符,存储它,然后打印它,直到用户再次键入它,退出程序。我的代码是这样的:
#include <stdio.h>
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
gets(input); /* obsolete function: do not use!! */
printf("I will now repeat this until you type it back to me.\n");
while (check != input)
{
printf("%s\n", input);
gets(check); /* obsolete function: do not use!! */
}
printf("Good bye!");
return 0;
}
问题是,我一直得到输入字符串的打印,即使当用户的输入(检查)匹配原始(输入)。我把两者比较错了吗?
你不能像这样直接比较数组
array1==array2
你应该一个字符一个字符地比较;为此,你可以使用一个函数并返回一个布尔值(True:1, False:0)。然后您可以在while循环的测试条件中使用它。
试试这个:
#include <stdio.h>
int checker(char input[],char check[]);
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
scanf("%s",input);
printf("I will now repeat this until you type it back to me.\n");
scanf("%s",check);
while (!checker(input,check))
{
printf("%s\n", input);
scanf("%s",check);
}
printf("Good bye!");
return 0;
}
int checker(char input[],char check[])
{
int i,result=1;
for(i=0; input[i]!='\0' || check[i]!='\0'; i++) {
if(input[i] != check[i]) {
result=0;
break;
}
}
return result;
}
欢迎了解指针的概念。一代又一代的初级程序员发现这个概念难以捉摸,但是如果您希望成长为一个称职的程序员,您必须最终掌握这个概念——而且,您已经提出了正确的问题。这很好。
你清楚什么是地址了吗?请看这个图表:
---------- ----------
| 0x4000 | | 0x4004 |
| 1 | | 7 |
---------- ----------
在图中,整数1存储在内存地址0x4000处。为什么在一个地址?因为内存很大,可以存储很多整数,就像一个城市很大,可以容纳很多家庭一样。每个整数存储在一个内存位置,就像每个家庭居住在一个房子里一样。每个内存位置都由一个地址标识,就像每个房子都由一个地址标识一样。
图中的两个框表示两个不同的内存位置。你可以把它们想象成房子。整数1驻留在地址为0x4000的内存位置(想象一下,“4000 Elm St.”)。整数7驻留在地址为0x4004的内存位置(想象一下,“4004 Elm St.”)。
你以为你的程序在比较1和7,但它不是。它在比较0x4000和0x4004。当你遇到这种情况时会发生什么?
---------- ----------
| 0x4000 | | 0x4004 |
| 1 | | 1 |
---------- ----------
这两个整数相同,但是地址不同。您的程序比较这些地址。
你需要使用strcmp(),你需要#include <string.h>
!=和==操作符只比较这些字符串的基址。不是字符串的内容
while (strcmp(check, input))
示例代码:
#include <stdio.h>
#include <string.h>
int main()
{
char input[40];
char check[40] = "end\n"; //dont forget to check for \n
while ( strcmp(check, input) ) //strcmp returns 0 if equal
{
printf("Please enter a name: \n");
fgets(input, sizeof(input), stdin);
printf("My name is: %s\n", input);
}
printf("Good bye!");
return 0;
}
注1:gets()是不安全的。请改用fgets()
注意:当使用fgets()时,你也需要检查'\n'新行字符