每次用户选择他们喜欢的语言时,我都需要给底部的变量加一。如果你能帮我完成这个计数,那将是非常有帮助的。当我运行脚本时,我得到的是底部所有变量的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;
}
3条答案
按热度按时间pcrecxhr1#
代码的问题在于,您使用的是
int
变量,但您检查的是字符值(char
)上的条件,该字符值实际上具有整数值,但它不是您所想到的值:它们实际上是ASCII value,例如,'1' ASCII值是49,这就是为什么你得不到想要的结果。您可能要做的是检查
lang
的值是否等于1、2等,这可以通过以下条件实现:您的代码还存在其他问题,例如,您将
clan
、java
、pyth
和mat
变量声明为float
,但将它们用作整数。您可以使用C增量运算符代替
java = java + 1
:java += 1;
或java++;
最后但并非最不重要的是,我建议您选择indentation style并坚持使用它,因为它使您的代码更具可读性。
3pmvbmvn2#
除了前面提到的将和int与字符进行比较的问题之外,这里还有一个bug:
正如您所看到的,您跳过了第一个用户输入,而没有增加任何选项。
处理第一次循环的一种更干净的方法是这样的(你可以假设用户在启动程序时至少需要第一次循环),注意
ye
的初始化,把你的计数改为int
,并且在其他一些答案中指出了更好的缩进和增量方法。6pp0gazn3#
你是说
不
您输入的是int而不是char