#include <string.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct bank
{
char an;
char name;
char type;
int bal;
};
int main()
{
int i=0,n;
printf("Enter the number of accountsn");
scanf("%d",&n);
struct bank a[n];
printf("Enter the details of the usersn");
for(i=0;i<n;i++)
{
scanf("%s%s%s%d",a[i].an,a[i].name,a[i].type,&a[i].bal);
}
printf("The details of the users aren");
for(i=0;i<n;i++)
{printf("%sn%sn%sn%dnn",a[i].an,a[i].name,a[i].type,a[i].bal);}
char atype[10];
printf("Enter the type of account you want to searchn");
scanf("%s",atype);
char typ[10];
char s[]="savings";
char c[]="current";
int result,res1,res2;
result = strcmp(atype,s);
if(result == 0)
{
for(i=0;i<n;i++)
{
typ[10] = a[i].type;
res1 = strcmp(typ,s);
if(res1 == 0)
{
printf("%sn%sn%sn%dnn",
a[i].an,a[i].name,a[i].type,a[i].bal);
}
printf("n");
}
} else
{
for(i=0;i<n;i++)
{
typ[10] = a[i].type;
res2 = strcmp(typ,c);
if(res2 == 0)
{
printf("%sn%sn%sn%dnn",
a[i].an,a[i].name,a[i].type,a[i].bal);
}
printf("n");
}
}
}
所以基本上 ik 是我的功课,但我做了每一件事,但我仍然无法解决分段错误。 我认为这与 strcmp(( 函数有关,但哦,好吧 我检查了所有来源,但实际上找不到任何修复程序。 任何帮助将不胜感激。
对于初学者:
这
typ[10] = ...
访问typ
超过其有效内存。这调用了未定义的行为,因此从此任何事情都可能发生。
在 C 中,数组索引是从 0 开始的。因此,对于char[10]
,允许的最高指数将是 9。访问第一个元素将使用 0 完成。
你在这里犯了2个错误。
首先,您的结构银行声明是错误的。您忘了将name
an
和type
声明为字符串。您将其声明为仅字符(字符(。它应该是这样的:-
struct bank
{
char an[100]; // assuming 100 is max size of input strings
char name[100];
char type[100];
int bal;
};
其次你不能做typ[10] = a[i].type;
你应该使用strcpy()
这样的东西:-
strcpy(typ,a[i].type);
所以这个更正后的代码将起作用:-
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
struct bank // change made 1
{
char an[100];
char name[100];
char type[100];
int bal;
};
int main()
{
int i = 0, n;
printf("Enter the number of accountsn");
scanf("%d", &n);
struct bank a[n];
printf("Enter the details of the usersn");
for (i = 0; i < n; i++)
{
scanf("%s%s%s%d", a[i].an, a[i].name, a[i].type, &a[i].bal);
}
printf("The details of the users aren");
for (i = 0; i < n; i++)
{
printf("%sn%sn%sn%dnn", a[i].an, a[i].name, a[i].type, a[i].bal);
}
char atype[10];
printf("Enter the type of account you want to searchn");
scanf("%s", atype);
char typ[10];
char s[] = "savings";
char c[] = "current";
int result, res1, res2;
result = strcmp(atype, s);
if (result == 0)
{
for (i = 0; i < n; i++)
{
strcpy(typ,a[i].type); // change made 2
res1 = strcmp(typ, s);
if (res1 == 0)
{
printf("%sn%sn%sn%dnn",
a[i].an, a[i].name, a[i].type, a[i].bal);
}
printf("n");
}
}
else
{
for (i = 0; i < n; i++)
{
strcpy(typ,a[i].type); // change made 3
res2 = strcmp(typ, c);
if (res2 == 0)
{
printf("%sn%sn%sn%dnn",
a[i].an, a[i].name, a[i].type, a[i].bal);
}
printf("n");
}
}
}
所以你的错误不在于strcmp()