2010-12-03 10 views
0

je suis nouveau au c .. et ayant encore du mal à la syntaxe, espérons que vous pouvez me aider ... parce que je suis coincé à ce codeconfus par la syntaxe C

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

int main(void){ 
    FILE *stream = NULL; 
    stream = fopen("studentinfo.txt", "a+"); 
    /*some of initialization were used for testing purposes only*/ 

    char arr[5]; 
    char arr2[5]; 
    int i; 
    char name[3]; 
    char course[5]; 

    printf("enter details: "); 
    scanf("%s", arr2); 

    while(!feof(stream)){ 
     fgets(arr, 100, stream);//i am confused if the line capture was stored at arr[0] 
     if(strcmp(arr, arr2)==0){//i want to compare 
      printf("success");//testing 
     } 
     printf("%s", arr);//i wonder does fgets just overwrites the new line to arr[0] 
    } 

    fclose(stream); 

    getch(); 
} 

Merci les gars .. .

+1

Essayez de mettre en forme tout votre code comme du code, cela nous aidera à vous aider. Et posez des questions spécifiques - tout ce que vous nous avez dit, c'est que vous avez toujours des problèmes avec la syntaxe. Ce genre d'invite la réponse «alors lisez l'un des nombreux excellents tutoriels en ligne ou des livres qui expliquent la syntaxe de C». –

+0

Quel est le problème? ce que tu veux qu'il fasse? quelles erreurs obtenez-vous? – Muggen

+0

@ muggen: on m'a demandé de faire un système d'information pour les étudiants ... et j'ai du mal à éditer l'une des lignes ... nous avons pour instruction de demander à l'utilisateur l'identifiant de l'étudiant et de modifier les informations plus tard. Je pense à capturer d 'abord la ligne et ensuite la comparer à l' entrée de l 'utilisateur ... j'espère que vous pouvez m'aider ... thnx à l' avance – iamanapprentice

Répondre

2

si vous avez un fichier existant ... et que votre fichier contient des données. alors vous pouvez vérifier si les données que vous avez tapées sont présentes dans le fichier ou non. Je ne suis pas sûr si c'est ce que tu veux.

exemple, si vous avez saisi ... love et le fichier contient aussi le mot exact ... love (sur une ligne) il imprimera « succès ».

Si les données que vous avez tapées n'existent pas sur le fichier, elles seront ajoutées au fichier (sur la ligne suivante).

int main(void){ 

char arr[5]; 
char arr2[5]; 
int i; 
int n=0; 

FILE *stream = NULL; 
FILE *append = NULL; 
stream = fopen("studentinfo.txt", "rt"); 
append = fopen("studentinfo.txt", "a+"); 

printf("enter details: "); 
scanf("%s", arr2); 

while(!feof(stream)){ 
    fgets(arr, 6, stream); 
    if(strcmp(arr, arr2)==0){ 
     printf("success"); 
    } else n=-1; 
} 
if (n==-1){ 
    fprintf(append, "%s\n", arr2); 
} 
fclose(stream); 
fclose(append); 
system("pause"); 
} 
+0

thnx beaucoup newbie ... domo arigato: D – iamanapprentice

+0

ganbate kudasai – newbie

6
  1. vous ouvrez studentinfo.txt pour annexant, mais la lecture de celui-ci (et vous ne cochez pas la
  2. ouverte a réussi
  3. que vous avez alloué 5 caractères pour arr, mais lire jusqu'à 100 caractères dans cela avec les fgets. Cela débordera et causera la corruption de la mémoire
  4. vous avez alloué 5 caractères pour arr2, mais vous y avez lu un nombre arbitraire de caractères - cela débordera et provoquera une corruption de mémoire
  5. Fgets lit les caractères dans la mémoire à partir de arr. arr [0] est le premier caractère. & arr [0] est la même chose que arr
  6. À quoi sert le getch() à la fin? "
  7. En outre," a + "positionne le flux à la fin du fichier, de sorte que vous ne serez pas en mesure de lire quoi que ce soit.
+0

5.probablement pour arrêter la fin immédiate du programme et le rendre capable de voir le "succès" – Muggen

+0

@Muggen. pas si sûr - il va avaler la nouvelle ligne que l'utilisateur a probablement dû entrer, même si –

+1

'getch' n'est même pas une fonction C standard. –

1
  1. Je ne sais pas pourquoi vous ouvrez le flux avec un + parce que vous jamais vraiment écrire. Peut-être que vous voulez vous assurer que le fichier existe même si 0 longueur? Vous devriez toujours vérifier que l'ouverture a bien réussi. Vous lisez alors 100 caractères dans un tableau de 5 octets seulement, vous obtiendrez ainsi un écrasement de mémoire sérieux si le fichier contient vraiment ce nombre. Le scanf est également dangereux car l'utilisateur peut entrer trop de caractères (ils sont en fait limités à 4 car il y a un terminateur NULL qui est lu). À la fin, vous semblez écrire la dernière ligne de façon aléatoire si l'utilisateur n'a pas entré une ligne correspondante du fichier.

+0

salut cashcow ... j'utilise un + parce que je l'ai lu qu'il était utilisé pour ajouter une ligne .. donc je pensais juste si ... je veux éditer une ligne .. un + est plus approprié que les autres coz il était lu et écrit ... je ne suis pas vraiment sûr de cet espoir que vous pouvez m'aider ... thnx – iamanapprentice