鱼C论坛

 找回密码
 立即注册
查看: 1488|回复: 2

[已解决]代码为什么没有输出啊

[复制链接]
发表于 2023-10-2 15:49:17 | 显示全部楼层 |阅读模式

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

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

x
题目是
小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的出生年月都整理成 年年年年-月月 格式。对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。

输入格式:
输入在一行中给出一个出生年月,为一个 6 位或者 4 位数,题目保证是 1000 年 1 月到 2021 年 12 月之间的合法年月。

输出格式:
在一行中按标准格式 年年年年-月月 将输入的信息整理输出。
  1. #include<stdio.h>
  2. int length(int x)
  3. {
  4.         int ss=0;
  5.         while(x>0)
  6.         {
  7.                 x=x/10;
  8.                 ss++;
  9.         }
  10.         return ss;
  11. }
  12. int main()
  13. {
  14.         int n;
  15.         scanf("%d",n);
  16.         if(length(n)==6) printf("%02d-%02d",n/100,n%100);
  17.         if(length(n)==4)
  18.         {
  19.                 int a;
  20.                 a=n/100;
  21.                 if(a>=22) printf("19%02d-%02d",a,n%100);
  22.                 if(a<22) printf("20%02d-%02d",a,n%100);
  23.          }
  24. }
复制代码
最佳答案
2023-10-2 15:49:31
在代码中,scanf 函数的参数应该是一个指针,而不是一个整数。换句话说,你应该使用 &n 来将输入的整数保存到变量 n 中。

修改后的代码如下:

  1. #include <stdio.h>

  2. int length(int x) {
  3.     int ss = 0;
  4.     while (x > 0) {
  5.         x = x / 10;
  6.         ss++;
  7.     }
  8.     return ss;
  9. }

  10. int main() {
  11.     int n;
  12.     scanf("%d", &n);
  13.     if (length(n) == 6)
  14.         printf("%02d-%02d", n / 100, n % 100);
  15.     if (length(n) == 4) {
  16.         int a;
  17.         a = n / 100;
  18.         if (a >= 22)
  19.             printf("19%02d-%02d", a, n % 100);
  20.         if (a < 22)
  21.             printf("20%02d-%02d", a, n % 100);
  22.     }
  23.     return 0;
  24. }
复制代码


这个程序可以正常地编译和运行,并且根据输入输出了正确的结果。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-2 15:49:29 | 显示全部楼层
代码没有输出的原因是在主函数中 scanf 函数的参数应该是一个指针,而不是一个变量。应该将 scanf("%d",n) 改为 scanf("%d",&n)。

另外,在输出年份时,应该输出四位数,而不是两位数。可以使用 %04d 格式化输出。修改后的代码如下:

  1. #include<stdio.h>
  2. int length(int x)
  3. {
  4.     int ss=0;
  5.     while(x>0)
  6.     {
  7.         x=x/10;
  8.         ss++;
  9.     }
  10.     return ss;
  11. }
  12. int main()
  13. {
  14.     int n;
  15.     scanf("%d",&n);
  16.     if(length(n)==6) printf("%d-%02d",n/100,n%100);
  17.     if(length(n)==4)
  18.     {
  19.         int a;
  20.         a=n/100;
  21.         if(a>=22) printf("19%02d-%02d",a,n%100);
  22.         if(a<22) printf("20%02d-%02d",a,n%100);
  23.     }
  24. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-2 15:49:31 | 显示全部楼层    本楼为最佳答案   
在代码中,scanf 函数的参数应该是一个指针,而不是一个整数。换句话说,你应该使用 &n 来将输入的整数保存到变量 n 中。

修改后的代码如下:

  1. #include <stdio.h>

  2. int length(int x) {
  3.     int ss = 0;
  4.     while (x > 0) {
  5.         x = x / 10;
  6.         ss++;
  7.     }
  8.     return ss;
  9. }

  10. int main() {
  11.     int n;
  12.     scanf("%d", &n);
  13.     if (length(n) == 6)
  14.         printf("%02d-%02d", n / 100, n % 100);
  15.     if (length(n) == 4) {
  16.         int a;
  17.         a = n / 100;
  18.         if (a >= 22)
  19.             printf("19%02d-%02d", a, n % 100);
  20.         if (a < 22)
  21.             printf("20%02d-%02d", a, n % 100);
  22.     }
  23.     return 0;
  24. }
复制代码


这个程序可以正常地编译和运行,并且根据输入输出了正确的结果。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 09:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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