给一个固定的字符串,输入另一个字符串和它比较,直到猜对为止
本以为很简单,其实简单中也能学到很多细节的问题,下面附上自己的程序,自己学到的细节或者觉得要注意的点在注释中有说明
/* 给一个固定的字符串,输入另一个字符串和它比较(要求只要字母对应上就可以,不用大小写一模一样),直到猜对为止 */ /* 思路:将字符串全变为大写字母构成的字符串,再循环比较 */ #include <stdio.h> #include <string.h> #include <ctype.h> #define MAX 40 void ToUpper(char *); int cmpstr(char*, char*); int main (void) { char ANSWER[] = "Grant"; //这里的ANSWER要用变量字符串数组来储存,不能用define常量形式,因为下面会改变其值为大写的 char try1[MAX]; char try2[MAX]; //用try2是为了防止改变读入的try1值 puts ("Who is buried in Grant's tomb?"); gets (try1); //gets()函数从键盘读入数据,放入一个指针指向的地址中,以换行符结束读入 strcpy(try2,try1); //注意该strcpy()函数的用法 ToUpper(ANSWER); ToUpper(try2); while (!cmpstr(ANSWER, try2)) { printf("no, please enter another name:\n"); gets(try1); strcpy(try2,try1); ToUpper(try2); } puts("yes"); puts(try1); return 0; } /********************比较两个字符串**********************/ int cmpstr(char* str1, char* str2) { int i=0; if(strlen(str1) != strlen(str2)) return 0; //两个字符串长度不同的话,那么这两个字符串自然就不同了 else { while (str1[i]==str2[i] && str1[i]!='\0') i++; if(str1[i] == '\0') return 1; else return 0; } } /********************将一个由字母构成的字符串中的所有字符都变成大写字母**********************/ void ToUpper(char * str) { int i=0; while(i<strlen(str)) { str[i] = toupper(str[i]); //单独的使用toupper(str[i])不改变str[i]的值,要使用str[i]=toupper(str[i])赋值才能改变str[i]的值 i++; } }