2017-06-14 49 views
-2

讀取文件時,我從我的演講,我在我的第一年的一個問題是打印文本的線,我解決不了這個問題試圖使用計數C編程語言

問題是試圖要求我創建一個程序,用於讀取文本文件中的文本並將其輸出到控制檯中,並計算正在打印的行,並在輸出文本的控制檯上查看它?

這裏是實際問題的pdf鏈接。 https://drive.google.com/file/d/0B0jqSF8uVDH3MHE3S2FhaHhWMXM/view

這裏是我正在閱讀和輸出在控制檯中的文本文件的鏈接。

https://drive.google.com/file/d/0B0jqSF8uVDH3WFBsdExaLXY4RDA/view

這裏是我做的代碼,並有一個錯誤,我必須去除實際文本輸出,使它我不想這樣做。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    int current = 0; 
    FILE* p_file = 0; 

    char name[100]; 

    printf("what file\n"); 
    scanf("%s", &name); 

    p_file = fopen(name, "r"); 

    current = fgetc(p_file); 

    int count = 0; 

    while (EOF != current) 
    { 
     count = count + 1; 

     printf("%d: ", count); 
     printf("%c", current); 

     current = fgetc(p_file); 

    } 
    fclose(p_file); 

    return 0; 
} 

請任何閱讀問題,看看你是否能幫助

我使用Microsoft Visual Studio 2013?

+0

爲什麼人們否決的問題? – DoeCodeMan

回答

0

這可能適合你。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    FILE* p_file = 0; 
    char name[100]; 
    char st[100]; 

    printf("what file\n"); 
    scanf("%s", name); 

    p_file = fopen(name, "r"); 

    int count = 0; 

    while (fgets(st, sizeof st, p_file) != NULL) 
    { 
     count = count + 1; 

     printf("%d: ", count); 
     printf("%s", st); 
    } 
    fclose(p_file); 

    return 0; 
} 
+0

_that可以在文本文件中讀取,每次只能讀取一個字符._ – BLUEPIXY

0

您需要計算行數。所以你需要檢查行結束。行總是以換行符'\ n'和(可選)回車'\ r'結尾。那麼,讓我們來計算換行符。

逐字節讀取速度會很慢,但對於您的關卡確定無誤。

while (!feof(p_file)) // check for end of file. (EOF != current) that way has not been in use for ages. 
{ 
    // get a byte from file 
    current = fgetc(p_file); 
    // is it a newline ? 
    if (current == '\n') 
    { 
    ++count;      // count 
    printf("\nline %d :", count); // only print the line # on a new line. 
            // the \n - our current character, is 
            // printed as part of the line label. 
    } 
    else 
    { 
    printf("%c", current); 
    } 
} 

這幾乎就是它。您的代碼在打開文件後確實需要一些錯誤檢查,在對p_File進行任何操作之前,確保一切正常。你可能想要從第一行插入一行代碼,也許從1開始,而不是零,我會把它留給你。

1

這樣的:

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void){ 
    FILE *fp; 
    char filename[FILENAME_MAX+1] = ""; 
    int line_no, line_no_width, ch, pre_ch; 

    printf("Filename? ");fflush(stdout); 
    fgets(filename, sizeof filename, stdin); 
    filename[strcspn(filename, "\n")] = 0;//chomp newline 
    putchar('\n'); 
    if((fp = fopen(filename, "r")) == NULL){ 
     perror("fopen:"); 
     exit(EXIT_FAILURE); 
    } 

    line_no = 0; 
    while ((ch = fgetc(fp)) != EOF){ 
     if(ch == '\n'){ 
      ++line_no; 
     } 
     pre_ch = ch; 
    } 
    if(pre_ch != '\n') 
     ++line_no; 
    for(line_no_width = 0; line_no; line_no /= 10) 
     ++line_no_width; 

    line_no = 0; 
    pre_ch = '\n'; 
    rewind(fp); 
    while ((ch = fgetc(fp)) != EOF){ 
     if(pre_ch == '\n'){ 
      ++line_no; 
      printf("%*d: ", line_no_width, line_no); 
     } 
     putchar(ch); 
     pre_ch = ch; 
    } 
    fclose(fp); 
    if(pre_ch != '\n') 
     putchar('\n'); 

    return 0; 
} 
+0

對'line_no'使用'unsigned long long'?誰會讀這樣的來源? :/ – BLUEPIXY

+0

@ Binary_10對不起,我不確定你想問我什麼。 – BLUEPIXY

+0

它可能沒有以換行符結束。只要換行符結束,沒有錯。 – BLUEPIXY