【问题标题】:Scanf Didn't work [duplicate]Scanf没用[重复]
【发布时间】:2017-09-24 00:53:28
【问题描述】:

在我的代码中,第二个 scanf 不起作用并且无法读取字符。 我该如何解决?

#include <stdio.h>
int main() {
int a, result;
// ***************** Menu *******************
printf("Hello !!! \n The Operations That This Calculator Can Do :");
printf("\n1. Simple Operations");
printf("\n2. Calculate The Biggest Number");
printf("\n3. Taylor expansion");
printf("\n4. Sum Digits Of a Number");
printf("\n5. Found The Prime Numbers Before The Number That You Entered");
printf("\nEnter The Number Of Operation That You Want : ");
scanf_s("%d", &a);
if (a == 1){
    char ch;
    int num1, num2;
    printf("\n Please Enter Your Operation Like That (- 5 3 ) : ");
    scanf_s("%c", &ch);
    if (ch == '-'){ scanf_s("%d", &num1); scanf_s("%d", &num2); result = num1 - num2; printf("\n > %d", result); }
    if (ch == '+'){ scanf_s("%d", &num1); scanf_s("%d", &num2); result = num1 + num2; printf("\n > %d", result); }  }  return 0; }

【问题讨论】:

  • 不,scanf 实际上确实 工作并读取按Enter 发送的换行符。为什么不看ch的内容呢?
  • 试试 scanf_s("%c", &ch, 1);
  • 您使用的编译器没有为scanf_s("%c", &amp;ch); 生成警告?

标签: c char printf character scanf


【解决方案1】:

试试这个:我将 scanf_s() 更改为 scanf 并给 %c 空间,因为 %c 转换说明符不会自动跳过任何前导空格,所以如果输入流中有一个杂散的换行符(来自上一个条目,例如)scanf 调用将立即使用它。

#include <stdio.h>
int main() {
int a, result;
// ***************** Menu *******************
printf("Hello !!! \n The Operations That This Calculator Can Do :");
printf("\n1. Simple Operations");
printf("\n2. Calculate The Biggest Number");
printf("\n3. Taylor expansion");
printf("\n4. Sum Digits Of a Number");
printf("\n5. Found The Prime Numbers Before The Number That You Entered");
printf("\nEnter The Number Of Operation That You Want : ");
scanf("%d", &a);
if (a == 1){
char ch;
int num1, num2;
printf("\n Please Enter Your Operation Like That (- 5 3 ) : ");
scanf(" %c", &ch);
if (ch == '-'){ scanf(" %d", &num1); scanf(" %d", &num2); result = num1 - 
num2; printf("\n > %d", result); }
if (ch == '+'){ scanf(" %d", &num1); scanf(" %d", &num2); result = num1 + 
num2; printf("\n > %d", result); }  }
system("pause"); }

【讨论】:

  • 这个答案也悄悄地将scanf_s() 更改为scanf()。与%c 的关键区别。
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2015-05-21
  • 2013-01-07
  • 2011-05-20
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多