如何在C/C++中跟踪用户输入

fcy6dtqo  于 2023-01-29  发布在  C/C++
关注(0)|答案(3)|浏览(189)

每次用户选择他们喜欢的语言时,我都需要给底部的变量加一。如果你能帮我完成这个计数,那将是非常有帮助的。当我运行脚本时,我得到的是底部所有变量的0.0000。

#include <stdio.h>

int main() {

    char ye;
    int lang;
    float clan=0, java=0, pyth=0, mat=0;

    printf("Favorite programming language C(1), Java(2), Python(3), Matlab(4): ");
    scanf("%d", &lang);

    printf("Continue (y/n): ");
    scanf(" %c" ,&ye);

    while (ye == 'y')
    {
        printf("Favorite programming language C(1), Java(2), Python(3), Matlab(4): ");
        scanf("%d", &lang);

        if (lang == '1')
        {
            clan=clan+1;
        }
        else if (lang == '2')
        {
            java=java+1;
        }
        else if (lang == '3')
        {

            pyth=pyth+1;
        }
        else if (lang == '4')
        {

            mat=mat+1;
        }

        printf("Continue (y/n): ");
        scanf(" %c" ,&ye);
    }

    printf("C: %f\n",clan);
    printf("Java: %f\n",java);
    printf("Python: %f\n",pyth);
    printf("Matlab: %f\n",mat);

    return 0;
}
pcrecxhr

pcrecxhr1#

代码的问题在于,您使用的是int变量,但您检查的是字符值(char)上的条件,该字符值实际上具有整数值,但它不是您所想到的值:它们实际上是ASCII value,例如,'1' ASCII值是49,这就是为什么你得不到想要的结果。
您可能要做的是检查lang的值是否等于1、2等,这可以通过以下条件实现:

if(lang == 1) {
  // do smth
}

您的代码还存在其他问题,例如,您将clanjavapythmat变量声明为float,但将它们用作整数。
您可以使用C增量运算符代替java = java + 1java += 1;java++;
最后但并非最不重要的是,我建议您选择indentation style并坚持使用它,因为它使您的代码更具可读性。

3pmvbmvn

3pmvbmvn2#

除了前面提到的将和int与字符进行比较的问题之外,这里还有一个bug:

printf("Favorite programming language C(1), Java(2), Python(3), Matlab(4): ");
scanf("%d", &lang);

printf("Continue (y/n): ");
scanf(" %c" ,&ye);

正如您所看到的,您跳过了第一个用户输入,而没有增加任何选项。
处理第一次循环的一种更干净的方法是这样的(你可以假设用户在启动程序时至少需要第一次循环),注意ye的初始化,把你的计数改为int,并且在其他一些答案中指出了更好的缩进和增量方法。

#include <stdio.h>
int main() {

    char ye = 'y';
    int lang;
    int clan=0, java=0, pyth=0, mat=0;

    while (ye == 'y')
    {

        printf("Favorite programming language C(1), Java(2), Python(3), Matlab(4): ");
        scanf("%d", &lang);

        if (lang == 1){
            clan++;
        }
        else if (lang == 2){
            java++;
        }
        else if (lang == 3){
            pyth++;
        }
        else if (lang == 4){
            mat++;
        }

        printf("Continue (y/n): ");
        scanf(" %c" ,&ye);
    }

    printf("C: %d\n",clan);
    printf("Java: %d\n",java);
    printf("Python: %d\n",pyth);
    printf("Matlab: %d\n",mat);

    return 0;
}
6pp0gazn

6pp0gazn3#

你是说

if (lang == 1)

if (lang == '1')

您输入的是int而不是char

相关问题