使用cprogrammingsimplified教程编写自己的stringcompare。 完成后重新格式化并运行它。 适用于单个单词,
但是
键入空格键会跳过第二次扫描并立即输出 '单词不是相同的'
任何人都知道如何允许使用一个空格键?
提前致谢。
#include <stdio.h>
int mystrcmp(char s1[], char s2[]);
int main(){
char s1[10], s2[10];
int flag;
printf("Type a string of 10\n\n");
scanf("%s",&s1);
printf("type another string of 10 to compare\n\n");
scanf("%s",&s2);
flag = mystrcmp(s1,s2);
if(flag==0)
printf("the words are the same\n\n");
else
printf("the words are not the same\n\n");
return 0;
}
int mystrcmp(char s1[], char s2[]){
int l=0;
while (s1[l] == s2[l]) {
if (s1[l] == '\0' || s2[l] == '\0')
break;
l++;
}
if (s1[l] == '\0' && s2[l] == '\0')
return 0;
else
return -1;
}
答案 0 :(得分:3)
使用fgets()
读取实线,而不是scanf()
来读取以空格分隔的单词。
请记住,fgets()
会在字符串中包含换行符。
答案 1 :(得分:3)
strcmp
不允许空格键,scanf
格式说明符%s
。输入在空格处被截断,因此您读取的第二个字符串实际上是第一个字符串的延续。
您可以在格式说明符中使用%9[^\n]
代替%s
来解决此问题:
printf("Type a string of 10\n\n");
scanf("%9[^\n]",s1); //s1 is char [10]
printf("type another string of 10 to compare\n\n");
scanf("%9[^\n]",s2); //s2 is char [10]
9
将输入限制为九个字符,因为您使用的是十个字符的缓冲区。
答案 2 :(得分:2)
很多答案告诉你scanf("%s",s1)
只能逐字逐句地阅读。这是因为默认情况下scanf("%s",s1)
由所有空格分隔,其中包括\t
,\n
,<space>
或您能想到的任何其他空格。
scanf("%[^\n]s",s1)
做的是将分隔符设置为\n
。所以实际上读取所有其他空格。
@dasablinklight还在'[^\n]'
之前指定了9,这表示scanf()
从输入缓冲区中获取了9个值。
IMO scanf()
是一个非常好的功能,因为它的隐藏功能。我建议你在documentation中阅读更多相关信息。
答案 3 :(得分:0)