类型为“的参数”;char";与char类型的参数不兼容*
我一直收到这个错误,不确定如何修复它。我是C编程新手,曾尝试在书/网上搜索,但找不到太多帮助。我正在尝试创建一个程序,使用循环和结构打印成绩报告类型为“的参数”;char";与char类型的参数不兼容*,c,visual-studio-2010,C,Visual Studio 2010,我一直收到这个错误,不确定如何修复它。我是C编程新手,曾尝试在书/网上搜索,但找不到太多帮助。我正在尝试创建一个程序,使用循环和结构打印成绩报告 #include <stdio.h> #include <stdlib.h> #include <string.h> struct Grades { char Name[20]; char Hrs; int ID; char ClassName[20]; char Grade
#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);
}
#包括
#包括
#包括
结构等级
{
字符名[20];
半焦小时;
int-ID;
字符类名称[20];
煤焦品位;
char-ClassID[6];
};
int main()
{
结构等级成绩单[6];
int classCnt=0;
int vHrs=0;
炭级[2];
char vName[20]、vCID[6]、vClassName[20];
printf(“输入学生姓名:”);
fgets(vName,20,stdin);
做
{printf(“输入类ID;”);
fgets(vCID,6,标准输入);
strcpy_s(转录本[classCnt].ClassID,vCID);
printf(“输入类名:”);
fgets(vClassName,20,标准输入);
strcpy_s(成绩单[classCnt].ClassName,vClassName);
printf(“输入课时:”);
扫描频率(“%d”和vHrs);
strcpy(成绩单[classCnt].Hrs,vHrs);//这里出现了问题
printf(“输入等级:”);
scanf(“%c”,vGrade);
strcpy(成绩单[classCnt].Grade,vGrade);//这里出现问题
classCnt++;
}而(classCnt您在这里遇到的是一个数据输入错误
结构成员.Hrs
的类型为“char”
。strcpy
的参数是“char*”
。可以这样想:char
是一个8字节的数字,表示ASCII中的值。char*“
是指向字符数组(或C语言中的字符串)的指针
上述内容在传统上是正确的,但今天它也可能是unicode或多字节字符串。在这两种情况下,您需要的是赋值运算符(=
),而不是strcpy
因此,您告诉strcpy
查看单个值(char
),而不是作为参数的字符串(char*
),在这种情况下,您可以直接复制使用scanf
扫描的整数的值
Transcript[classCnt].Hrs = vHrs;
及
如果您正在寻找有史以来写得最好的关于C语言的书,我认为:-),请查看:
C编程语言(第二版)-看起来它在亚马逊(或你最喜欢的二手书销售商)上可以买到,价格大约为21美元。你在这里确实有很多问题: 首先,用于复制字符串,如果您有一个字符并且希望它分配给您,您只需使用
=
运算符分配它即可。当您有一个要分配的字符数组时,将使用此函数
那么你的第一个问题是什么
strcpy(Transcript[classCnt].Hrs, vHrs);
结构中的Hrs
只是一个char
类型,而vHrs
是一个int
类型。您可以简单地如下分配它:
Transcript[classCnt].Hrs = vHrs;
但是,int
可以比char
保存更多的数据,这会给您一个关于溢出的警告,您应该听它(取决于char
保存的实现-128到127,其中asint
保存)−2147483648到2147483647)。在此处确定您真正需要的数据类型,然后将Hrs
anint
或vHrs
achar
进行赋值
第二个问题:
scanf("%c", vGrade);
strcpy(Transcript[classCnt].Grade, vGrade);
vGrade
作为一个字符数组(它由多个字符组成),这意味着您应该使用字符串格式运算符“%s”
,但是当您执行字符串时,您应该使数组足够长,以满足所需字符数+1(对于空终止符)
第三个问题:
scanf("%c", vGrade);
strcpy(Transcript[classCnt].Grade, vGrade);
Grade
是一个char
而vGrade
是一个数组。同样,如果你想要一个“字符串”,你必须决定类型如果只需要一个字符,那么就需要将它们都设置为数组,然后更改vGrade
的类型,并使用=
运算符进行简单赋值。char
和char*
是两种不同的类型。理解这两种类型之间的差异是在阿宁C。