将数据输入结构时出现分段错误[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数据输入结构时出现分段错误[重复]相关的知识,希望对你有一定的参考价值。

我的作业是使用C语言:1。定义一个结构bankAccount包括三个变量:id,name,balance。 2.五个用户由stdin创建,用户的初始余额由他自己设置。 3.Write存取款功能,允许用户存取款。 4. struct,enum,function(struct paramters),pass-by-reference将是你在编码期间的选择问题是编译器一遍又一遍地显示分段错误,任何解决方案?

#include<stdio.h>
#include<stdlib.h>


typedef struct  bankAccount{    
    int id;
    char name[30];
    long int balance;
}users;

int main(){
    users user[5];
    int number = 1;
    int cases = 0;
    int j = 0;
    int amount = 0;
    for (int i = 0; i < 5; i++)
    {
        printf("Please enter user%d's id, name, balance
", number++);
        scanf("%d %s %d", user[number].id, user[number].name, user[number].balance);

    }

    printf("There are five users in our bank
");
    printf("ID User_name balance
");
    for (int i = 0; i < 5; i++)
        {printf("%d %s %d
", user[i].id, user[i].name, user[i].balance);
        }
    do{printf("Enter request(0=exit):
1--to deposit
2--to withdraw
3--show users in our bank
");
    scanf("%d", &cases);
    switch(cases){
        case 1:
            printf("Enter the user's id and the amount you want to deposit.
");
            scanf("%d %d", j, amount);
            user[j].balance += amount;
            break;
        case 2:
            printf("Enter the user's id and the amount you want to withdraw.
");
            scanf("%d %d", j, amount);
            user[j].balance -= amount;
            break;
        case 3:
            printf("There are five users in our bank
");
            printf("ID User_name balance
");
            for (int i = 0; i < 5; i++)
                {printf("%d %s %d
", user[i].id, user[i].name, user[i].balance);
                }
            break;

    }}while(j!=0);
    return 0;
}
答案

scanf想要一个指针作为目标,改变

scanf("%d %s %d", user[number].id, user[number].name, user[number].balance);

scanf("%d %s %d", &user[number].id, user[number].name, &user[number].balance);

同样在这里:

scanf("%d %d", j, amount);

应该

scanf("%d %d", &j, &amount);

此外,最好使用长度说明符以防止在扫描字符串时出现缓冲区溢出:

scanf("%d %29s %d", ...而不是scanf("%d %s %d", ...

最后,您使用number作为索引来编写数组边界之外的内容

int number = 1;
...
for (int i = 0; i < 5; i++)
{
    printf("Please enter user%d's id, name, balance
", number++);
    scanf("%d %s %d", user[number].id, ...
}

应该

int number = 0;
...
for (int i = 0; i < 5; i++)
{
    printf("Please enter user%d's id, name, balance
", number);
    scanf("%d %s %d", &user[number].id, ...
    number++;
}

或使用i作为索引。

以上是关于将数据输入结构时出现分段错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

访问填充了从管道读取的数据的结构时出现分段错误

分配时出现分段错误[重复]

为啥在访问二级指针时出现分段错误错误? C语言

返回指针时出现分段错误[重复]

删除模板数组时出现分段错误[重复]

使用 ctypes 时出现分段错误