#include<stdio.h>
main()
{
int x,y,z;
z=x*y;
10<x<20,y<10;
x=rand()%20;
y=rand()%10;
printf("%2d",x);
printf("%2d",y);
printf("enter value of z");
scanf("%d",z);
if(z=x*y)
{
printf("correct");
}
else
printf("wrong no. entered");
}
我收到分段错误错误,请帮忙。
分段错误是因为您使用scanf()
值而不是指向它的指针调用z
。
当scanf()
遇到"%d"
说明符时,它需要一个指向int
的指针来存储结果值,你传递了一个int
而一个甚至没有初始化的指针,所以scanf()
将取消引用一个不指向有效内存的指针,从而导致一个SEGMENTATION故障。
但这不是你的代码唯一的问题,实际上这些小代码有很多:
main()
的签名必须是以下之一
int main(void)
int main(int argc, char **argv)
或等效的int main(int argc, char *argv[])
x
和y
,这是未定义的行为。10 < x < 20 , y < 10;
绝对没有。rand()
原型所需的stdlib.h。scanf()
所做的事情。if (z = x * y)
将简单地分配给x * y
到z
,除非x
或y
为0(零)评估为真。
c中的比较运算符是==
。您的代码看起来应该更像以下内容
#include <stdlib.h>
#include <stdio.h>
int
main(void)
{
int x, y, z;
x = rand() % 20;
y = rand() % 10;
printf("%2d", x);
printf("%2d", y);
printf("enter value of z ");
if (scanf("%d", &z) == 1) {
if (z == x * y) {
printf("correct\n");
} else {
printf("error\n");
}
}
return 0;
}