由于 %,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 //
我正在 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 或使用三元运算符,在括号中表示运算符优先级:(
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 //