C中的放坡点

C中的放坡点,c,C,这是我的代码,一切正常,但当我输入字母表而不是数字时,它显示A-。 我只是想知道为什么会这样。为什么它只显示了一个-。有人能解释为什么会这样吗 #include<stdio.h> int main(){ int num; printf("Enter Your number "); scanf("%d" ,& num); if(num>79) { printf("Congratulation you got A+"); } else if(num&

这是我的代码,一切正常,但当我输入字母表而不是数字时,它显示A-。 我只是想知道为什么会这样。为什么它只显示了一个-。有人能解释为什么会这样吗

#include<stdio.h>
int main(){
int num;
printf("Enter Your number ");
scanf("%d" ,& num);
    if(num>79)
    {
   printf("Congratulation you got A+");
}

else if(num>69)
{
printf("Congratulation you got A ");
}
else if(num>59)
{
printf("Congratulation you got A-");
}
else if(num>49)
    {
    printf("Congratulation you got B");
}
else if(num>39)
{
    printf("Congratulation you got C");
}

else if(num>32)
    {
    printf("Congratulation you got D");
}
else
{
    printf("You are a student like me(Shuvo) \nBetter Luck next time");

}
return 0 ;
}
#包括
int main(){
int-num;
printf(“输入您的号码”);
scanf(“%d”和&num);
如果(数值>79)
{
printf(“祝贺你得了A+”;
}
否则,如果(数值>69)
{
printf(“祝贺你得了A”);
}
否则,如果(数值>59)
{
printf(“祝贺你得了A-”;
}
如果(数量>49),则为else
{
printf(“祝贺你得了B”);
}
如果(数量>39),则为else
{
printf(“祝贺您获得C”);
}
如果(数量>32),则为else
{
printf(“祝贺你获得D”);
}
其他的
{
printf(“你是像我一样的学生(Shuvo)\n祝你下次好运”);
}
返回0;
}

在使用变量num之前将其初始化为。我的意思是将行“int num;”替换为“int num=0;”。这是我的解决办法

 #include <stdio.h>

int main(){
    int num = 0;
    printf("Enter Your number ");
    scanf("%d", &num);
    if (num > 79)
    {
        printf("Congratulation you got A+");
    }

    else if (num > 69)
    {
        printf("Congratulation you got A ");
    }
    else if (num > 59)
    {
        printf("Congratulation you got A-");
    }
    else if (num > 49)
    {
        printf("Congratulation you got B");
    }
    else if (num > 39)
    {
        printf("Congratulation you got C");
    }

    else if (num > 32)
    {
        printf("Congratulation you got D");
    }
    else
    {
        printf("You are a student like me(Shuvo) \nBetter Luck next time");

    }
    return 0;
}
#包括
int main(){
int num=0;
printf(“输入您的号码”);
scanf(“%d”和&num);
如果(数值>79)
{
printf(“祝贺你得了A+”;
}
否则,如果(数值>69)
{
printf(“祝贺你得了A”);
}
否则,如果(数值>59)
{
printf(“祝贺你得了A-”;
}
如果(数量>49),则为else
{
printf(“祝贺你得了B”);
}
如果(数量>39),则为else
{
printf(“祝贺您获得C”);
}
如果(数量>32),则为else
{
printf(“祝贺你获得D”);
}
其他的
{
printf(“你是像我一样的学生(Shuvo)\n祝你下次好运”);
}
返回0;
}

如果数据与格式说明符不匹配,scanf将丢弃输入流中的任何输入

代码中的scanf说明符为%d,丢弃除整数以外的任何字符。要检查scanf()读取的字符数,最好打印scanf()返回数据


整数计数=扫描频率(…)

那么,预期的输入是任意整数,输出是分数注释信息。如果您的输入像字符一样意外,那么您会得到意外的结果,对吗

scanf("%d" ,& num);
scanf中的占位符%d需要整数输入,因此如果您为其提供字符,则它将不会读取任何整数值

要解决此问题,可以添加错误检查语句:

#include<stdio.h>
#include<stdlib.h> /*for exit*/
int main(){
    int num;
    printf("Enter Your number ");

    if(scanf("%d" ,& num) <= 0)
    {
        printf("Bad input!\n");
        exit(1);
    }
    if(num>79)
    {
        printf("Congratulation you got A+");
    }
    else if(num>69)
    {    
        printf("Congratulation you got A ");
    }
    else if(num>59)
    {
        printf("Congratulation you got A-");
    }
    else if(num>49)
    {
        printf("Congratulation you got B");
    }
    else if(num>39)
    {
        printf("Congratulation you got C");
    }
    else if(num>32)
    {
        printf("Congratulation you got D");
    }
    else
    {
        printf("You are a student like me(Shuvo) \nBetter Luck next time");
    }
    return 0 ;
}
#包括
#包括/*用于退出*/
int main(){
int-num;
printf(“输入您的号码”);
if(scanf(“%d”,&num)79)
{
printf(“祝贺你得了A+”;
}
否则,如果(数值>69)
{    
printf(“祝贺你得了A”);
}
否则,如果(数值>59)
{
printf(“祝贺你得了A-”;
}
如果(数量>49),则为else
{
printf(“祝贺你得了B”);
}
如果(数量>39),则为else
{
printf(“祝贺您获得C”);
}
如果(数量>32),则为else
{
printf(“祝贺你获得D”);
}
其他的
{
printf(“你是像我一样的学生(Shuvo)\n祝你下次好运”);
}
返回0;
}
#包括
#包括
#包括
int main(){
char-str[100],ch;
国际一级,等级[5];
浮动信用[5],gpa=0.0,总信用=0.0;
/*从用户处获取字母等级和学分*/
printf(“每个科目的字母等级和学分:\n”);
对于(i=0;i<5;i++){
printf(“科目%d(学分):”,i+1);
ch=getchar();
等级[i]=ch;
scanf(“%f”、&credit[i]);
getchar();
}
/*打印输入的分数和学分*/
printf(“\n对象|等级|信用\n”);
对于(i=0;i<5;i++){
printf(“%d |%c |%.0f\n”,i+1,等级[i],学分[i]);
}
/*计算gpa值*/
对于(i=0;i<5;i++){
开关(等级[i]){
案例S:
平均成绩=平均成绩+10*学分[i];
总信用=总信用+信用[i];
打破
案例“A”:
gpa=gpa+9*学分[i];
总信用=总信用+信用[i];
打破
案例“B”:
平均成绩=平均成绩+8*学分[i];
总信用=总信用+信用[i];
打破
案例“C”:
平均成绩=平均成绩+7*学分[i];
总信用=总信用+信用[i];
打破
案例“D”:
平均成绩=平均成绩+6*学分[i];
总信用=总信用+信用[i];
打破
案例“E”:
平均成绩=平均成绩+5*学分[i];
总信用=总信用+信用[i];
打破
违约:
printf(“给出的分数错误!!\n”);
出口(0);
}
}
printf(“GPA:%f\t信用证:%f\n”,GPA,totCredit);
gpa=gpa/总积分;
printf(“你成绩的平均成绩:%.2f\n”,平均成绩);
返回0;
}
#包括
内部主(空){
int-num;
printf(“输入您的标记”);
scanf(“%d”和&num);
printf(“您输入了%d”,num);//打印输出
如果(数值>=80){
printf(“你得了分数”);//打印输出
}
else if(num>=60){//注意else与if之间的空格
printf(“你得了B级”);
}
如果(数值>=40),则为else{
printf(“你得了C级”);
}
否则如果(数值<40){
printf(“你这次考试不及格”);
}
返回0;
}

未定义的行为?
%d
格式说明符需要一个数字输入。当它发现一个字母字符时停止扫描,该字符保留在输入缓冲区中。您没有初始化
int num;
,因此任何事情都可能发生。只有前导空格被丢弃,任何其他非数字字符都会被丢弃
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
      char str[100], ch;
      int i, grade[5];
      float credit[5], gpa = 0.0, totCredit = 0.0;

      /* get the letter grade and credits from the user */
      printf("Letter Grade and Credits for each subject:\n");
      for (i = 0; i < 5; i++) {
              printf("Subject %d(Grade|Credit):", i + 1);
              ch = getchar();
              grade[i] = ch;
              scanf("%f", &credit[i]);
              getchar();
      }

      /* print the input grades and credits */
      printf("\nSubject | Grade | Credit\n");
      for (i = 0; i < 5; i++) {
              printf("   %d    |  %c    | %.0f\n", i + 1, grade[i], credit[i]);
      }

      /* calculate gpa value */
      for (i = 0; i < 5; i++) {
              switch (grade[i]) {
                      case 'S':
                              gpa = gpa + 10 * credit[i];
                              totCredit = totCredit + credit[i];
                              break;
                      case 'A':
                              gpa = gpa + 9 * credit[i];
                              totCredit = totCredit + credit[i];
                              break;

                      case 'B':
                              gpa = gpa + 8 * credit[i];
                              totCredit = totCredit + credit[i];
                              break;

                      case 'C':
                              gpa = gpa + 7 * credit[i];
                              totCredit = totCredit + credit[i];
                              break;

                      case 'D':
                              gpa = gpa + 6 * credit[i];
                              totCredit = totCredit + credit[i];
                              break;

                      case 'E':
                              gpa = gpa + 5 * credit[i];
                              totCredit = totCredit + credit[i];
                              break;

                      default:
                              printf("Given Wrong grade!!\n");
                              exit(0);

              }
      }
      printf("GPA: %f\tcredit: %f\n", gpa, totCredit);
      gpa = gpa / totCredit;
      printf("GPA for your score: %.2f\n", gpa);
      return 0;
}
#include <stdio.h>
int main(void){
  int num;
  printf("Enter your mark ");
  scanf("%d",&num);
  printf(" You entered %d", num); // printing outputs

  if(num >= 80){
    printf(" You got A grade"); // printing outputs
  }
  else if ( num >=60){ // Note the space between else & if
    printf(" You got B grade");
  }
  else if ( num >=40){
    printf(" You got C grade");
  }

  else if ( num < 40){
    printf(" You Failed in this exam");
  }
  return 0;
}