繁体   English   中英

C - scanf没有因用户输入而停止

[英]C - scanf didn't stop for user input

我想获取变量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;
}

这里有很多问题:

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

我想你想要在变量x读取一个字符串。 相反,你说的是“将字符串读入内存2位置,超过x点”。 在这种情况下,内存将超出范围。 你应该这样做,因为你只关心一个角色:

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

您的switch语句同样被破坏; x[2]再次出界。 请改用以上代码中的input

正如其他人所指出的那样,使用%.2f并不是你在L中阅读时想要做的。使用%f代替。 通常,在打印变量时,您应该只使用格式说明符执行此类操作,而不是读取它们。最终您将不会使用scanf ,因为它不是一种特别安全的输入方式。

最后:看起来你对C字符串如何工作的理解充其量是不稳定的。 这是可以理解的,因为对于之前没有使用C语言的人来说,这是一个相当令人困惑的话题,特别是对于新手程序员。 这是一个解释 ; 如果你看的话,我相信你可以找到更多,可能更好的。

这很多代码中存在三个问题(至少):

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. 你还没有真正说出你对“无铅或柴油”问题的回答。

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


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

你用'0.0'初始化加仑,那么你的输出总是'0.0'。 希望它有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM