初莫M 发表于 2023-10-2 15:49:17

代码为什么没有输出啊

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

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

输出格式:
在一行中按标准格式 年年年年-月月 将输入的信息整理输出。
#include<stdio.h>
int length(int x)
{
        int ss=0;
        while(x>0)
        {
                x=x/10;
                ss++;
        }
        return ss;
}
int main()
{
        int n;
        scanf("%d",n);
        if(length(n)==6) printf("%02d-%02d",n/100,n%100);
        if(length(n)==4)
        {
                int a;
                a=n/100;
                if(a>=22) printf("19%02d-%02d",a,n%100);
                if(a<22) printf("20%02d-%02d",a,n%100);
       }
}

isdkz 发表于 2023-10-2 15:49:29

代码没有输出的原因是在主函数中 scanf 函数的参数应该是一个指针,而不是一个变量。应该将 scanf("%d",n) 改为 scanf("%d",&n)。

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

#include<stdio.h>
int length(int x)
{
    int ss=0;
    while(x>0)
    {
      x=x/10;
      ss++;
    }
    return ss;
}
int main()
{
    int n;
    scanf("%d",&n);
    if(length(n)==6) printf("%d-%02d",n/100,n%100);
    if(length(n)==4)
    {
      int a;
      a=n/100;
      if(a>=22) printf("19%02d-%02d",a,n%100);
      if(a<22) printf("20%02d-%02d",a,n%100);
    }
}

陶远航 发表于 2023-10-2 15:49:31

在代码中,scanf 函数的参数应该是一个指针,而不是一个整数。换句话说,你应该使用 &n 来将输入的整数保存到变量 n 中。

修改后的代码如下:

#include <stdio.h>

int length(int x) {
    int ss = 0;
    while (x > 0) {
      x = x / 10;
      ss++;
    }
    return ss;
}

int main() {
    int n;
    scanf("%d", &n);
    if (length(n) == 6)
      printf("%02d-%02d", n / 100, n % 100);
    if (length(n) == 4) {
      int a;
      a = n / 100;
      if (a >= 22)
            printf("19%02d-%02d", a, n % 100);
      if (a < 22)
            printf("20%02d-%02d", a, n % 100);
    }
    return 0;
}


这个程序可以正常地编译和运行,并且根据输入输出了正确的结果。
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 代码为什么没有输出啊