2012-11-12 101 views
1

我想获得变量L的用户输入,但scanf函数不起作用,程序将跳转并打印下一个成本语句并退出,如果我尝试输入任何东西。 我是C新手,希望能在这里得到一些帮助。谢谢。下面的代码:C - scanf没有停止用户输入

#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; 
} 
+1

x是2个字符的数组,但是您将它视为一个二维数组字符。 – John3136

回答

2

有一些问题在这里:

scanf("%s", &x[2]); 

我想你想读一个字符串到变量x。相反,你说的是“将一个字符串读入内存中的两个位置,在x点之前”。在这种情况下,内存将超出界限。你应该这样做,因为你只关心一个字符:

char input; 
scanf("%c", &input); 

switch声明同样打破; x[2]再次出界。改为使用上述代码中的input

正如其他人指出的,使用%.2f不是你想要在L.读取时想要做的。使用%f来代替。通常,在打印出变量时,应该只使用格式说明符来做类似的事情,而不是将它们读入。最终,您不会使用scanf,因为它不是获取输入的特别安全的方式。

最后:好像你对C字符串工作方式的理解似乎是最好的。这是可以理解的,因为对于之前没有在C中工作过的人来说,这是一个相当混乱的主题,特别是对于新手程序员。这里是one explanation;我相信你可以找到更多,如果你看,可能会更好。

+0

问题解决了,谢谢。但现在出现的问题是程序无法计算成本和打印成本= 0.0000 only.Hope可以得到help.thank – tim

+0

请为这个新问题提出一个新的问题,并包括您的更新代码。 –

+0

“最终你将不会使用scanf ......”,你是什么意思的克里斯 – rsjethani

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]) { 
  1. x是2 char其被初始化一个数组,但不是一个空终止字符串。
  2. 您使用scanf("%s", &x[2]),它将字符串读入数组中,该数据不属于数组x的一部分。
  3. 然后您在switch语句中取消x[2] - 再次访问超出限制的数据。
  4. 您不检查scanf()调用以确保它能够扫描结果。
  5. 阅读后,您不会立即打印您读取的内容。
  6. scanf()格式中的.无效;使用"%f"(您可能不想使用"%2f",因为这会限制您最多两位数)。
  7. 你实际上没有说过你为回应'无铅或柴油'问题而输入的内容。
0

scanf("%s", &x[2]); 应该是: scanf("%c", &x[2]);


scanf("%.2f", &L); 应该是: scanf("%2f", &L);

你初始化加仑与 '0.0',那么你的输出将永远是 '0.0'。 希望它有效。