生姜ZYX 发表于 2021-4-17 14:55:12

求助!!!

本帖最后由 生姜ZYX 于 2021-4-17 15:35 编辑

百分制成绩转换为2分制成绩,如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!
为什么下面的程序输出不了
#include<stdio.h>
   int main()
   {
       int score;
       char grade;
       scanf("%d",&score);
      if (score< 0 ||score > 100|| scanf("%d", &score)!=1)
          printf("Input error!\n");
           else if(score>=60)
               grade='A';
           else
           t='B';
           printf("%c",grade);
}

baige 发表于 2021-4-17 15:13:57

#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int score;
    char grade;
    int flag = scanf("%d",&score);
    if (score< 0 ||score > 100 || flag != 1) printf("Input error!\n");
    else if(score>=60) grade ='A';
    else grade ='B';
    printf("%c",grade);
    return 0;
}

生姜ZYX 发表于 2021-4-17 15:18:05

baige 发表于 2021-4-17 15:13


请问那样写为什么不对呢{:10_254:}{:10_266:}

wp231957 发表于 2021-4-17 15:29:37

生姜ZYX 发表于 2021-4-17 15:18
请问那样写为什么不对呢

你那样写不是要执行俩次scanf与题意不符

肖-肖 发表于 2021-4-17 15:33:31

本帖最后由 肖-肖 于 2021-4-17 15:36 编辑

生姜ZYX 发表于 2021-4-17 15:18
请问那样写为什么不对呢

你把A这个字符给了变量t
但是你没有定义字符型的变量:t
你定义的是字符型的grade
所以用grade接收是可以的
用t接收它是找不到这个变量t的,所以报错
然后你又在if括号内加了scanf所以会让用户输入两次
这不是你想的结果
所以直接用flag接收就能解决了

生姜ZYX 发表于 2021-4-17 15:36:03

肖-肖 发表于 2021-4-17 15:33
你把A这个字符给了变量t
但是你没有定义字符型的变量:t
你定义的是字符型的grade


可是改成grade还是不对啊{:10_243:}

生姜ZYX 发表于 2021-4-17 15:39:03

wp231957 发表于 2021-4-17 15:29
你那样写不是要执行俩次scanf与题意不符

噢噢,懂了,谢谢{:10_323:}

肖-肖 发表于 2021-4-17 15:39:05

生姜ZYX 发表于 2021-4-17 15:36
可是改成grade还是不对啊

然后你又在if括号内加了scanf所以会让用户输入两次
这不是你想的结果
所以直接用flag接收就能解决了
如下:
    int flag = scanf("%d",&score);
    if (score< 0 ||score > 100 || flag != 1) printf("Input error!\n");

生姜ZYX 发表于 2021-4-17 15:39:59

肖-肖 发表于 2021-4-17 15:39
然后你又在if括号内加了scanf所以会让用户输入两次
这不是你想的结果
所以直接用flag接收就能解决了


谢谢,懂了{:10_278:}

肖-肖 发表于 2021-4-17 15:42:27

生姜ZYX 发表于 2021-4-17 15:39
谢谢,懂了

嗯嗯 懂了就行了
页: [1]
查看完整版本: 求助!!!