这个程序编码完成了我的一个大学实验表。我不知道如何修改scanf()
语句来纠正此错误。
看来切换机箱也出现了错误。这是我的代码。
#include<stdio.h>
//Function main
int main (void)
{
char roomType,payingMethod,cont;
int noOfRooms=0,noOfNights=0;
float discount=0,amount=0;
while(cont!='n'||cont!='N')
{
printf("\n(D-Deluxe|S-Superior Deluxe|C-Club Suits|E-Executive Suits|P-Presidential Suits)\nENTER THE ROOM TYPE:");
scanf("%c%*c",&roomType);
if(roomType!='D' || roomType!='S' || roomType!='E' || roomType!='C' || roomType!='P')
{
printf("Invalid Room Type!\n");
return 0;
}
printf("\nENTER THE NUMBER OF ROOMS:");
scanf("%d",&noOfRooms);
printf("\nNUMBER OF NIGHTS:");
scanf("%d",&noOfNights);
printf("\nPAYING METHOD (M-cash|C-credit card):");
scanf("%c%*c",&payingMethod);
if(payingMethod=='c'||payingMethod=='C')
discount=0.9;
else
discount=1.0;
switch(roomType)
{
case 'D':
amount=31000*noOfRooms*noOfNights*discount;
break;
case 'S':
amount=35000*noOfRooms*noOfNights*discount;
break;
case 'C':
case 'c':
amount=50000*noOfRooms*noOfNights*discount;
break;
case 'E':
case 'e':
amount=75000*noOfRooms*noOfNights*discount;
break;
case 'P':
case 'p':
amount=100000*noOfRooms*noOfNights*discount;
break;
}
printf("\nTotal amount payable: %f\n",amount);
printf("\nDO you want to continue(y/n):");
scanf("%*c%c",&cont);
printf("__________________________________________________________");
}
}//End function main
答案 0 :(得分:0)
输入没有问题。如果有条件你就错了 它一定是
if(roomType!='D' && roomType!='S' && roomType!='E' && roomType!='C' && roomType!='P')
因为每次你给出一个roomType并不是全部D, S, E, C, P
所以你的if条件每次评估为真。您需要使用&&
而不是||
,这样如果它是其中之一,那么它的计算结果为false。
问题if(roomType!='D' || roomType!='S' || roomType!='E' || roomType!='C' || roomType!='P')
如果我将输入设为D
,
然后roomType!='D'
评估为假,因此它跳转到下一个检查,即
roomType!='S'
所以现在我的roomType为D
而不是S
,因此这个条件适用,它会进入if condition
并退出代码。每次都会发生这种情况,因此这段代码永远不会有效。
只需修改其if condition
答案 1 :(得分:0)
我宁愿假设您可以阅读the fscanf
manual的返回值部分,并将一些调试代码写入:
scanf
返回正确的值,并且...... roomType
,payingMethod
和cont
的内容(提示:他们可能是换行符,当您尝试将它们打印为字符时,在控制台上显示不可见;因此将它们打印为整数)... ...而不是假设您无法阅读该手册并为您解决问题......
除 错误外,循环终止时出现逻辑错误。您的循环将一直运行,直到cond
不等于'n'
或 cond
不等于'N'
;这与cond
集合中['n', 'N']
不包含的语义不同。
cond == 'n'
,cond != 'N'
时,循环继续运行。cond == 'N'
,cond != 'n'
时,循环继续运行。换句话说,你有一个无限循环。您可能意味着while (cond != 'n' && cond != 'N')
或更好,while (!strchr("nN", cond))
...
类似的问题出现在if(roomType!='D' || roomType!='S' || roomType!='E' || roomType!='C' || roomType!='P')
中。您可能打算使用&&
,或者可以使用if (!strchr("DSECP", roomType))
...
答案 2 :(得分:0)
if条件错误而不是使用|| (或)你必须使用&amp;&amp;(和),因为在许多情况下,if条件变得不必要地为真并且返回0执行并且程序在没有输出的情况下结束。 还有用例&#39; d&#39;和案例&#39;除了这个开关外壳是完美的。 让我们的代码干涸 首先,让我们说如果用户输入&#39; S&#39; 所以roomType =&#39; S&#39;现在我们转到if这个值的条件 如果是roomType!=&#39; D&#39;变为真,如||表达式如果任何条件为真,则结果为true,因此如果条件变为true且打印输出无效的房间类型!和程序以return语句结束。