我想获取变量L
的用户输入,但scanf
函数不起作用,程序将跳转并打印下一个成本语句,如果我尝试输入任何内容则退出。
我是C的新手,希望能在这里得到一些帮助。谢谢。代码如下:
#include <stdio.h>
#include <conio.h>
int main()
{
float L = 0; // L is litre
float gallon;
gallon = 3.785 * L;
char x[2] = {'u', 'd'}; // u is unleaded and d is diesel
float cost;
printf("Hello, welcome to PetrolUpHere!!\n");
printf("Would u like unleaded or diesel fuel?");
scanf("%s", &x[2]);
printf("Enter the litre you want to fuel:");
scanf("%.2f", &L); //SCANF NOT WORKING
switch (x[2]) {
case 'u':
cost = 1.98 * gallon;
printf("The cost is :%.2f ", cost);
break;
case 'd':
cost = 1.29*gallon;
printf("The cost is :%.2f ",cost);
break;
}
getch();
return 0;
}
答案 0 :(得分:2)
这里有很多问题:
scanf("%s", &x[2]);
我想你想要在变量x
中读取一个字符串。相反,你说的是“将字符串读入内存2位置x
点”。在这种情况下,内存将超出范围。你应该这样做,因为你只关心一个角色:
char input;
scanf("%c", &input);
你的switch
陈述同样被打破; x[2]
再次出界。请改用上面代码中的input
。
正如其他人所指出的那样,使用%.2f
并不是您在阅读L时想要做的事情。请改用%f
。通常,在打印变量时,你应该只使用格式说明符来做这样的事情,而不是读取它们。最后你不会使用scanf
,因为它不是一种特别安全的输入方式。
最后:看起来你对C字符串如何工作的理解充其量是不稳定的。这是可以理解的,因为对于之前没有使用C语言的人来说,这是一个相当令人困惑的话题,特别是对于新手程序员。这是one explanation;如果你看的话,我相信你可以找到更多,可能更好的。
答案 1 :(得分:2)
这个代码中至少有三个问题(至少):
char x[2] = {'u', 'd'};//u is unleaded and d is diesel
float cost;
printf("Hello, welcome to PetrolUpHere!!\n");
printf("Would u like unleaded or diesel fuel?");
scanf("%s", &x[2]);
printf("Enter the litre you want to fuel:");
scanf("%.2f", &L); //SCANF NOT WORKING
switch (x[2]) {
x
是一个2 char
的数组,它被初始化,但不是以空字符结尾的字符串。scanf("%s", &x[2])
,它正在将字符串读入不属于数组x
的数据中。x[2]
语句中取消引用switch
- 再次访问超出范围的数据。scanf()
来电,以确保能够扫描结果。.
格式的scanf()
无效;使用"%f"
(您可能不想使用"%2f"
,因为这会限制您最多两位数。)答案 2 :(得分:0)
scanf("%s", &x[2]);
应该:
scanf("%c", &x[2]);
scanf("%.2f", &L);
应该:
scanf("%2f", &L);
你用'0.0'初始化加仑,那么你的输出总是'0.0'。 希望它有效。