c语言中读取及输出汉字的问题
#include<stdio.h>#include<stdlib.h>voidmain(){FILE*stream;charch[3];chartemp;if((stre...
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *stream;
char ch[3];
char temp;
if((stream=fopen("d:\\new1.txt", "rt"))==NULL)
{
perror("cannot open the file!\n");
exit(1);
}
/* while(feof(stream)==0)
{
/*fread(ch, sizeof(ch), 1, stream);
printf("%s\n", ch);
printf("%c%c\n", ch[0], ch[1]);*/
/*fgets(ch, 1, stream);
printf("%s\n", ch);*/
/*fread(&temp, sizeof(temp), 1, stream);
putchar(temp);*/
/*fscanf(stream, "%c", &temp);
printf("%c", temp);*/
//}
fgets(ch, 3, stream);
printf("%s\n", ch);///这种写法有问题对ch数组有什么要求?
fclose(stream);
}
/*
d:\\new1.txt 里面是2个汉字,随便写的,请问为什么前2种写法,不能正确显示出来
汉字,但是后2中写法却可以?问题出在那里?还有没有别的写法了?
不好意思,我最多只能悬赏100分,但是如果回答的好,我可以加分
*/
zhusisi007你的2中方法都不可行,
1. 不可能定义一个比文本长度还长的数组
2. fread(ch, sizeof(ch), 1, stream);
printf("%s\n", ch); //或者用printf("%c%c\n",ch[0],ch[1]);单个输出
你改成printf("%s", ch) 把\n去掉才可以。
其实你可以很随意的输出半个汉字。。
void main()
{
char ch;
FILE *stream;
if((stream=fopen("d:\\new1.txt", "r"))==NULL)
{
perror("couldnot open the file!\n");
exit(1);
}
while(feof(stream)==0)
{
ch=fgetc(stream);
printf("%c", ch);
}
} 展开
#include <stdlib.h>
void main()
{
FILE *stream;
char ch[3];
char temp;
if((stream=fopen("d:\\new1.txt", "rt"))==NULL)
{
perror("cannot open the file!\n");
exit(1);
}
/* while(feof(stream)==0)
{
/*fread(ch, sizeof(ch), 1, stream);
printf("%s\n", ch);
printf("%c%c\n", ch[0], ch[1]);*/
/*fgets(ch, 1, stream);
printf("%s\n", ch);*/
/*fread(&temp, sizeof(temp), 1, stream);
putchar(temp);*/
/*fscanf(stream, "%c", &temp);
printf("%c", temp);*/
//}
fgets(ch, 3, stream);
printf("%s\n", ch);///这种写法有问题对ch数组有什么要求?
fclose(stream);
}
/*
d:\\new1.txt 里面是2个汉字,随便写的,请问为什么前2种写法,不能正确显示出来
汉字,但是后2中写法却可以?问题出在那里?还有没有别的写法了?
不好意思,我最多只能悬赏100分,但是如果回答的好,我可以加分
*/
zhusisi007你的2中方法都不可行,
1. 不可能定义一个比文本长度还长的数组
2. fread(ch, sizeof(ch), 1, stream);
printf("%s\n", ch); //或者用printf("%c%c\n",ch[0],ch[1]);单个输出
你改成printf("%s", ch) 把\n去掉才可以。
其实你可以很随意的输出半个汉字。。
void main()
{
char ch;
FILE *stream;
if((stream=fopen("d:\\new1.txt", "r"))==NULL)
{
perror("couldnot open the file!\n");
exit(1);
}
while(feof(stream)==0)
{
ch=fgetc(stream);
printf("%c", ch);
}
} 展开
10个回答
展开全部
我觉得你将半个汉字输到屏幕上,由于与它对应的有ASCII码存在。
所以你看不到汉字。
但是你如果将它输到文件里面,再打开文件,应当就可以看见(操作系统可以判断,它是否是汉字,如果是汉字,它会再读后面那个字节)
以上仅仅是个人观点,你可以试一下。我记得我曾经也碰到这个问题。
所以你看不到汉字。
但是你如果将它输到文件里面,再打开文件,应当就可以看见(操作系统可以判断,它是否是汉字,如果是汉字,它会再读后面那个字节)
以上仅仅是个人观点,你可以试一下。我记得我曾经也碰到这个问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没错,一个汉字实际上是由2个char组成的,所以前两种写法就应该改为:
fread(ch, 4*sizeof(ch), 1, stream);
printf("%s\n", ch);
printf("%c%c%c%c\n", ch[0],ch[1],ch[2],ch[3]);
fgets(ch, 4*sizeof(ch), stream);
printf("%s\n", ch);
再好好看看,肯定能行的!!
fread(ch, 4*sizeof(ch), 1, stream);
printf("%s\n", ch);
printf("%c%c%c%c\n", ch[0],ch[1],ch[2],ch[3]);
fgets(ch, 4*sizeof(ch), stream);
printf("%s\n", ch);
再好好看看,肯定能行的!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有点乱,没仔细看,但是我知道的是,一个汉字实际上是由2个char组成的.所以要想用一个字符串来存2个汉字,加上字符串结束符,必须是char ch[5];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有点乱,没仔细看,但是我知道的是,一个汉字实际上是由2个char组成的.所以要想用一个字符串来存2个汉字,加上字符串结束符,必须是char ch[5]; 加油吧,你可以成功。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
zhusisi007 所说的是对的,但是在VC环境,我想楼主是不是在TC2.0的环境下编译的,貌似TC2.0不支持中文,如果你非在TC中显示中文,可以下载TC2.0中文版。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询