如何在C中的for循环内比较“字符串用户输入”与“数组中的字符串列表”

w8rqjzmb  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(77)

我是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循环将输入字符串与该数组中已经定义的字符串进行比较。如果用户输入的字符串与数组中的任何字符串匹配,那么我们可以继续进行下一段代码,否则将重复函数以再次要求用户输入字符串输入,直到并且除非它与数组中的列表匹配。用户总是知道他/她正在输入什么,因为我们首先显示列表项,然后要求从中选择一次。
请帮我一个解决方案来比较用户输入作为一个字符串,并比较它与字符串数组的列表。
也让我知道我哪里做错了。
先谢谢你的帮助。

ivqmmu1c

ivqmmu1c1#

此代码是未定义的行为:

char convert[] = "";
scanf("%s",&convert);

convert的大小为1个字符(空终止符)。所以绝对没有空间来存储任何文本。
对于任何字符串,都需要将最大缓冲区大小传递给scanf(),并且需要检查scanf()的返回值。
如果使用以下工具构建程序,则会自动检测到此错误和其他类似错误:

相关问题