2017-01-26 21 views
0

讀取TDT.txt(每次70個字符)並顯示每讀取第100組 70個字符。從C中的緩衝區顯示第100組字符

所以,我被困在如何把字符放在這個字符緩衝區中,並將它們打印到只顯示每百個集合的屏幕上。這是我到目前爲止的做法

int fileOpen = open("TDT.txt",2); 
int fileClose = 0; 
char read70[70]; 
int fileEnd = lseek(fileOpen,0,2); 
int test1 = lseek(fileOpen, 0,0); 
for(i = 0; i < fileEnd; i++) 
{ 
    fileRead = read(fileOpen,read70,70); 
    count++; 

    if(count == 100) 
    { 
     printf("%s",read70[i]); 
     count = 0; 
    } 
} 

我不知道如何顯示第一百個70個字符的集合。我上面的做法只是一個嘗試。我結束了一個seg故障,但我不知道爲什麼。

+0

'read70 [i]'是單個字符。本質上它是一個小整數。如果以[ASCII](http://en.cppreference.com/w/c/language/ascii)編碼(非常有可能)將它除以100,將導致「0」或「1」(因爲您使用整數除法)。然後,通過使用錯誤的['printf'](http://en.cppreference.com/w/c/io/fprintf)格式顯示導致* undefined behavior *的值,會使其變得更糟。 *並且*關閉循環中的文件,導致下一次迭代中的'read'調用失敗。 –

+1

至於賦值,可能應該讀取整個文件(每次70個字符)並在文件中顯示每百個字符。所以你會顯示字符數字100,200,300等。 –

+0

啊,所以讀一次在70個字符,並在計數超過一百後,檢查是否指數增​​量爲100? – LogNIsGood

回答

2

我想這意味着打印出每100個桶,每個桶包含70個字符。請參閱下面的代碼,完成此操作。

#include <stdio.h> 
#include <fcntl.h> 
#include <unistd.h> 

int main() { 

    char buffer[71]; // 70 + 1 just for the sake of using printf later on... 
    buffer[70] = '\0'; 

    int myFile = open("TDT.txt",O_RDONLY); 
    if (myFile < 0) 
     return 1; 

    size_t charRead = 0; 
    int nrOfSets=0; 
    charRead = read(myFile, &buffer, 70); 
    while (charRead == 70) { 
     nrOfSets++; 
     if (nrOfSets % 100 == 0) // every 100th set read in? 
      printf("set: %s\n", buffer); 
     charRead = read(myFile, &buffer, 70); 
    } 
    close (myFile); 
} 
+0

我認爲這意味着每100個字符 – LogNIsGood