2013-03-02 5 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#ifdef _MSC_VER 
#include <crtdbg.h> // needed to check for memory leaks (Windows only!) 
#endif 

#define FLUSH while(getchar() != '\n') 

// Prototype Declarations 
int readFile(FILE* ifp,char** words); 

int main (void) 
{ 
// Local Definitions 
FILE *ifp; 
FILE *ofp; 
char fnamer[100]=""; 
char **words; 
int *freq; 
int i; 
int numWords =0; 

// Statements 

    words = (char**)calloc (1001, sizeof(int)); 
     if(words == NULL) 
     { 
      printf("Error with Calloc\n"); 
      exit(111); 
     } 


    if (!(ifp=fopen("/Users/r3spectak/Desktop/song_row.txt", "r"))) 
    { 
     printf("sucks"); 
     exit(100); 
    } 

    numWords = readFile(ifp,words); 

    printf("%d", numWords); 

    for(i=0;i<numWords;i++) 
    printf("\n%s",words[i]); 

    #ifdef _MSC_VER 
    printf(_CrtDumpMemoryLeaks() ? "Memory Leak\n" : "No Memory Leak\n"); 
    #endif 
    printf("\n\t\tEnd of Program\n"); 
    printf("\n\t\tHave a great day!\n"); 
    return 0; 

} 


/*===============readFile================= 
Pre: 
Post: 
This function 
*/ 

int readFile(FILE* ifp,char** words) 
{ 

// Local Variables 
char buffer[1000] = " "; 
int numWords = 0; 

// Statements 
while (fscanf(ifp," %s",buffer)!=EOF) 
    { 
    words[numWords] = (char*)calloc(strlen(buffer)+1,sizeof(char)); 
       if(words[numWords] == NULL) 
       { 
        printf("\n"); 
        exit(111); 
       } 
       strcpy(words[numWords],buffer); 
       numWords++ ; 
    } 

return numWords; 

} 

Le fichier d'entrée contient les éléments suivants: rang, rangée, rangée votre bateau, doucement sur le cours d'eau. Merry, joyeusement, gaiement, gaiement, La vie n'est qu'un rêve.comment lire des chaînes par des virgules en les omettant% [^,] ne fonctionne pas pour moi

Après fscanf mes impressions tableau

Row, 
    row, 
    row 
    your 
    boat, and so on 

ce que je veux, est

Row 
row 
row 
your 
boat 

j'ai essayé% [^ ,. \ n] et sa ne fonctionne pas pour moi. il imprime des déchets

+0

Alors essayez-vous de séparer les chaînes d'entrée par des virgules? –

+0

Vous n'avez pas besoin de convertir la valeur de retour de 'calloc()' dans un programme C. –

+0

@ H2CO3 im essayant de ne pas lire les virgules du tout. –

Répondre

0

Vous pourriez trouver la fonction this particulièrement utile. Il va diviser votre chaîne en jetons, comme l'équivalent C de split() ou explode().

Exemple:

#include <stdio.h> 
#include <string.h> 

int main(){ 
    char str[] ="Row, row, row your boat, Gently down the stream."; 
    char * pch; 
    printf ("Splitting string \"%s\" into tokens:\n",str); 
    pch = strtok (str," ,."); 
    while (pch != NULL){ 
    printf ("%s\n",pch); 
    pch = strtok (NULL, " ,."); 
    } 
    return 0; 
} 

Je essentiellement copié l'exemple de page de manuel. Appeler à nouveau la fonction avec le premier argument comme NULL fera apparaître le prochain jeton de chaîne.

Questions connexes