首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c程序,输出时展示全是乱码,新人不懂求指导!

2013-01-06 
c程序,输出时显示全是乱码,新人不懂求指导!!!!!!!#include string.h#include conio.h#include stdio.

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"

热点排行