Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    1

    C: Perchè questo programma in c si blocca e non va avanti?

    Salve! sono nuova e chiedo venia se commetto qualche errore!
    Comunque fatto sta che per il mio esame di c devo capire esattamente gli errori che commetto, ergo vi posto un programma che ho sviluppato.
    In poche parole, ho due file contenenti informazioni riguardo studenti e esami relativi. devo fare tre query : una che mi stampi uno studente con i suo esami, una che mi aggiunga il voto di un esame, e l'ultima ,che non ho ancora implementato ,che modifica un voto esistente.

    Non capisco perche' il programma mi si blocchi alla console, nonostante la compilazione vada a buon fine. Io uso DEVC++ per programmare.

    Grazie in anticipo
    sterins


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


    typedef struct{
    int matricola;
    char nome;
    char cognome;
    char data;
    } studente;

    typedef struct{
    int matri;
    int tri;
    char modo;
    char materia;
    int voto;
    } libretto;


    void aggiungivoto(char *file);
    void modifcavoto(char *file);
    void cercastampa(char *file, char *file1);

    int main(){


    //cercastampa("C:\\Users\\ester\\Desktop\\studente.t xt","C:\\Users\\ester\\Desktop\\libretto.txt" );
    aggiungivoto("C:\\Users\\ester\\Desktop\\libretto. txt");
    }


    void cercastampa(char *file, char *file1){
    studente stu[50];
    libretto lib[50];
    int i=0,j=0;
    int x;

    FILE *fl;
    FILE *fp;

    fl=fopen("C:\\Users\\ester\\Desktop\\studente.txt" , "r+");
    fp=fopen("C:\\Users\\ester\\Desktop\\libretto.txt" , "r+");
    printf("inserisci la matricola dello studente:\n\n");
    scanf("%d", &x);

    if(fl){
    while (!feof(fl)){

    fscanf(fl,"%d", "%s","%s","%s" ,&stu[i].matricola,&stu[i].nome,&stu[i].cognome,&stu[i].data);

    }
    }
    if(fp){
    while (!feof(fp)){
    fscanf(fp,"%d","%d", "%s","%s","%d", &lib[j].matri,&lib[j].tri,&lib[j].modo,&lib[j].materia,&lib[j].voto);

    }
    }

    int card1= int(sizeof(stu)/sizeof(stu[0]));
    int card2= int(sizeof(lib)/sizeof(lib[0]));

    int trovato =0;
    int k=0;
    for(;k<card1;k++){
    if(x==stu[k].matricola){
    trovato=1;
    printf("lo studente e' presente negli archivi\n\n");
    printf("nome: %s\n\n cognome: %s\n\n matricola: %d ", stu[k].nome, stu[k].cognome, stu[k].matricola);
    }
    }
    if(!trovato){
    printf("non e' presente lo studente\n\n");
    system("pause");
    }
    int z=0;
    int stampa=0;
    if(trovato){

    for(;z<card2;z++){

    if((lib[j].matri)==x){
    stampa=1;
    printf("esame: %d\n\n %s\n\n %s\n\n %d\n\n", lib[i].tri, lib[i].modo, lib[i].materia, lib[i].voto );
    system("pause");
    }

    }
    }
    if(!stampa){
    printf("non abbiamo esami per questo studente\n\n");
    system("pause");
    }





    else
    {
    printf("errore apertura file");
    }
    fclose(fl);
    fclose(fp);
    }



    void aggiungivoto(char *file){

    FILE *fp;
    libretto libri;
    int i,m,v, matr,t;
    char mo, ma;

    fp=fopen("C:\\Users\\ester\\Desktop\\libretto.txt" ,"a+");
    printf("immetti la matricola\n");
    scanf("%d", &m);

    if(fp){
    fscanf(fp,"%d",&matr);
    if(matr==m){
    printf("che trimestre\n");
    scanf("%d", &t);
    printf("scritto o orale?\n");
    scanf("%s", &mo);
    printf("che materia\n");
    scanf("%s", &ma);
    printf("inserisci voto\n");
    scanf("%d", &v);

    fprintf(fp,"%d","%s","%s","%d", t,mo,ma,v);
    system("pause");


    }
    else
    {
    printf("errore");
    system("pause");
    }

    }
    else
    {
    printf("errore");
    system("pause");
    }
    }

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Devi utilizzare i tag CODE, altrimenti il codice è illeggibile; inoltre dovresti descrivere la struttura dei file che usi come database.
    Comunque errori da colpo d'occhio:
    -c'è uno spazio fra . e txt (che poi non è un vero e proprio errore se usi il file in scrittura (cosa che non ho controllato))
    -usi char per delle stringhe: è scorretto e se non sai il perché ti conviene rivedere il libro, troppo complesso.

    P.s. probabilmente non sono questi i problemi che causano il problema che descrivi tu.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Come ti ha accennato Scara95, sicuramente queste

    scanf("%s", &mo);

    scanf("%s", &ma);

    dato che ma e mo sono semplici char, sono errori gravi che possono bloccare il programma ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.