【问题标题】:scanf("%c") skipped after scanf("%d"), so my lecturer told me to change scanf("%d") to scanf("%s"), but now the code doesn't run properly anymorescanf("%c") 在 scanf("%d") 之后跳过,所以我的讲师告诉我将 scanf("%d") 更改为 scanf("%s"),但现在代码无法正常运行了
【发布时间】:2016-10-26 19:03:17
【问题描述】:

我的锻炼需要一些帮助。

Question of exercise

这是我的代码:

 #include <stdio.h>
main()
{
int price,new_price;
char code;

printf("Enter the price:");
scanf("%d",&price);
printf("Enter the pricing code:");
scanf("%s",&code);

if(code == 'A')
{
    new_price=price*0.5;
    printf("New discounted price is $%d.00",new_price);
}

else if(code =='B')

{
    new_price=price*0.6;
    printf("New discounted price is $%d.00",new_price);
}
}

我知道 scanf("%c") 在输入 scanf("%d") 后会被跳过,所以当我向讲师寻求解决方案时,她告诉我将 scanf("%c") 更改为 scanf ("%s")。问题是,我无法获得新的折扣价。该值将显示为 0.00 美元。

这张图总结了我的问题

The value shows up as $0.00 even though the code runs

我尝试使用 switch 并且代码工作得非常好,但我只是想找出一种方法来使此代码工作而不使用 scanf("%c") 格式化程序。任何帮助将不胜感激!提前致谢!

【问题讨论】:

  • 您将输入格式更改为 %s 字符串类型(跳过前导空格),但您没有将变量类型更改为数组,并且您没有测试其中的第一个元素大批。你的老师是“教授”吗?一些国家会产生像五彩纸屑这样的“教授”。
  • stackoverflow.com/questions/16833526 总之,您需要做的就是将"%c" 更改为" %c"
  • “教授”首先应该教你什么。
  • @user3386109 是的,我现在看到了,如果我使用%s,我还需要将变量类型更改为数组!谢谢!
  • @TheRookieCoder 大多数转换("%d""%s""%f" 等)会自动跳过空格(包括换行符)。 "%c" 转换是一个例外,它不会跳过空格。将空格放入转换 " %c" 会导致 scanf 跳过您想要的非空白字符之前的任何空白。

标签: c scanf


【解决方案1】:

您输入“100&lt;enter&gt;A”。您的代码旨在读取一个整数,后跟一个字符。所以它读入“100”,然后是“&lt;enter&gt;”。如果您的代码设置为读取一个整数后跟一个字符,则应该输入“100A&lt;enter&gt;”。

如果您想读取输入行并解析它们,请编写执行此操作的代码。您可以在读取整数后使用这样的函数来读取其后结束的行。然后你就可以读取字符了。

【讨论】:

  • 但是由于练习需要为这两个输入分开printf 语句,所以我真的不适合100A&lt;enter&gt;
  • @BákaVíncentHóng 所以你没有写出你想要的代码。因此,既然您看到了,请更改代码以执行您想要的操作。例如,在读取整数之后但在读取字符之前添加代码以读取&lt;enter&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2014-05-30
  • 2012-10-27
  • 2017-08-19
  • 2021-07-31
  • 1970-01-01
  • 2017-03-16
相关资源
最近更新 更多