我在创建乘法表程序时遇到分段错误[关闭]

问题描述 投票:-7回答:1
#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");
}

我收到分段错误错误,请帮忙。

c linux segmentation-fault
1个回答
2
投票

分段错误是因为您使用scanf()值而不是指向它的指针调用z

scanf()遇到"%d"说明符时,它需要一个指向int的指针来存储结果值,你传递了一个int而一个甚至没有初始化的指针,所以scanf()将取消引用一个不指向有效内存的指针,从而导致一个SEGMENTATION故障。

但这不是你的代码唯一的问题,实际上这些小代码有很多:

  1. main()的签名必须是以下之一 int main(void) int main(int argc, char **argv)或等效的int main(int argc, char *argv[])
  2. 你的代码格式很糟糕,即使这不是它表现出来的原因,也是一个值得担心的理由。
  3. 您在没有首先初始化它们的情况下使用了xy,这是未定义的行为。
  4. 这个说法 10 < x < 20 , y < 10; 绝对没有。
  5. 您没有包含rand()原型所需的stdlib.h。
  6. 你做了上面用scanf()所做的事情。
  7. if (z = x * y)将简单地分配给x * yz,除非xy为0(零)评估为真。 中的比较运算符是==

您的代码看起来应该更像以下内容

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.