webForumDet fria alternativet

analysera tecken ur en fil

C/C++

4 svar · 567 visningar · startad av Broms

Medlem sedan sep. 2002188 inlägg
Frågan#1

Jag skall läsa in en .txt-fil och analysera denna.
Programmet skall beräkna antal tecken, antal siffror samt antal rader... Antalet tecken pallar den med, men ej siffror samt rader.. var har blitt knas?! *slita håret*

#include <stdio.h>
#include <stdlib.h> //andvänds för system() och exit()
#include <string.h> //används för strlen()
#include <ctype.h>  //används för isdigit()

int main(int argc, char *argv[])
{
    
    char filnamn[128], text[1000];
    char tkn;
    int n, tecken=0, siffror=0, rader=0;

    //deklarerar pekaren minFil av typen FILE
    FILE *minFil ;   

    printf("Ange filnamn ");
    
    //läser in filnamnet
    fgets(filnamn, 128,stdin);

    //avläser längden på filnamnet
    n = strlen(filnamn);

    //byter ut sista tecknet i filnamnet mot \0
    if(n>0)
       filnamn[n-1]='\0';
       
    //kollar om filen verkligen kan öppnas för läsning(r = read)
    if((minFil = fopen(filnamn, "r")) == NULL){
       fputs("\n Kan ej \x94ppna filen.. \n\n\n Programmet avslutas..\n", stderr);
       exit(99);
    }

    //läser tecken för tecken fram tills End Of File uppnåtts
    while(tkn = fgetc(minFil) != EOF){
       if (isdigit(tkn)) siffror++; 
       if (tkn == '\n') rader++;
       tecken++;
    }
    
    printf("Filen \"%s\" innehåller f\x94ljande..\n\n",filnamn);
    printf("Antal tecken: %d\n",tecken);
    printf("Antal siffror: %d\n",siffror);
    printf("Antal rader: %d\n",rader);
    printf("\n\nProgrammet avslutas..\n");
 
    //stänger minFile
    fclose(minFil);                         

  system("PAUSE");            
  return 0;
}
Medlem sedan sep. 20011 086 inlägg
#2

Att det blir fel beror på att du inte har koll på "precedence"-reglerna (vad det nu heter på svenska).
Din while-sats borde vara

while((tkn = fgetc(minFil)) != EOF){
Medlem sedan sep. 2002188 inlägg
#3

tackar så mkt pimme

Medlem sedan okt. 20051 inlägg
#4

Halloj.
Jag håller på och lär mig lite programmering. Lite frågor angående din kod:

text[1000] - Vad används den till? Jag kanske har missat det, men jag ser inte var den används i koden.

//byter ut sista tecknet i filnamnet mot \0
if(n>0)
filnamn[n-1]='\0';

Varför gör man så?

Tack på förhand.

/En novis

Medlem sedan juni 200010 432 inlägg
#5

Arrayen text används inte, nej.
if-satsen är till för att se till att inte skrivning till förbjudet minnesutrymme sker av termineringen av strängen. Skulle annars leda till en krasch av programmet.

264 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)