gpt4 book ai didi

c - "char"类型的参数与 char* 类型的参数不兼容

转载 作者:行者123 更新时间:2023-11-30 15:51:29 25 4
gpt4 key购买 nike

我不断收到此错误,但不确定如何修复它。我是 C 编程新手,尝试通过书籍/互联网进行搜索,但找不到太多帮助。我正在尝试创建一个程序,该程序将使用循环和结构打印成绩报告

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

struct Grades
{
char Name[20];
char Hrs;
int ID;
char ClassName[20];
char Grade;
char ClassID[6];
};

int main ()
{
struct Grades Transcript[6];
int classCnt = 0;
int vHrs=0;
char vGrade[2];
char vName[20], vCID[6], vClassName[20];

printf("Enter Students Name: ");
fgets(vName, 20, stdin);

do
{ printf("Enter Class ID; ");
fgets(vCID, 6, stdin);
strcpy_s(Transcript[classCnt].ClassID, vCID);
printf("Enter Class Name: ");
fgets(vClassName, 20, stdin);
strcpy_s(Transcript[classCnt].ClassName, vClassName);
printf("Enter Class Hours: ");
scanf("%d", &vHrs);
strcpy(Transcript[classCnt].Hrs, vHrs); //Problem occurs here
printf("Enter Class Grade: ");
scanf("%c", vGrade);
strcpy(Transcript[classCnt].Grade, vGrade); //Problem occurs here
classCnt++;
}while(classCnt<=6);
}

最佳答案

您实际上在这里遇到了很多问题:

首先,strcpy()用于复制字符串,如果您有一个字符并且希望它分配它,您可以简单地使用 = 运算符分配它。 strcpy()当您有要分配的字符数组时,使用该函数。

所以你的第一个问题

strcpy(Transcript[classCnt].Hrs, vHrs);
结构中的

Hrs 只是一个 char 类型,而 vHrs 是一个 int 类型。您可以简单地分配它,例如:

Transcript[classCnt].Hrs = vHrs;

但是,int 可以比 char 容纳更多的数据,这将向您发出有关溢出的警告,您应该听取它(取决于在实现上,char 保存 -128 到 127,而 int 保存 -2,147,483,648 到 2,147,483,647)。确定您真正想要的数据类型,然后将 Hrs 设置为 int 或将 vHrs 设置为 char,然后执行以下操作作业。

第二个问题:

scanf("%c", vGrade);

vGrade 作为字符数组(它由多个字符组成),这意味着您应该使用字符串格式运算符 "%s" 对其进行分配,但是当你创建一个字符串时,你应该让数组足够长以容纳你想要的字符数+1(对于NULL终止符)。

第三个问题:

strcpy(Transcript[classCnt].Grade, vGrade);

Grade 是一个 char,而 vGrade 是一个数组。同样,您必须决定类型,如果您想要一个字符“字符串”,那么您需要将它们都设为数组,如果您只想要一个字符,则更改 vGrade 的类型并使用 = 运算符进行简单的赋值。

关于c - "char"类型的参数与 char* 类型的参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15080270/

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