#包括<stdio.h> 整型main() { 字符输入[40]; 字符检查[40]; 整数i=0; printf(“Hello!\n请输入单词或字符:\n”); 获取(输入);/* 过时的功能:不要使用*/ printf(“我现在将重复此操作,直到您将其键入给我。”); while(检查!=输入) { printf(“%s\n”,输入); 获取(检查);/* 过时的功能:不要使用*/ } printf(“再见!”); 返回0; }
-
18 获取() 已从标准中删除。 使用 fgets() 而不是。 – 在源中丢失 评论 2015年1月29日2:31 -
1 请注意 回答 到 为什么 strcmp() 输入相等时返回零 解释如何比较字符串的相等、不相等、小于、大于、小于或等于以及大于或等于。 并非所有字符串比较都是为了相等。 区分大小写的比较再次不同; 其他特殊比较(例如字典顺序)需要更专门的比较器,还有用于更复杂比较的正则表达式。 – 乔纳森·莱夫勒 评论 2016年11月22日22:44 -
还要注意,这里有一个基本上重复的问题 如何检查值是否与字符串匹配 这是几年前被问及的。 – 乔纳森·莱夫勒 评论 2017年2月10日5:24 -
这回答了你的问题吗? 如何检查值是否与字符串匹配 – 安德烈亚斯 评论 2020年1月16日3:37 -
三 这个问题很好,但是 获取() 是一个不合格的人。 自C11以来,它也已从标准中删除->请阅读 为什么gets函数如此危险,以至于不应该使用它? – RobertS支持Monica Cellio 评论 2020年5月30日9:50
11答案
while(strcmp(检查,输入)!= 0)
-
12 -
44 -
10 -
1 -
1 @AD贝弗里奇 buffer[strlen(buffer)-1]='\0'; 并不总是有效,实际上是危险的。 fgets() 并不总是返回以换行结尾的字符串,因此代码可以删除有效数据; 事实上 fgets() 可以返回零长度的字符串,这意味着 buffer[strlen(buffer)-1]=“\0”; 将在数组边界外写入并调用未定义的行为。 请参见 从fgets()输入中删除尾随换行符 – 安德鲁·亨勒 评论 2023年3月16日9:40
-
-
1 @不称职-如果你用 fgets() ,那么字符串可能是 “abc\n” 因为 fgets() 保持换行。 如果你将其与 “abc” ,您将得到“不相等”,因为空字节终止之间存在差异 “abc” 和读取数据中的换行符。 所以,你必须快速换行。 可靠的单线方法是 buffer[strcspn(buffer,“\n”)]=“\0”; 它的优点是无论缓冲区中是否有任何数据,或者该数据是否以换行结束,都能正常工作。 其他击倒新线的方式很容易崩溃。 – 乔纳森·莱夫勒 评论 2020年1月16日3:39 -
数组1==数组2
#包括<stdio.h> int检查器(char input[],char check[]); 整型main() { 字符输入[40]; 字符检查[40]; 整数i=0; printf(“Hello!\n请输入单词或字符:\n”); 扫描(“%s”,输入); printf(“我现在将重复此操作,直到您将其键入给我。”); 扫描(“%s”,检查); while(!checker(输入,检查)) { printf(“%s\n”,输入); 扫描(“%s”,检查); } printf(“再见!”); 返回0; } int checker(字符输入[],字符检查[]) { 整数i,结果=1; for(i=0;输入[i]!='\0'||检查[i];='\0';i++){ if(输入[i]!=检查[i]){ 结果=0; 断裂; } } 返回结果; }
---------- ---------- |0x4000 | | 0x4004| | 1 | | 7 | ---------- ----------
---------- ---------- |0x4000 | | 0x4004| | 1 | | 1 | ---------- ----------
#包括<stdio.h> #包括<stdlib.h> #包括<string.h> 整型main() { char s[]=“STACKOVERFLOW”; 字符s1[200]; printf(“输入要检查的字符串\n”)// 输入输入字符串 扫描(“%s”,s1); if(strcmp(s,s1)==0)//比较两个字符串 { printf(“两个字符串都匹配\n”); } 其他的 { printf(“输入的字符串不匹配\n”); } 系统(“暂停”); }
int strcmp(常量字符*s1,常量字符*s2) { 对于(i=0;s1[i]!='\0'|s2[i];='\0';i++) { 如果(s1[i]!=s2[i]) { return(unsigned char)s1[i]<(unsinged char)s2[i]- 1 : 1; } } 返回0; }
while(strcmp(检查,输入)) { //此处输入代码 }
如何正确比较字符串?
字符输入[40]; 字符检查[40]; strcpy(输入,“Hello”);// 以某种方式分配的输入 strcpy(勾选,“Hello”);// 以某种方式分配支票 //不足 while(检查!=输入) //很好 while(strcmp(检查,输入)!= 0) //或 while(strcmp(检查,输入))
A类 一串 是以第一个空字符结尾并包含该空字符的连续字符序列。 C11第7.1.1条1
检查!= 输入//比较地址,而不是地址引用的内容
int strcmp(常量字符*s1,常量字符*s2);
这个
字符串比较函数 函数比较指向的字符串
第1页 指向指向的字符串
s2秒 .
这个
字符串比较函数 函数返回一个大于、等于或小于零的整数, 相应地,作为所指向的字符串
s1 大于、等于或小于
s2秒 .
strcmp(检查,输入)!= 0
while(strcmp(检查,输入))
#包括<stdio.h> #包括<string.h> 整型main() { 字符输入[40]; char check[40]=“end\n”// 不要忘记检查\n while(strcmp(check,input))//strcmp如果相等则返回0 { printf(“请输入名称:\n”); fgets(输入,sizeof(输入),标准输入); printf(“我的名字是:%s\n”,输入); } printf(“再见!”); 返回0; }
#包括<stdio.h> #包括<string.h> 整型main() { 字符s1[50],s2[50]; printf(“输入字符串的字符:”); 获得(s1); printf(“\n输入要重复的字符串的不同字符:\n”); while(strcmp(s1,s2)) { printf(“%s\n”,s1); 获得(s2); } 返回0; }
-
三 -
三 -
#包括<iostream> 使用命名空间标准; 整型main() { 字符串str[]={“汤姆”,“克里斯”}; if(str[0]==“tom”) { 返回0; } 返回1; }