由于 %,printf 中的 c 程序出错

Error in c program in printf because of %

我正在 Visual studio 中编写我的第一个 c 程序,由于格式说明符而出现非常基本的错误。

#include <stdio.h>
int main()
{
    int x,y;
    int area = x*y;
    printf("Enter the value of x  \n");
    scanf("%d", &x);

    printf("Enter the value of y  \n");
    scanf("%d", &y);

    printf("Area of the rectangle is %d\n", area);
    return 0;
}

错误: 输入 x
的值 2个 输入 y
的值 1个 矩形的面积是 -293795784 // 这是错误。我期待输出 2,即 x 和 y 的乘积 不确定为什么它采用值的地址而不是值。

找不到x和y初始化前的区域!

#include <stdio.h>
int main()
{
    int x,y;

    printf("Enter the value of x  \n");
    scanf("%d", &x);

    printf("Enter the value of y  \n");
    scanf("%d", &y);
    //Put this area formula here
    int area = x*y;
    printf("Area of the rectangle is %d\n", area);

    return 0;

}

您还需要检查 scanf 中的 return 值。那就是——检查 scanf 是否实际扫描了一个整数。换句话说:当你想准确读取1个整数时,检查scanf return是否为1。如果不是,则有错误。

这是这样的:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int x,y;

    printf("Enter the value of x  \n");
    if (scanf("%d", &x) != 1)            // Notice this line
    {
        // Wrong input - stop program
        fprintf(stderr,"Input error - input must be a number\n");
        exit(1);
    };

    printf("Enter the value of y  \n");
    if (scanf("%d", &y) != 1)            // Notice this line
    {
        // Wrong input - stop program
        fprintf(stderr,"Input error - input must be a number\n");
        exit(1);
    };
    
    //Put this area formula here
    int area = x*y;
    printf("Area of the rectangle is %d\n", area);

    return 0;

}

我一直在和IDE打架,因为我喜欢spaces和空行但没有行浪费。我站在操作数、操作员的大多数地方。我不喜欢在 if 或 while of call returns 上埋头,要么:

printf("Enter the value of x: ");

while ( 1 != scanf( "%d", &x )){
    fprintf( stderr, "Invalid x input, must be a number!\n" );
}

printf("Enter the value of y: ");

while ( 1 != scanf( "%d", &x )){
    fprintf( stderr, "Invalid y input, must be a number!\n" );
}

这减少了所有人的眼睛疲劳,使错误更容易被发现,提高了成绩和老板的意见,保留了垂直的白色 space。我堆叠了一个衬里但远离所有街区。我总是执行 {} 以防我想添加行,例如调试打印输出。我很少说 'else',更喜欢 exit()、return、break、continue 或使用三元运算符,在括号中表示运算符优先级:( ? )。我尽量对 2 个以上的结果使用 switch,因为它是挂评论的好地方,比如 SQL CASE,没有额外的案例缩进!

int retries = 0, ret ;
char buf[4096];

do {
    switch ( ret = read( fd, buf, sizeof( buf ))){
    case -1: // report error
        perror( "read(fd)" );
        exit( 1 );
    case 0: // nominal EOF; sockets, pipes return 0 for 0 length messages.
        if ( ++retries > 100 ){
            return 0 ; // assume normal EOF behavior for some function
        }

        continue ;
    default: // we read something
        retries = 0 ;
        break;
    }
} while ( ! ret );

// process the read() data

当然,见仁见智! :D

您在输入 x 和 y 之前定义了变量区域,您还应该为区域变量分配一个值,即 x*y。

你做了什么


int x,y;
int area= x*y; // you dont have the value of x and y yet //

所以在那之后,如果你打印 area 的值,它实际上没有任何值。

在得到x和y的值后,你应该如何分配area的值

正确的方法


int x,y;

printf("Enter the value of x  \n");
    scanf("%d", &x);

    printf("Enter the value of y  \n");
    scanf("%d", &y);

int area=x*y; // now you have the value of x & y //