2014-01-12 61 views
1

是否有一種方法可以按字符讀取字符以獲取字符和爲數字設置數字?按char字符讀取文件字符併爲數字設置數字

bob 4567 
joe 39083 
sara 4239824 

這是我的文件

while ((c = fgetc(pFile)) != EOF) 
{ 
    //my work 
} 

我知道這個工作對我的字符。這不會以我想要的方式讀取數字。這讀取b,o,b,空間,4,5,6,7。我希望它讀取b,o,b,space,4567。原因是我最終會加入4567加39083加4239824。

UPDATE 12-20

如果該文件是不相符的所有通過CAN方式的fscanf處理呢?有時文件是「文字編號」,其他時候只是「文字」。喜歡這個。

bob 456 
echo 
cat 
dog 1101 
peacock 300 

這似乎是工作,我很驚訝這一點。我不認爲fsacnf喜歡不一致的文件。

while (fscanf(pFile, "%s %d", nam, &val) !=EOF) 
{ 
    //my work 
} 

回答

3

可以讀取的數字到一個數組,然後將其轉換成一個與intatoi(優選地)01​​。

或者,您可以讀取這些字母,然後在到達該空間時停下來,然後用類似[f]scanf(或者您可以全部用[f]fscanf讀取它)讀取數字。

編輯:

如果可以選擇,我可能會做這樣的事情:

char name[16]; 
int number; 

fscanf(input_file, "%15s %d", name, &number); 
+0

'atoi'竟是我計劃使用。不幸的是,似乎fgetc確實不喜歡數字。不知何故,它變成了2,50,5,53。我真的不明白這是怎麼可能的。你能解釋一下你推薦的fscanf嗎? – cokedude

+0

fsanf可以處理不一致的文件嗎?這就是我所做的,我很驚訝,我沒有任何問題。 'while(fscanf(pFile,「%s%d」,nam,&val)!= EOF)''。 – cokedude

+0

@cokedude:是的,沒有。會發生什麼是fscanf將無法轉換整數,在這種情況下它將返回而不修改'number'的現有值。如果字符串丟失,您可能會遇到問題。在這種情況下,該數字將被讀爲一個字符串。 –

1
#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 

enum { SPACE, STRING, NUMBER, END }; 

int main(void){ 
    FILE *pFile = stdin;//Mock 
    char buffer[32]; 
    int i, c, kind, number; 
    unsigned long long sum =0; 

    i = 0; kind = SPACE; 
    while((c = fgetc(pFile)) != EOF){//&& i< suzeof(buffer) 
     buffer[i] = c; 
     if(isdigit(c)){ 
      kind = NUMBER; 
      ++i; 
     } else if(isspace(c)){ 
      buffer[i] = '\0'; 
      if(kind == STRING){ 
       printf("%s\n", buffer); 
      } else if(kind == NUMBER){ 
       number = atoi(buffer); 
       printf("%d\n", number); 
       sum += number; 
      } 
      kind = SPACE; 
      i = 0; 
     } else { 
      kind = STRING; 
      ++i; 
     } 
    } 
    printf("sum : %llu\n", sum); 
    return 0; 
} 
+0

注意:如果緩衝區已滿,結果不正確。如果最後一行沒有新行,則該行會被忽略。 – BLUEPIXY

+0

我編譯並運行程序後,我知道我需要鍵入一些東西。打完所有我想輸入的內容後,我想要做什麼?我嘗試了多次輸入,\ n,EOF,0,1和2.我不知道如何完成它,除非點擊ctrl + c並殺死程序。 – cokedude

+0

@cokedude如果文件指針是'fopen'真實的文件指針,那麼沒有問題。如果你必須把'stdin'作爲樣本,那麼輸入'CTRL + Z'(對於windows)或'CTRL + D'(對於unix氏族)。 – BLUEPIXY

相關問題