将数据输入结构时出现分段错误[重复]
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
作为索引。
以上是关于将数据输入结构时出现分段错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章