簡體   English   中英

如何從兩個相對的文本文件中打印兩行,而不是在 C 中逐一打印?

[英]How to print two lines from two text files opposite to each other instead of one by one printing in C?

...char* status1, * status2;
    char ch1[255],ch2[255];
    FILE* fptr1;
    FILE* fptr2;
    char buf1[0x100];
    char buf2[0x100];
    snprintf(buf1, sizeof(buf1), "%s.txt", text);
    snprintf(buf2, sizeof(buf2), "%s.txt", text);
    fptr1 = fopen(buf1, "r");
    fptr2 = fopen(buf2, "r");

//  fptr = fopen(folder[5]+*c[i].val+text[3], "r");
    if (fptr1 == NULL && fptr2==NULL)
    {
        printf("Cannot open files \n");
        exit(0);
    }

    // Read contents from file 

    do {
        status1 = fgets(ch1, sizeof(ch1), fptr1);
        status2 = fgets(ch2, sizeof(ch2), fptr1);
        printf("File 1: %s", ch1);
        printf("File 2: %s", ch2);
    }while (status1||status2);
    fclose(fptr1);
    fclose(fptr2);...

我正在嘗試從兩個彼此相對的不同文件中打印行,例如這個

------------  ------------
-3--------3-  -3--------3-
------------  ------------
------------  ------------
------------  ------------
------------  ------------
------------  ------------
-3--------3-  -3--------3-
------------  ------------

但進入

------------
 -3--------3-
 ------------
 ------------
 ------------
 ------------
 ------------
 -3--------3-
 ------------
 -3--------3-
 ------------
 -3--------3-

在您的代碼中,我發現了許多使文件的 output 與預期不符的事情。 主要原因是數字 1,文件名稱問題和數字 3。

  1. 讓我們從這段代碼開始:

     snprintf(buf1, sizeof(buf1), "%s.txt", text); snprintf(buf2, sizeof(buf2), "%s.txt", text);

    這兩行代碼不知何故寫得不對。 首先,為什么要打開同一個文件兩次? 您必須將“text”參數更改為 2 個不同的名稱。 其次,使用 sizeof() 獲取緩沖區的大小是不合適的; 您應該定義一個常數。

     #define BUFF_SIZE 0x100
  2. 下一個代碼我導致錯誤:

     if (fptr1 == NULL && fptr2==NULL) { printf("Cannot open files \n"); exit(0); }

    將“&&”更改為“||”,因為您要檢查兩個文件是否都已打開以供讀取。

  3. 接下來的兩行是代碼不起作用的主要原因:

     status1 = fgets(ch1, sizeof(ch1), fptr1); status2 = fgets(ch2, sizeof(ch2), fptr1); printf("File 1: %s", ch1); printf("File 2: %s", ch2);

    首先,將status2變量的給'fgets' function的參數改為'fptr2'。 其次,您應該在代碼中添加下 3 行:

     size_t len1 = strcspn(ch1, "\n"), len2 = strcspn(ch2, "\n"); ch1[(len1 < BUFF_FILE_SIZE)? (len1): (BUFF_FILE_SIZE - 1)] = 0; ch2[(len2 < BUFF_FILE_SIZE)? (len2): (BUFF_FILE_SIZE - 1)] = 0;

    這 3 行正在搜索“\n”字符,它是“新行”字符,如果找到則刪除,如果沒有將緩沖區中的最后一個字符更改為 null,因此 printf 將知道何時停止讀取緩沖。 第三,printfs 應該如下所示:

     printf("%s ", ch1); printf("%s\n", ch2);

如您所見,我在第一個 printf 中添加了一個空格來分隔兩個文件的兩個輸出,並在我添加的第二個文件中輸入。

現在對於整個代碼:

#define BUFF_SIZE 0x100
#define BUFF_FILE_SIZE 255
void printFiles(const char* text1, const char* text2)
{
    char* status1, * status2;
    char ch1[BUFF_FILE_SIZE], ch2[BUFF_FILE_SIZE];
    FILE* fptr1;
    FILE* fptr2;
    char buf1[BUFF_SIZE] = { 0 };
    char buf2[BUFF_SIZE] = { 0 };
    snprintf(buf1, BUFF_SIZE, "%s.txt", text1);
    snprintf(buf2, BUFF_SIZE, "%s.txt", text2);
    fptr1 = fopen(buf1, "r");
    fptr2 = fopen(buf2, "r");

    //  fptr = fopen(folder[5]+*c[i].val+text[3], "r");
    if (fptr1 == NULL || fptr2 == NULL)
    {
        printf("Cannot open files \n");
        exit(0);
    }

    // Read contents from file 

    do {
        status1 = fgets(ch1, BUFF_FILE_SIZE, fptr1);
        status2 = fgets(ch2, BUFF_FILE_SIZE, fptr2);
        size_t len1 = strcspn(ch1, "\n"), len2 = strcspn(ch2, "\n");
        ch1[(len1 < BUFF_FILE_SIZE) ? (len1) : (BUFF_FILE_SIZE - 1)] = 0;
        ch2[(len2 < BUFF_FILE_SIZE) ? (len2) : (BUFF_FILE_SIZE - 1)] = 0;
        printf("%s ", ch1);
        printf("%s\n", ch2);
    } while (status1 || status2);

    fclose(fptr1);
    fclose(fptr2);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM