鱼C论坛

 找回密码
 立即注册
查看: 2239|回复: 3

[已解决]这个代码问题出在哪啊

[复制链接]
发表于 2023-9-30 14:57:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码是
#include<stdio.h>
int main()
{
        int n;
        scanf("%d",&n);
        int day,h,m;
        while(n>0)
        {
                scanf("%d %d:%d",&day,&h,&m);
                if(day==0) printf("%d %02d:%02d\n",day,h,m);
        else{
                if(day%2!=0)
                {
                        h=h/2;
                        if(h%2!=0) m=(m+60)/2;
                        if(h%2==0) m=m/2;
                        printf("%d %02d:%02d\n",day,h,m);
                }
                if(day%2==0)
                {        h=h/2;
                        if(h%2!=0) m=(m+60)/2;
                        if(h%2==0) m=m/2;
                        printf("%d %02d:%02d\n",day-1,h+12,m+30);       
                }
        }
                n--;
        }
}
编译结果显示
a.c: In function ‘main’:
a.c:5:2: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ^~~~~~~~~~~~~~
a.c:9:3: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d:%d",&day,&h,&m);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
为什么啊
最佳答案
2023-9-30 14:57:49
这个代码问题出在两个scanf函数调用时没有检查返回值,导致编译器发出警告。scanf函数返回值为成功读入的参数个数,如果返回值不等于期望的参数个数,说明读入失败。在这个代码中,如果读入失败,可能会导致后面的计算和输出出现错误。因此,应该在scanf函数调用后检查返回值,确保读入成功。可以将代码修改为如下形式:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int n;
  5.     if(scanf("%d",&n) != 1) {
  6.         printf("Failed to read n\n");
  7.         return 1;
  8.     }
  9.     int day,h,m;
  10.     while(n>0)
  11.     {
  12.         if(scanf("%d %d:%d",&day,&h,&m) != 3) {
  13.             printf("Failed to read day, h, m\n");
  14.             return 1;
  15.         }
  16.         if(day==0) printf("%d %02d:%02d\n",day,h,m);
  17.         else{
  18.             if(day%2!=0)
  19.             {
  20.                 h=h/2;
  21.                 if(h%2!=0) m=(m+60)/2;
  22.                 if(h%2==0) m=m/2;
  23.                 printf("%d %02d:%02d\n",day,h,m);
  24.             }
  25.             if(day%2==0)
  26.             {       h=h/2;
  27.                     if(h%2!=0) m=(m+60)/2;
  28.                     if(h%2==0) m=m/2;
  29.                     printf("%d %02d:%02d\n",day-1,h+12,m+30);     
  30.             }
  31.         }
  32.         n--;
  33.     }
  34.     return 0;
  35. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-29 14:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表