2012-09-09 5 views
0

Le code suivant est écrit pour sélectionner des données d'un fichier et copier dans un autre, mais j'obtiens l'erreur "Types incompatibles dans l'affectation" à la position notifiée.Je n'arrive pas à comprendre Qu'est ce qui cause cette erreur. Je serai heureux de recevoir votre aide.Types incompatibles dans l'affectation C/C++

#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$ %[email protected]", 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; 

}

Ce code a besoin d'un peu de travail pour le moment mais je veux supprimer toutes les erreurs possibles avant de finaliser le code

Cordialement

+0

'car' est un tableau bidimensionnel, donc' car [y] 'est un tableau de char, et vous ne pouvez lui assigner un seul caractère. – DCoder

+0

'scanf ("% d ", id);' devrait également être corrigé. – chris

+0

Le code pourrait avoir besoin de plus de travail que ce que vous pensez. Le faire compiler est la partie facile. Le débogage prendra aussi du temps. –

Répondre

2

voiture [y] est un tableau de chars alors que (char) x [yolo] est juste un char. Vous essayez d'attribuer un caractère à un tableau de caractères.

Si vous souhaitez définir le premier caractère dans car [y] sur la valeur de x [yolo], utilisez simplement car [y] [0] = (char) x [yolo]. Notez que cela ne convertira pas x [yolo] en une représentation char d'un int. Pour obtenir une représentation char * d'un nombre entier, vous devez utiliser itoa. Mais même dans ce cas, une affectation directe ne fonctionnera pas: vous devrez utiliser strcpy.

EDIT: il a été porté à mon attention qu'il est préférable d'utiliser sprintf que itoa.

+0

n'est-ce pas? devenir comme cette voiture [y] = 'a'; –

+0

Cette ligne n'a pas de sens. Les types sont char [20] et char. Vous ne pouvez pas attribuer l'un à l'autre. – Avi

+0

alors quelle peut être la solution à cela. Cuz je ne peux pas utiliser strncpy pour copier une partie spécifique d'un tableau –

0

Le type de car[y] est char[20] (c'est-à-dire un tableau de 20 caractères) et vous essayez d'écrire un seul char à l'intérieur. Ceci est une erreur.

Vous pouvez utiliser les fonctions de chaîne comme snprintf ou strncpy (peut-être avec un peu d'arithmétique de pointeur)

Vous devez activer tous les avertissements et informations debuggging sur votre compilateur (utilisez gcc -Wall -Wextra -g pour compiler sous Linux), et apprendre à utiliser le débogueur (ie gdb sous Linux)

+0

Dans ce cas, je ne pense pas que je peux utiliser strncpy parce que j'essaie de copier une partie spécifique des données dans un autre tableau qui ne peut pas être fait avec strncpy –

+0

Vous pouvez utiliser 'strncpy' (ou' memcpy') avec un pointeur arithmétique, qui va copier une partie d'un tableau –