我是C编程语言的新手,做了一些动手操作。我想使用for循环将字符串用户输入与数组中的字符串列表进行比较。我的代码看起来像这样:
#include <stdio.h>
#include <string.h>
void converter();
int main() {
converter();
return 0;
}
void converter(){
char convert[] = "";
char store[] = "";
int compare;
char List[10][4] = {"ABC","DEF","GHI","JKL","MNO","PQR","STU","VWX","YZA"};
printf("Which one do you want to select : \n");
for(int i=0 ; i<9 ; i++){
printf("%s \n",List[i]);
}
printf("Please select One : ");
scanf("%s",&convert);
for (int j=0 ; j<9 ; j++) {
printf("%d \n",strcmp(convert,List[j]));
if (strcmp(convert,List[j]) == 0){
compare = 1;
break;
}
}
if (compare != 1){
printf("Sorry your selected itemm is not valid. Please enter a valid selection \n");
converter();
}
printf("Ok we can proceed now");
}
运行代码后,我得到以下输出
output of the above code
即使用户输入的字符串和列表中的字符串相同,strcmp()也不会输出为0。但我观察到的另一件事是,如果我只是注解掉for循环中的if条件,那么strcmp()就会给出printf打印的输出0。
注解if函数后的代码:-
#include <stdio.h>
#include <string.h>
void converter();
int main() {
converter();
return 0;
}
void converter(){
char convert[] = "";
char store[] = "";
int compare;
char List[10][4] = {"ABC","DEF","GHI","JKL","MNO","PQR","STU","VWX","YZA"};
printf("Which one do you want to select : \n");
for(int i=0 ; i<9 ; i++){
printf("%s \n",List[i]);
}
printf("Please select One : ");
scanf("%s",&convert);
for (int j=0 ; j<9 ; j++) {
printf("%d \n",strcmp(convert,List[j]));
//if (strcmp(convert,List[j]) == 0){
// compare = 1;
// break;
//}
}
if (compare != 1){
printf("Sorry your selected itemm is not valid. Please enter a valid selection \n");
converter();
}
printf("Ok we can proceed now");
}
输出:-output after commenting
因此,我无法比较数组列表中的用户输入。
我想从代码中实现的:
用户将使用for循环显示字符串数组中的所有项。然后用户将输入一个字符串,从显示的列表中,然后代码将使用for循环将输入字符串与该数组中已经定义的字符串进行比较。如果用户输入的字符串与数组中的任何字符串匹配,那么我们可以继续进行下一段代码,否则将重复函数以再次要求用户输入字符串输入,直到并且除非它与数组中的列表匹配。用户总是知道他/她正在输入什么,因为我们首先显示列表项,然后要求从中选择一次。
请帮我一个解决方案来比较用户输入作为一个字符串,并比较它与字符串数组的列表。
也让我知道我哪里做错了。
先谢谢你的帮助。
1条答案
按热度按时间ivqmmu1c1#
此代码是未定义的行为:
convert
的大小为1个字符(空终止符)。所以绝对没有空间来存储任何文本。对于任何字符串,都需要将最大缓冲区大小传递给
scanf()
,并且需要检查scanf()
的返回值。如果使用以下工具构建程序,则会自动检测到此错误和其他类似错误: