|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 15
|
Problema Esecuzione programma C
Ho fatto questo programma che conta in un array di struct quante volte compaiono le parole in un testo preso da un file.
Il problema è che l'eseguibile (pure dal prompt) non fa niente... carica un po' e basta. Il programma è sviluppato su Dev-C++ e pure in questo ambiente la finestra di esecuzione si apre e dopo un istante si chiude! Help #include <stdio.h> #include <string.h> #define SIZE 20 struct count { char nome[14]; int n; }; typedef struct count lista; int RicercaEsaustiva(lista *,char *); main(){ lista persone[SIZE]; int i; for(i=0; i<=SIZE-1; i++){ strcpy(persone[i].nome,""); persone[i].n=0; } char parola[14]; FILE *fPtr; int resp=0; i=0; if ((fPtr=fopen("testo.h", "r")) == NULL) printf("Non posso aprire il file\n"); else{ while (!feof(fPtr)){ fscanf(fPtr, "%s", parola); if((resp=RicercaEsaustiva(persone, parola)) != -1) persone[resp].n=persone[resp].n + 1; else{ strcpy(persone[i].nome,parola); persone[i++].n=1; <---------------------------------------- } } for(i=0; i<=SIZE-1;i++) printf("%-14s%10d\n", persone[i].nome, persone[i].n); } system("pause"); return 0; } int RicercaEsaustiva(lista *p, char *str){ int u=0; for (u=0; u<=SIZE-1; u++){ if (!strncmp(p[u].nome,str, 14 )) return u; } return -1; } ......................................................................................................... Mi da questo problema (strano ma vero) da quando ho messo i++ nell'else del ciclo del main. Boh!! Ultima modifica di vanhalen : 21-06-2005 alle 20:44. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
code
tags intorno al tuo codice metti [c*de]tuo codice[/c*de] (* = o), altrimenti non si capisce 'na mazza senza indentatura |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 15
|
[c*de]
/* Esame*/ #include <stdlib.h> #include <stdio.h> #include <string.h> #define SIZE 20 struct count { char nome[14]; int n; }; typedef struct count lista; int RicercaEsaustiva(lista *,char *); main(){ lista persone[SIZE]; int i; for(i=0; i<=SIZE-1; i++){ strcpy(persone[i].nome,""); persone[i].n=0; } char parola[14]; FILE *fPtr; int resp=0; i=0; if ((fPtr=fopen("testo.h", "r")) == NULL) printf("Non posso aprire il file\n"); else{ while (!feof(fPtr)){ fscanf(fPtr, "%s", parola); if((resp=RicercaEsaustiva(persone, parola)) != -1) persone[resp].n=persone[resp].n + 1; else{ strcpy(persone[i].nome,parola); persone[i++].n=1; } } for(i=0; i<=SIZE-1;i++) printf("%-14s%10d\n", persone[i].nome, persone[i].n); } system("pause"); return 0; } int RicercaEsaustiva(lista *p, char *str){ int u=0; for (u=0; u<=SIZE-1; u++){ if (!strncmp(p[u].nome,str, 14 )) return u; } return -1; } [/c*de] (* = o) Scusami...... |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 15
|
Niente da fare
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
* = o
asterisco = lettera o sorry sono un po' scrobutico a volte ![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4741
|
hai provato a fare il debug ?
quella che tu vedi aprirsi e chiudersi istantaneamente è la console in cui appare l' errore "non posso aprire il file premere un tasto per continuare..." anche con un testo, non si vede comunque altro perchè non entra nell' ultimo loop che eseguirebbe la stampa, resp è settato a -1 una volta e non cambia più...
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 22-06-2005 alle 13:16. |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
a me funziona.
l'ho provato con Borland c++ code blocks e dev-c++ 4.9.9.2 |
![]() |
![]() |
![]() |
#8 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 15
|
Grazie a tutti...
Ancora non sono riuscito a risolvere ma vorrei ripetere la stranezza che ho scritto nel primo post: Se metto i++ nell'else del ciclo while(!feof(fPtr) il problema c'è. Se invece faccio l'ERRORE di mettere 'i' invece di 'i++' la lista viene stampata con l'errore logico.(cioè la lista è vuota tranne per il primo elemento a cui corrisponde l'ultima parola del testo)(... e il contatore delle parole funziona....) Grazie ancora |
![]() |
![]() |
![]() |
#9 | |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 15
|
Quote:
GRazie ugualmente. Ciao a tutti |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:08.