c程序,输出时显示全是乱码,新人不懂求指导!!!!!!!
#include "string.h"
#include "conio.h"
#include "stdio.h"
#define MAX_LINE_LENGTH4096
#define OUTPUT_TYPE_SCREEN0
#define OUTPUT_TYPE_FILE1
void CompareFiles(char* lpszFirstFile, char* lpszSecondFile, int iOutputType);
int main(int argc)
{
// Compare files
CompareFiles(".\\shiyan1.txt", ".\\shiyan2.txt", OUTPUT_TYPE_SCREEN);
// Show default message
printf("Press any key to continue...");
while (!kbhit());
return 0;
}
void CompareFiles(char* lpszFirstFile, char* lpszSecondFile, int iOutputType)
{
int iCurrentLine1 = 0;
int iCurrentLine2 = 0;
int iTotalLines1 = 0;
int iTotalLines2 = 0;
int off1 = -1;
int off2 = -1;
char* lpszT1 = NULL;
char* lpszT2 = NULL;
char lpszText1[MAX_LINE_LENGTH];
char lpszText2[MAX_LINE_LENGTH];
char lpszText3[MAX_LINE_LENGTH];
char lpszText1_Temp[MAX_LINE_LENGTH];
char lpszText2_Temp[MAX_LINE_LENGTH];
char* lpszT1_Temp = NULL;
char* lpszT2_Temp = NULL;
// Check for valid file names
if ((lpszFirstFile != NULL) && (lpszSecondFile != NULL))
{
// Try to open files
FILE* f1 = fopen(lpszFirstFile, "r");
FILE* f2 = fopen(lpszSecondFile, "r");
// Open log file
FILE* f3 = NULL;
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("Comparing files...\n");
printf("[File1]: %s\n", lpszFirstFile);
printf("[File2]: %s\n\n", lpszSecondFile);
}
else
{
f3 = fopen("Log.txt", "w");
sprintf(lpszText3, "Comparing files...\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "[File1]: %s\n", lpszFirstFile);
fputs(lpszText3, f3);
sprintf(lpszText3, "[File2]: %s\n\n", lpszSecondFile);
fputs(lpszText3, f3);
}
// Check for valid files
if ((f1!= NULL) && (f2!= NULL))
{
do
{
// Increment line counters
iCurrentLine1++;
iCurrentLine2++;
// Read single line of text from files
lpszT1 = fgets(lpszText1, MAX_LINE_LENGTH, f1);
lpszT2 = fgets(lpszText2, MAX_LINE_LENGTH, f2);
// Compare lines of text
if (strcmp(lpszText1, lpszText2) != 0)
{
// Scan through second file looking for equal lines
iTotalLines2 = 0;
off2 = ftell(f2);
FILE* f2t = fopen(lpszSecondFile, "r");
fseek(f2t, off2, SEEK_SET);
do
{
// Skip different lines
iTotalLines2++;
lpszT2_Temp = fgets(lpszText2_Temp, MAX_LINE_LENGTH, f2t);
}
while ((lpszT2_Temp != NULL) && ((strcmp(lpszText1, lpszText2_Temp) != 0)));
fclose(f2t);
// Scan through first file looking for equal lines
iTotalLines1 = 0;
off1 = ftell(f1);
FILE* f1t = fopen(lpszFirstFile, "r");
fseek(f1t, off1, SEEK_SET);
do
{
// Skip different lines
iTotalLines1++;
lpszT1_Temp = fgets(lpszText1_Temp, MAX_LINE_LENGTH, f1t);
}
while ((lpszT1_Temp != NULL) && ((strcmp(lpszText2, lpszText1_Temp) != 0)));
fclose(f1t);
// Compare lines passed (find minimum)
if ((lpszT1_Temp != NULL) || (lpszT2_Temp != NULL))
{
if (iTotalLines2 < iTotalLines1)
{
// Scan through second file looking for equal lines
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("\n******************************\n");
printf("* StartOfSection *\n");
printf("******************************\n");
printf("\t\t[File2, %d]: %s", iCurrentLine2, lpszText2);
}
else
{
sprintf(lpszText3, "\n******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "* StartOfSection *\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "\t\t[File2, %d]: %s", iCurrentLine2, lpszText2);
fputs(lpszText3, f3);
}
off2 = ftell(f2);
FILE* f2t = fopen(lpszSecondFile, "r");
fseek(f2t, off2, SEEK_SET);
for (int i=0; i<iTotalLines2-1; i++)
{
fgets(lpszText2_Temp, MAX_LINE_LENGTH, f2t);
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("\t\t[File2, %d]: %s", iCurrentLine2+i+1, lpszText2_Temp);
}
else
{
sprintf(lpszText3, "\t\t[File2, %d]: %s",
iCurrentLine2+i+1, lpszText2_Temp);
fputs(lpszText3, f3);
}
}
fgets(lpszText2_Temp, MAX_LINE_LENGTH, f2t);
off2 = ftell(f2t);
fseek(f2, off2, SEEK_SET);
fclose(f2t);
iCurrentLine2 += iTotalLines2;
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("******************************\n");
printf("* EndOfSection *\n");
printf("******************************\n\n");
}
else
{
sprintf(lpszText3, "******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "* EndOfSection *\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "******************************\n\n");
fputs(lpszText3, f3);
}
}
else
{
// Scan through first file looking for equal lines
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("\n******************************\n");
printf("* StartOfSection *\n");
printf("******************************\n");
printf("\t\t[File1, %d]: %s", iCurrentLine1, lpszText1);
}
else
{
sprintf(lpszText3, "\n******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "* StartOfSection *\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "\t\t[File1, %d]: %s", iCurrentLine1, lpszText1);
fputs(lpszText3, f3);
}
off1 = ftell(f1);
FILE* f1t = fopen(lpszFirstFile, "r");
fseek(f1t, off1, SEEK_SET);
for (int i=0; i<iTotalLines1-1; i++)
{
fgets(lpszText1_Temp, MAX_LINE_LENGTH, f1t);
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("\t\t[File1, %d]: %s", iCurrentLine1+i+1, lpszText1_Temp);
}
else
{
sprintf(lpszText3, "\t\t[File1, %d]: %s",
iCurrentLine1+i+1, lpszText1_Temp);
fputs(lpszText3, f3);
}
}
fgets(lpszText1_Temp, MAX_LINE_LENGTH, f1t);
off1 = ftell(f1t);
fseek(f1, off1, SEEK_SET);
fclose(f1t);
iCurrentLine1 += iTotalLines1;
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("******************************\n");
printf("* EndOfSection *\n");
printf("******************************\n\n");
}
else
{
sprintf(lpszText3, "******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "* EndOfSection *\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "******************************\n\n");
fputs(lpszText3, f3);
}
}
}
else
{
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("\n******************************\n");
printf("* StartOfSection *\n");
printf("******************************\n");
printf("\t\t[File1, %d]: %s", iCurrentLine1, lpszText1);
printf("\t\t[File2, %d]: %s", iCurrentLine2, lpszText2);
printf("******************************\n");
printf("* EndOfSection *\n");
printf("******************************\n\n");
}
else
{
sprintf(lpszText3, "\n******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "* StartOfSection *\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "\t\t[File1, %d]: %s", iCurrentLine1, lpszText1);
fputs(lpszText3, f3);
sprintf(lpszText3, "\t\t[File2, %d]: %s", iCurrentLine2, lpszText2);
fputs(lpszText3, f3);
sprintf(lpszText3, "******************************\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "* EndOfSection *\n");
fputs(lpszText3, f3);
sprintf(lpszText3, "******************************\n\n");
fputs(lpszText3, f3);
}
}
}
}
while ((lpszT1 != NULL) && (lpszT2 != NULL));
// Show success
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("\nSuccess: The files compared !\n\n");
}
else
{
fputs("\nSuccess: The files compared !\n", f3);
}
}
else
{
// The first file can not be found
if (f1 == NULL)
{
// Show error
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("Error: The first file can not be found !\n");
}
else
{
fputs("Error: The first file can not be found !\n", f3);
}
}
// The second file can not be found
if (f2 == NULL)
{
// Show error
if (iOutputType == OUTPUT_TYPE_SCREEN)
{
printf("Error: The second file can not be found !\n");
}
else
{
fputs("Error: The second file can not be found !\n", f3);
}
}
}
// Close files
fclose(f1);
fclose(f2);
if (iOutputType == OUTPUT_TYPE_FILE)
{
// Close log file
fclose(f3);
}
}
}
[解决办法]
粗略看了一下代码,貌似没什么问题,对文本的操作,
位移自己估计好,
还有就是读写权限设置好,
打开的时候确定是不是打开了,
指针位移读取文本内容的时候,最好用UE打开二进制码查看里面的内容对照来写,
大致就这些经验给你参考一下了,你要检查的应不是代码,而是,确定三个问题第一次,你是不是打开了文件,第二,你是不是按照需要的读写权限打开,第三,如果读取了文件里面的内容,读取的是那个位置的。
[解决办法]
用英文文本文件试试看
[解决办法]
把读文件的打开方式改成"rb"。 写文件的打开方式改成"wb"