Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] stampare stringa più corta con n>40

    Ciao ragazzi. mi sono bloccato su un esercizio. Il testo è:
    "Dato un file di testo"ingresso.txt" che contiene in ogni riga un nome e l'età(intero) leggere tutte le righe e stampare in un file di uscita.txt la coppia che contiene il nome di lunghezza minima con età superiore a 40. nota: lunghezza della stringa max 128 caratteri."

    Il file di testo dato è:
    Michele 34
    Carmelo 36
    Anna 35
    Giuseppe 29
    Giancarlo 35
    Luisa 41

    io ho scritto questo codice:
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    
    
    main(){
    	//inizio dichiarazioni
    	FILE* pi;
    	FILE* pu;
    	int i,n,limite;
    	char s[128];
    	char s2[128];
    	int n2=0;
    	char sprec[128];
    	int a,b;
    
    
    	//fine dichiarazioni
    	pi=fopen("ingresso.txt","r");
    	if(pi==NULL){perror("Il file non esiste!"); exit(1);}
    	for(i=0;i<=128;i++){
    		limite=fscanf(pi,"%s%d",&s,&n);
    		if(limite==EOF) break;
    		printf("Coppia letta: %s %d\n",s,n);
    		if(i==0){
    			
    			strcpy(sprec,s);
    		}
    		a=strlen(s);
    		b=strlen(sprec);
    		if(a<b && n>40){
    			strcpy(s2,s);
    			n2=n;
    		}
    		strcpy(sprec,s);
    		
    	}
    
    
    	fclose(pi);
    	printf("La coppia che sara' scritta su file e': %s %d\n",s2,n2);
    		pu=fopen("uscita.txt","w");
    		fprintf(pu,"%s %d",s2,n2);
    		if(pu==NULL){
    			perror("Errore!");
    			exit(1);
    		}
    		else printf("Il file uscita e' stato creato correttamente.\n\nFine Programma.\n");
    		fclose(pu);
    }
    se lo eseguo nel file di uscita mi scrive Luisa 41, com'è giusto che sia. Però se modifico il file di ingresso e lo scrivo cosi:
    Michele 34
    Carmelo 36
    Anna 55
    Giuseppe 29
    Giancarlo 35
    Luisa 41
    ed eseguo il codice scritto, su file mi scrive sempre Luisa 41 ma in teoria dovrebbe scrivere Anna 55 in quanto è il nome piu corto e l'età è maggiore di 40. Perchè non lo fa? qualcuno mi può aiutare? Grazie

  2. #2
    Ragazzi ho riscritto il codice in questo modo
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    
    
    
    
    main(){
        //inizio dichiarazioni
        FILE* pi;
        FILE* pu;
        int i,n,limite;
        char s[128];
        char s2[128];
        int n2=0;
        int lunsprec=128;
        int a,b;
    
    
    
    
        //fine dichiarazioni
        pi=fopen("ingresso.txt","r");
        if(pi==NULL){perror("Il file non esiste!"); exit(1);}
        for(i=0;i<=128;i++){
            limite=fscanf(pi,"%s%d",&s,&n);
            if(limite==EOF) break;
            printf("Coppia letta: %s %d\n",s,n);
            a=strlen(s);
            b=lunsprec;
            if(a<b && n>40){
                strcpy(s2,s);
                n2=n;
            }
            else continue;
            lunsprec=strlen(s);
            
        }
    
    
    
    
        fclose(pi);
        printf("La coppia che sara' scritta su file e': %s %d\n",s2,n2);
            pu=fopen("uscita.txt","w");
            fprintf(pu,"%s %d",s2,n2);
            if(pu==NULL){
                perror("Errore!");
                exit(1);
            }
            else printf("Il file uscita e' stato creato correttamente.\n\nFine Programma.\n");
            fclose(pu);
    }
    e adesso il programma funziona. Grazie lo stesso a tutti.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.