Ragazzi salve, riesumo questo vecchio post perché ho un problema simile, stavolta col C, non C++.
Devo creare un programma che:
1) Se lanciato con 2 o più argomenti nella riga di comando stampi un messaggio di errore;
2) Se lanciato con 1 solo argomento conti l'occorrenze delle lettere della stringa passata come argomento;
3) Se lanciato senza argomenti conta il numero di occorrenze del testo contenuto nel file "text.txt".
I punti 1) e 2) funzionano perfettamente, ma quando al punto 3) il programma mi restituisce un cursore, come se volesse qualcosa in input, ma all'infinito.
Qualcuno può farmi capire dove sbaglio? grazie a tutti!
Ecco il codice:
#include <stdio.h>
#include <string.h>
#define A_Z 26
void occorrenze (char a[]) {
int i, j, conta[A_Z];
for(i=0; i<strlen(a); i++){
conta[i]=1;
for(j=i+1; j<strlen(a); j++)
if(a[i] == a[j])
conta[i]++;
}
for(i=0; i<strlen(a); i++){
for(j=i+1; j<strlen(a); j++)
if(a[i] == a[j])
conta[j]=0;
}
for(i=0; i<strlen(a); i++)
{
if(conta[i])
printf("%c = %d\n", a[i], conta[i]);
}
}
int main(char argc, char *argv[]){
char str[50];
FILE *fp = fopen ("text.txt", "r"); //il file text.txt contiene 42 caratteri in tutto
if (argc > 2){
printf("Errore\n");
}
else if (argc == 2) {
occorrenze (argv[1]);
}
if (argc == 1) {
fgets(str, sizeof(str), fp);
occorrenze(str);
}
fclose(fp);
}