c - 为什么我的 scanf 不能正常工作,当我移动它时,它工作正常?
问题描述
我想用 C 语言编写一个简单的计算器,但是当我运行这段代码时,它只会得到我的数字,没有得到我的运算符,并从运行窗口中消失!当我将我的 scanf 运算符移动到另一个 scanf 的顶部时,它工作正常!为什么?!!!!
float num1, num2;
char op;
scanf("%f", &num1);
scanf("%f", &num2);
scanf("%c", &op);
switch(op)
{
case '+':
printf("%f + %f = %f", num1, num2, num1 + num2);
break;
case '-':
printf("%f - %f = %f", num1, num2, num1 - num2);
break;
case '*':
printf("%f * %f = %f", num1, num2, num1 * num2);
break;
case '/':
printf("%f / %f = %f", num1, num2, num1 / num2);
break;
default :
printf("error");
}
return 0;
解决方案
此调用中的格式字符串
scanf("%c", &op);
用于从输入缓冲区读取所有字符,包括空格字符。因此,在您输入最后一个数字后,此调用会读取换行符'\n'
。
而是使用
scanf(" %c", &op);
^^^
这允许跳过输入缓冲区中的空白字符。
推荐阅读
- ajax - Spring Boot Thymeleaf Ajax 调用
- javascript - 刷新令牌拦截器离子时捕获错误
- javascript - 如何仅在需要时将数据加载到 vuex 模块中?异步/等待的问题
- phpunit - 如何使用 PHPUnit 确定代码中没有调试打印语句?
- ruby-on-rails - 更改 CarrieWave 模型的文件名
- c++ - 在 C++ Graphics.h 中绘制圆弧
- c# - PersistKeysToAzureBlobStorage():.Net Framework 4.6/4.x 应用程序是否有等效方法?
- swift - 如何将类作为参数传递给 Swift 中的函数?
- php - Lumen API 选择按聚合分组的数据
- javascript - 当位置服务关闭时,在 iOS 上 navigator.gelocation 仍然为真