我一直收到这个错误,不确定如何修复它。我是个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);
}发布于 2013-02-26 10:35:58
实际上,您在这里有许多问题:
首先,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的类型,并用=运算符做一个简单的赋值。
发布于 2013-02-26 10:33:17
您在这里遇到的问题是数据输入错误。
结构成员.Hrs的类型为"char"。strcpy的参数是一个"char *"。可以这样想:char是一个8字节的数字,用ASCII码表示一个值。"char *"是指向字符数组(或C语言中的字符串)的指针。
上述情况在传统上是正确的,但今天它也可能是unicode或多字节字符串。在这两种情况下,您需要的都是赋值操作符(=),而不是strcpy。
因此,您告诉strcpy查看单个值(char),而不是它期望的值字符串(char *)作为它的参数。在这种情况下,您可以直接使用scanf复制您扫描的整数的值。
Transcript[classCnt].Hrs = vHrs;和
Transcript[classCnt].Grade = vGrade;如果你正在寻找有史以来写得最好的书,在我看来:-),在C语言上,看看:C编程语言(第二版)-看起来它在亚马逊(或者在你最喜欢的二手书销售商)上可以买到,大约21美元(美元)。
https://stackoverflow.com/questions/15080270
复制相似问题