gpt4 book ai didi

结构错误格式的 C 编程指针

转载 作者:行者123 更新时间:2023-11-30 19:06:09 24 4
gpt4 key购买 nike

关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

4年前关闭。




Improve this question




我是编程新手,刚刚学习了 C 语言中的指针。我尝试编译我的代码并出现以下错误。

格式 %s 需要 char* 类型的参数,但参数 2 的类型为 int。

printf("%s",S[i]->name[i]);

此错误出现在下面代码的情况 3 下。

如果有人可以帮助我,将不胜感激。
#include <stdio.h>
struct student{
char name[100];
int stdno[100];
float mark[100];
};

int main() {
struct student *S[100];
int NoS,NoC,choice,i,j,stdno;

printf("enter the total number of students \n");
scanf("%d",&NoS);
printf("Enter no of courses\n");
scanf("%d",&NoC);

while(1)
{
printf("1.introduce new student\n");
printf("2.introduce new mark\n");
printf("3.print report of all students\n");
printf("4.exit\n");
scanf("%d",&choice);

switch(choice)
{
case 1:
for(i=0;i<NoS;i++)
{
printf("student no: ");
scanf("%d",&S[i]->stdno[i]);
printf("student name: ");
scanf("%s",&S[i]->name[i]);
}
break;

case 2:
for(j=0;j<NoC;j++)
{
printf("enter the marks of course_%d for all students: ",j);
for(i=0;i<NoS;i++)
{
scanf("%f",&S[i]->mark[j]);
}
}
break;


case 3:
printf("Student No\tName\t");
printf("\n");
for(i=0;i<NoS;i++)
{
printf("%d\t\t",S[i]->stdno[i]);
printf("%s",S[i]->name[i]);
for(j=0;j<NoC;j++)
{
printf("\t\t%f",S[i]->mark[j]);
}
printf("\n");
}
printf("\n");
break;

case 4:
return 0;

break;
}
}
}

最佳答案

S[i]->name[i] name是一个字符数组,所以 name[i]是一个字符。

当作为参数插入堆栈时,char 会转换为 int,因此编译器会提示“但参数 2 的类型为 int”。

使用:S[i]->name
请注意代码中的一个重要错误:

struct student *S[100];

这是一个包含 100 个指向学生的指针的数组。 但是没有为学生分配存储空间 !

在阅读每个学生时,您应该分配一个学生,例如
    S[i]= malloc(sizeof(struct student));

情况1:
    scanf("%s",&S[i]->name[i]);

这里也是 name是一个 char 数组,所以不要索引并删除第一个 &因为编译器已经传递了 char 数组的地址。你应该使用:
    scanf("%s",S[i]->name);

情况 3:
    printf("%s",S[i]->name[i]);

应该
    printf("%s",S[i]->name);

关于结构错误格式的 C 编程指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48502800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com