0

次のコードは、あるファイルから一部のデータを選択して別のファイルにコピーするように記述されていますが、通知された位置で「割り当てに互換性のない型」というエラーが表示されます。このエラーの原因を特定できません。喜んでお手伝いさせていただきます。

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

int main()
{
     FILE *myfile;
     myfile=fopen("write.txt","a");

char *name;
int id,i=0,check,*w,n=0;
if(myfile)
{
  do
  {
    printf("Enter ID and Name of the student\n");
    scanf("%d%s",&id, name);
    fprintf(myfile,"%d$ %s@", id, name);
    printf("Are there any more students [y/n]");
  }while(getch()=='y');
  fclose(myfile);
}
printf("Do you want to shortlist the students [y/n]?");
if(getch()=='y')
{
    myfile=fopen("write.txt","r");
    while(check!=EOF)
    {
        check=getc(myfile);
        i++;
        if(check=='%')
            n++;
    }
    fclose(myfile);

    myfile=fopen("write.txt","r");

    int x[i-1];
    char car[n][20];

    int yolo,y=0,q=0,j,h,temp;

    for(j=0;j<i;j++)
    {
        x[j]=getc(myfile);
        if(x[j]=='$')
        {
            w[q]=x[j-1];
            yolo=temp=j;
            q++;
        }
        else
        if(x[j]=='@')
        {
            yolo++;
            for(h=0;h<j-temp;h++)
                car[y]=(char)x[yolo]; // ERROR
            y++;
        }
    }
    fclose(myfile);
    //char data= new char[i++];
    //fscanf();
    myfile=fopen("shortlisted.txt","a");

    if(myfile)
    {
        printf("Type the ID of the student you want to shortlist:\n");
        scanf("%d",id);
    }
}
else
    printf("The file you specified doesn't exists");
printf("Hello world!\n");
return 0;

}

このコードは現時点では少し作業が必要ですが、コードを完成させる前に考えられるすべてのエラーを削除したいと考えています

よろしく

4

2 に答える 2

2

car[y] は文字の配列ですが、 (char)x[yolo] は単なる文字です。char を char の配列に割り当てようとしています。

car[y] の最初の文字を x[yolo] の値に設定する場合は、単に car[y][0] = (char)x[yolo] を使用します。x[yolo] を int の char 表現に変換しないことに注意してください。整数の char * 表現を取得するには、itoaを使用する必要があります。しかし、それでも直接代入は機能しません: strcpyを使用する必要があります。

編集: itoa よりもsprintfを使用する方が良いことに注意が向けられました。

于 2012-09-09T06:31:00.467 に答える
0

のタイプcar[y] は(つまり、20文字の配列)であり、内部char[20]に1つを書き込もうとします。charこれは正しくありません。

snprintfまたはのような文字列関数を使用することをお勧めしますstrncpy(おそらくいくつかのポインタ演算を使用して)

コンパイラですべての警告とデバッグ情報を有効にし(つまりgcc -Wall -Wextra -g、Linuxでのコンパイルに使用)、デバッガの使用方法を学ぶ必要があります(つまりgdb、Linuxで)

于 2012-09-09T06:31:36.093 に答える