Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 嗨,我正在写一个程序,显示一年是否是一个飞跃,以及它的数字总和是多少_C - Fatal编程技术网

C 嗨,我正在写一个程序,显示一年是否是一个飞跃,以及它的数字总和是多少

C 嗨,我正在写一个程序,显示一年是否是一个飞跃,以及它的数字总和是多少,c,C,我理解用来判断某件事是否是闰年的代码行,我见过用来确定数字总和的代码行,但我不知道如何将两者结合起来。当我运行它时,我得到一个错误 In function "main": error. "else" without a previous "if" error. "else" without a previous "if" 代码: 代码中有几个问题- 问题1- 如果程序中的语句包含多个语句,但尚未将它们括在{}中 问题2- 您正在修改year变量的值,如果发现年份为闰年,则将其打印。因此,年的值

我理解用来判断某件事是否是闰年的代码行,我见过用来确定数字总和的代码行,但我不知道如何将两者结合起来。当我运行它时,我得到一个错误

In function "main":
error. "else" without a previous "if"
error. "else" without a previous "if"
代码:


代码中有几个问题-

问题1-

如果程序中的语句包含多个语句,但尚未将它们括在{}中

问题2-

您正在修改year变量的值,如果发现年份为闰年,则将其打印。因此,年的值将始终打印为0。 备份可变年份值,然后执行步骤计算总和,并在printf中打印备份值

#include <stdio.h>

int main()
{

    int year,sum=0,r;
    int year_val;

    printf("Enter a year to check if it is a leap year\n");
    scanf("%d", &year);
    year_val = year;

    if ( year%400 == 0) {
            for(;year!=0;year=year/10){
                    r=year%10;
                    sum=sum+r;
            }
            printf("%d is a leap year and the sum is %d.\n", year_val,sum);
    } else if ( year%100 == 0)
            printf("%d is not a leap year.\n", year);
    else if ( year%4 == 0 ) {
            for(;year!=0;year=year/10){
                    r=year%10;
                    sum=sum+r;
            }
            printf("%d is a leap year and the sum is %d.\n", year_val,sum);
    } else
            printf("%d is not a leap year.\n", year);
    return 0;
}

在代码中,对于某些if语句,您不使用带有{}对的块语法。后来插入了一些额外的printf语句,打破了语法

鉴于您的技能水平,最好始终对所有复合语句使用块语法。依我看,即使是高级程序员也不应该对任何东西使用单语句语法,除非是最简单的复合语句(如果有的话)

该年的输出不正确,因为您修改了for循环中的变量。使用另一个变量进行此计算

以下是修改后的代码:

#include <stdio.h>

int main(void) {
    int year, sum = 0, y, r;

    printf("Enter a year to check if it is a leap year\n");
    scanf("%d", &year);
    if (year % 400 == 0) {
        for (y = year; y != 0; y = y / 10) {
            r = y % 10;
            sum = sum + r;
        }
        printf("%d is a leap year and the sum is %d.\n", year, sum);
    } else
    if (year % 100 == 0) {
        printf("%d is not a leap year.\n", year);
    } else
    if (year % 4 == 0) {
        for (y = year; y != 0; y = y / 10) {
            r = year % 10;
            sum = sum + r;
        }
        printf("%d is a leap year and the sum is %d.\n", year, sum);
    } else {
        printf("%d is not a leap year.\n", year);
    }
    return 0;
}
请注意,可以根据公历对闰年进行复合测试来简化代码:

#include <stdio.h>

int main(void) {
    int year, sum, y, r;

    printf("Enter a year to check if it is a leap year\n");
    if (scanf("%d", &year) == 1) {
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            for (sum = 0, y = year; y != 0; y = y / 10) {
                r = y % 10;
                sum = sum + r;
            }
            printf("%d is a leap year and the sum is %d.\n", year, sum);
        } else {
            printf("%d is not a leap year.\n", year);
        }
    } else {
        printf("input error.\n");
    }
    return 0;
}

代码中有很多语法错误。首先,尝试编写干净的代码

以下是您需要更正的错误

a删除第5行多余的分号 b在第8,18行为if语句添加大括号{} c添加一个临时变量来保存年份,这样,如果年份是闰年, 你可以在那里打印temp。因为年份变量随后将减少为0。

我刚刚纠正了上面提到的事情,现在你的代码工作得很有魅力

这是修改后的代码。获取大括号{}的详细信息

#include <stdio.h>
int main()
{
    int year,sum=0,r;

    printf("Enter a year to check if it is a leap year\n");
    scanf("%d", &year);
    int temp = year;
    if ( year%400 == 0){
      for(;year!=0;year=year/10){
        r=year%10;
        sum=sum+r;
        }
    printf("%d is a leap year and the sum is %d.\n", temp,sum);
    }
    else if ( year%100 == 0)
        printf("%d is not a leap year.\n", year);
    else if ( year%4 == 0 ){
        for(;year!=0;year=year/10){
            r=year%10;
            sum=sum+r;
        }
    printf("%d is a leap year and the sum is %d.\n", temp,sum);
    }

    else
        printf("%d is not a leap year.\n", year);  
    return 0;
}

缩进你的代码,也许你会发现不匹配的地方。
#include <stdio.h>
int main()
{
    int year,sum=0,r;

    printf("Enter a year to check if it is a leap year\n");
    scanf("%d", &year);
    int temp = year;
    if ( year%400 == 0){
      for(;year!=0;year=year/10){
        r=year%10;
        sum=sum+r;
        }
    printf("%d is a leap year and the sum is %d.\n", temp,sum);
    }
    else if ( year%100 == 0)
        printf("%d is not a leap year.\n", year);
    else if ( year%4 == 0 ){
        for(;year!=0;year=year/10){
            r=year%10;
            sum=sum+r;
        }
    printf("%d is a leap year and the sum is %d.\n", temp,sum);
    }

    else
        printf("%d is not a leap year.\n", year);  
    return 0;
}