我在创建乘法表程序时遇到分段错误[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在创建乘法表程序时遇到分段错误[关闭]相关的知识,希望对你有一定的参考价值。
#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
");
} else {
printf("error
");
}
}
return 0;
}
以上是关于我在创建乘法表程序时遇到分段错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章