[英]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。
讓我們從這段代碼開始:
snprintf(buf1, sizeof(buf1), "%s.txt", text); snprintf(buf2, sizeof(buf2), "%s.txt", text);
這兩行代碼不知何故寫得不對。 首先,為什么要打開同一個文件兩次? 您必須將“text”參數更改為 2 個不同的名稱。 其次,使用 sizeof() 獲取緩沖區的大小是不合適的; 您應該定義一個常數。
#define BUFF_SIZE 0x100
下一個代碼我導致錯誤:
if (fptr1 == NULL && fptr2==NULL) { printf("Cannot open files \n"); exit(0); }
將“&&”更改為“||”,因為您要檢查兩個文件是否都已打開以供讀取。
接下來的兩行是代碼不起作用的主要原因:
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.