c语言 - 我对 if 语句有问题(它跳过所有条件并且不等待用户输入)



我学习C语言已经有一段时间了,我有一个bug似乎无法修复。

作为修订的一部分,我开始为股票市场编写一个非常简单的应用程序。

每当我构建和运行程序时,程序不会等待用户输入(Y(或(N(,而是跳过检查[If]和[else-If],而是执行[else]条件。

#include <stdio.h>
#include <stdlib.h>
int main()
{
int Salary;
char key;
printf("Enter your salary: n");
scanf("%d",&Salary);
printf("Your salary = %d.n", Salary);
if(Salary<='10000'&&Salary>'5000')
{
printf("Congratulations, You are a Platinum-Tier Client!n");
printf("Do You want to view our specifically-tailored offers for you?n");
printf("Type "Y" for Yes, and "N" for No.nnn");
key=getchar();
fflush(stdin);
if(key=='Y')
{
printf("Here are our offers for you, enjoy!nn");
printf("Kindly Type the number of the offer you want then press Enter.n");
printf("1- Real Estates.n");
printf("2- Stocks.n");
printf("3- Bonds.n");
printf("4- STRIPS.n");
printf("5- Funds.n");
}
else if(key=='N')
{
printf("Well! Have a nice day!n");
printf("Kindly press Enter to exit!n");
}
else
{
printf("Wrong choice!n");
printf("Type "Y" for Yes, and "N" for No.nnn");
}
}
else if(Salary<='5000'&&Salary>='3000')
{
printf("Congratulations, You are a Gold-Tier Clientn");
printf("Do You want to view our specifically-tailored offers for you?n");
printf("Type "Y" for Yes, and "N" for No.nnn");
key=getchar();
if(key=='Y')
{
printf("Here are our offers for you, enjoy!nn");
printf("Kindly Type the number of the offer you want then press Enter.n");
printf("1- Real Estates.n");
printf("2- Stocks.n");
printf("3- Bonds.n");
printf("4- STRIPS.n");
printf("5- Funds.n");
}
else if(key=='N')
{
printf("Well! Have a nice day!n");
printf("Kindly press Enter to exit!n");
}
else
{
printf("Wrong choice!n");
printf("Type "Y" for Yes, and "N" for No.nnn");
}
}
else if(Salary<'3000'&&Salary>'1')
{
printf("Congratulations, You are a Silver-Tier Clientn");
printf("Do You want to view our specifically-tailored offers for you?n");
printf("Type "Y" for Yes, and "N" for No.nnn");
key=getchar();
if(key=='Y')
{
printf("Here are our offers for you, enjoy!nn");
printf("Kindly Type the number of the offer you want then press Enter.n");
printf("1- Real Estates.n");
printf("2- Stocks.n");
printf("3- Bonds.n");
printf("4- STRIPS.n");
printf("5- Funds.n");
}
else if(key=='N')
{
printf("Well! Have a nice day!n");
printf("Kindly press Enter to exit!n");
}
else
{
printf("Wrong choice!n");
printf("Type "Y" for Yes, and "N" for No.nnn");
}
}
else
{
printf("Sorry! No offers for you!n");
}
return 0;
}

结果总是(例如,如果我写5000(:

Enter your salary:
5000
Your salary = 5000.
Congratulations, You are a Silver-Tier Client
Do You want to view our specifically-tailored offers for you?
Type "Y" for Yes, and "N" for No.

Wrong choice!
Type "Y" for Yes, and "N" for No.

我在这里错过了什么?

谢谢你的帮助,如果这个问题有点扯,我很抱歉。

您使用的是多字节整数字符常量,例如在if语句中

if(Salary<='10000'&&Salary>'5000')

其值由实现定义。而是使用像这样的整数常量

if ( 5000 < Salary && Salary <= 10000 )

在这个if语句之后,下一个if语句可以像一样编写

else if ( 3000 <= Salary )

而不是

else if(Salary<='5000'&&Salary>='3000')

对于其他if语句,依此类推。

对输入流使用函数fflush

fflush(stdin);

具有未定义的行为。删除该语句。

这次调用getchar

key=getchar();

在输入Salary值时按下Enter键之后读取存储在输入缓冲器中的新行字符CCD_ 1。

相反,使用以下方式扫描

scanf( " %c", &key );

注意格式字符串中的前导空格。它允许跳过空白字符。

因此,请快速查看,尝试从if(Salary<='10000'&&Salary>'5000')中删除",使其成为if(Salary<=10000 && Salary>5000)当你用"包围一个数字时,它不再是整数,而是一个字符数组或字符串。您将Salary与字符串"5000"的ascii值进行比较,而不是整数5000。

最新更新