【问题标题】:C-Got incompatible types in assignment at if-else if partC-在 if-else if 部分的赋值中有不兼容的类型
【发布时间】:2014-05-03 11:47:58
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

struct not{
int id,hw,mdt,fnl;
char name[20];
char lname[20];
        }rec;


int main(){
FILE *fp1,*fp2;
char a1[3]="A",a2[3]="B",a3[3]="C",a4[3]="D",a5[3]="F";
float numgrade;
char letgrade[3];

我得到了 inf.txt 文件,其中包含 10 个学生的 ID,NAME,LAST NAME,HOMEWORK GRADE,MIDTERMFINAL GRADE

fp1=fopen("inf.txt","r");
fp2=fopen("outf.txt","w");
   while( !feof(fp1)){
fscanf(fp1,"%d %s %s %d %d %d\n",&rec.id,rec.name,rec.lname,&rec.hw,&rec.mdt,&rec.fnl);
numgrade = (0.15)*rec.hw + (0.35)*rec.mdt + (0.5)*rec.fnl;     

我在 if-else if 部分的赋值错误中遇到了不兼容的类型

 if(numgrade>=0 && numgrade <=40) letgrade=strcat(a5,a5);
 else if(numgrade>=41 && numgrade<=45) letgrade=strcat(a4,a4);
 else if(numgrade>=46 && numgrade<=52) letgrade=strcat(a4,a3);
 else if(numgrade>=53 && numgrade<=60) letgrade=strcat(a3,a3);
 else if(numgrade>=61 && numgrade<=69) letgrade=strcat(a3,a2);
 else if(numgrade>=70 && numgrade<=79) letgrade=strcat(a2,a2);
 else if(numgrade>=80 && numgrade<=89) letgrade=strcat(a2,a1);
 else if(numgrade>=90) letgrade=strcat(a1,a1);
fprintf(fp2,"%d %-12s %-12s %3d %3s",rec.id,rec.name,rec.lname,numgrade,letgrade);

}
fclose(fp1);
fclose(fp2);
system("pause");
return 0;
}

我在 SOF 的赋值错误中搜索了不兼容的类型,但找不到对我的代码有用的东西。

【问题讨论】:

  • 您不能分配给数组。
  • 如果你知道strcat,你也应该知道strcpy。无法使用 = 分配字符串(某些初始化情况除外)
  • char letgrade[3] 更改为char * letgrade
  • strcat(a4,a4); 导致未定义的行为。 strcat 的操作数不能重叠。即使您的代码似乎可以工作,您也应该将其替换为定义明确的代码。
  • while(!feof(fp1)) 是错误的。 C 不是帕斯卡。直到 读取后才会检测到 EOF。

标签: c compiler-errors runtime-error incompatibletypeerror


【解决方案1】:

你声明

char letgrade[3];

作为一个数组。在 C 中,不能使用 = 运算符分配数组。可以分配指针,但您需要管理指针指向的内存。

如果您想将两个字符串连接成letgrade,请使用以下代码:

strcpy(letgrade, a5); // Copy the first part
strcat(letgrade, a5); // Append the second part

请注意,为使上述代码正常工作,a5 的长度不得超过1。否则,strcat 会写到letgrade 的末尾。

【讨论】:

  • 它解决了我的错误,现在我应该找到阻止崩溃的方法 :) 谢谢你的帮助!
猜你喜欢
  • 2018-03-13
  • 2013-05-15
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
相关资源
最近更新 更多