C语言,三级上机,关于输出乱码

作者&投稿:劳屈 (若有异议请与网页底部的电邮联系)
c语言,输出总是乱码~

没看懂你想做什么
scanf("%d",m); 不能这样输入

m是一个数组,要一个元素一个元素的输入
例如
for(i = 0;i<M;i++) scanf("%d",&m[i]);

同样 printf("%d ",n) 这样输出 也不对

要一个一个的输出

这里涉及到一个字符在源代码(文本)中,编译好的二进制文件中,以及最后控制台输出编码形式的区别.
首先,要明确一点:C(语言/程序)并不理解ANSI,UTF-8以及任何其他编码.它只知道处理你给它的字符的二进制表示.
在简体中文Windows下,默认的文本保存编码是ANSI(即GBK);Linux下根据系统locale设定,一般应该是(zh_CN.UTF-8).(以下基于简体中文Windows)
1)对于源文件中保存的"中文"这个字符串,VS2008看到的就是"0xd6d0"和"0xcec4"的形式(默认ANSI编码得到).但编译器才不管是不是GBK神马的,它就管那串数字.
区别,MinGW看到的是"0xe4b8ad"和"0xe69687"(gcc默认UTF-8).注意,用MinGW编译的源文件中有中文宽字符必须保存为UTF-8编码.
2)然后,在二进制文件中的存储形式,对传统的字符串(char str[] = "中文";),编译器什么都不做,直接把那串数字(如"0xd6d0","0xcec4")搬过去塞进二进制文件.
但对于宽字符串(wchar_t wstr[] = L"中文";),编译器会将其做转换,转换成Unicode编码格式(在Windows是UTF-16,而Linux下是UTF-32).如"中文"的16位Unicode是"0x4e2d"和"0x6587",然后把这串转换后的数字("0x4e2d","0x6587")塞进二进制文件中.(这里VS和MinGW做的没有区别)
这里有点需要注意,编译器必须知道你的源文件保存的编码!如VS默认是ANSI编码,如果你用UTF-8保存.c源文件去用VS打开看一定是乱码.同理如果你用mingw编译ANSI编码保存的源文件,也会出错!(但可以修改编译选项解决,见文章末尾) 在本文这里这个原因其实很好理解,因为编译器需要知道,如果它要将一个保存在文件中的字符转成宽字符时,是从什么编码转到Unicode.(可见上述VS是GBK->Unicode,而MinGW是UTF-8->Unicode)

有点小错误,题里说的是字符0到9,所以那个if应该改成这样就对了,其它地方没发现什么问题。
if(((*pf>='0')&&(*pf<='9')) || (*pf*11%256<=32))

if(((*pf>=0)&&(*pf<=9)) || (*pf*11%256<=32))

if(((*pf>='0')&&(*pf<='9')) || (*pf*11%256<=32))

这是小问题

主要问题我觉得是你的char *pf
char 只能是-127~127哦
你%256,不会出乱码才怪呢?

还有。你的unsigned char *p;

p=strchr(xx[i],'\n'); //此处可以编译通过吗??

strchr函数会提示无法转换参数 从unsigned char * to char *的!

给你个建议,你把所有unsigned char *转换成char * 把%256改成%128,这样就不会有乱码了!

当然,如果只需要你改encryChar()函数的话,
你只需要把char *pf 改成unsigned char *pf 就可以了!

因为题目判断的是字符,所以if语句中的 0 和 9 需要加引号:
if(((*pf>='0')&&(*pf<='9')) || (*pf*11%256<=32))

其他地方没有问题。出现乱码是因为编译器中缺少那些字符,所以是显示为乱码,不用担心,不会影响最后的评分。

//请用如下代码测试
void encryChar()
{
int i, j, len;
char *pf;
char ch;

for(i=0;i<maxline;i++)
{
pf=(char*)xx[i];
len = strlen(pf);
for ( j=0; j <len; j++ )
{
if ( pf[j] >='0' && pf[j]<='9')
{
continue;
}
ch = pf[j] * 11 % 256;
if ( ch <= 32 )
{
continue;
}
pf[j]=ch;
}
}
}

char c;
for(int row = 0;row <50;row++){
for(int col = 0;col <80;col++){
c = xx[row][col];
if(xx[row][col] >= '0' && xx[row][col] <= '9')
continue;
else if((c*11%256) > 32)
continue;
else{
xx[row][col] = c*11%256;
}
}
}

if(((*pf>=0)&&(*pf<=9)) || (*pf*11%256<=32))

if(((*pf>='0')&&(*pf<='9')) || (*pf*11%256<=32))

这是小问题

主要问题我觉得是你的char *pf
char 只能是-127~127哦
你%256,不会出乱码才怪呢?

还有。你的unsigned char *p;

p=strchr(xx[i],'\n'); //此处可以编译通过吗??

strchr函数会提示无法转换参数 从unsigned char * to char *的!

给你个建议,你把所有unsigned char *转换成char * 把%256改成%128,这样就不会有乱码了!

当然,如果只需要你改encryChar()函数的话,
你只需要把char *pf 改成unsigned char *pf 就可以了!

读取过来的是字符而不是数字
比较时得加单引号

char是正负127吧?mod 256,就错了

因为题目判断的是字符,所以if语句中的 0 和 9 需要加引号:
if(((*pf>='0')&&(*pf<='9')) || (*pf*11%256<=32))

其他地方没有问题。出现乱码是因为编译器中缺少那些字符,所以是显示为乱码,不用担心,不会影响最后的评分。

有点小错误,题里说的是字符0到9,所以那个if应该改成这样就对了,其它地方没发现什么问题。
if(((*pf>='0')&&(*pf<='9')) || (*pf*11%256<=32))


计算机三级考试上机部分考什么
计算机三级考试的上机 网络PC技术 考的是汇编语言程序设计 其他的 数据库技术,网络技术和 信息管理技术 考的是一道c语言编程序题目 大部分是编写实现某个功能的函数 如数字排序,交换字符串,结构体排序,数学函数的计算,文件的操作...一般来说,如果复习的认真,c语言有基础,南开100题和清华模拟...

全国计算机等级考试三级(NCRE)网络技术上机都考些什么?是否涉及语言...
2. 上机考试:60分钟,满分100分 你看清楚了,它的上机考试是考C语言是三级C,很难的,不过你放心,你可以去买一本南开一百题来看看,把里面的题目好好看看和练练,保证没问题!参考连接:http:\/\/www.eastedu.com.cn\/ncre\/index.asp?Nclassid=3 里面有大量的题目和上机操作,你可以好好的学一下....

全国计算机三级网络技术上机考试的题库是和二级C语言的一样的吗?_百度...
不一样。二级题型是一个填空题、一个改错题和一个编程题(一般是完善一个子函数)。三级就一个编程题。但你可以放心,三级编程题难度跟二级差不了太多的,二级机试过了三级也能过的。三级也有题库的,号称100题。你可以做一做,里面有一些是重复的,所以实际还没有100道题,一天做几道,没多久就...

三级数据库和三级c语言的上机是不是一样的
是一样的,所有三级的上机都是一样的,其实都没有技术含量,只要看过一百题就行了。

全国计算机等级考试网络三级上机考试评分看代码吗?能用C++语言吗?
让我来告诉你,你可以使用任何语言,只要你能得到正确的答案。评分的时候不看代码,只凭考试文件夹下的输出文件。一般题目都是给你一部分数据,这部分数据是保存在一个特定的文件中的(比如in.dat文件,使用记事本打开就能看到里面的数据),要求你把这些数据进行处理,得到另一组数据,并输出到另一个...

C语言三级考什么?
\\x0d\\x0a\\x0d\\x0a下面3个上机为c语言考试,并且上机要求相同。\\x0d\\x0a2、网络技术\\x0d\\x0a对网络的原理、组建、维护感兴趣的朋友可以报考网络。这科考试主要内容为计算机基础知识、网络原理、操作系统、网络应用。电信、通信、电子信息科学等专业可以报考网络技术。同时,网络技术也是目前三级...

计算机三级考的是什么语言?
三级信息管理技术的笔试比较综合,设计到软件工程、数据库、信息管理等,设计到数据库的部分会用到SQL,上机 还是C语言………所以你要考三级的话,C语言必须会,汇编和SQL就看你考哪一门。我建议你考三级网络,只需设计C语言,而且笔试不难。数据库和PC上机考的都是C语言,笔试中数据库涉及结构化查...

计算机三级数据库,上级考c语言用的是什么软件
二级和三级上机编程用的软件全部都是microsoft visual c++ 6.0,

有关三级数据库考试的小小疑问!!!(上机部分)
计算机三级考试包括的四门上机都是一样的,是从同一个题库抽的题,都是考c的,只要c学好了,过三级机试不成问题,加油!

计算机三级上机考试怎样看数据结果,要详细步骤。
编完以后先按F9看自己有没有错误,如果有,按任意键返回然后改,改完再按F9检查,直到没有错误为至,完了按"Ctrl+F9"进行编译连接,按了以后计算机自动就连接好了,最后按"Alt+F5"查看数据结果,看完以后再按任意键返回就可以了,如果运行正确你就可以交卷了....

五莲县17122901658: C语言 字符串输出时最后出现乱码 -
步咳复方: 输出出现乱码就是因为字符串结尾并没有结尾符'\0'. gets函数读入一行字符串时,会在最末尾自动加上'\0'结尾.但是你在for循环内将s2的字符一个个拷贝到s中的时候,循环限定条件只到了s2字符串的'\0'结尾符之前,所以输出乱码了. 将循环条件k<a+b改为k<a+b+1或者k<=a+b就可以将s2字符串最末尾的'\0'结尾符也一同赋值到s字符串的最后,输出就可以正常显示.

五莲县17122901658: C语言文件输出时,输入数据后为什么会出现乱码 -
步咳复方: 可能是输入缓冲区之前未清空 使用这个函数将文件缓冲区清空 memset(buffer,0,sizeof(buffer)); 头文件在#include中

五莲县17122901658: c语言 字符串 输出多点乱码 -
步咳复方: int m[i]; 改成 int m[i] = {'\0'}; 试下 因为m字符串有可能没有初始化,最后没有终结符,造成最后几个字符随机内存值乱码.

五莲县17122901658: C语言程序输出有乱码 -
步咳复方: #include <string.h>#include <stdio.h>#define LEN 20 void fun(char a[],char b[],int n) { int i; for(i=0;i<n;i++) b[i]=a[i]; for(i=n+1;i<strlen(a);i++) b[i-1]=a[i]; b[i]='\0'; } void main() { char str1[LEN],str2[LEN]; int n; printf("\nInput:"); gets(str1); scanf("%d"...

五莲县17122901658: C语言,字符串输出是乱码是怎么回事? -
步咳复方: 字符串使用前请使用清空语句把垃圾内存清理成'\0',也就是0x00(0): memset(str2, 0x00, sizeof(str2)); 当然,也可以在声明的时候进行初始化: char str2[20] = {0}; 这句也能实现同样的效果.这是C语言习惯,务必养成! '\0'是字符串结束符,每当解释器看到这'\0'才会认为字符串终止,而你的程序明显没有字符串结束符,所以连同垃圾内存一起读出来了.“烫烫..”等就是垃圾内存. 不明白欢迎追问

五莲县17122901658: C语言,输出乱码问题 -
步咳复方: 提几个建议. 1)没给出str的大小,不知道你定义的多大.至少str要保证120以上.考虑用2的倍数最优可以char str[122] 并且因为系统将自动在最后加'\0'.最好设定读取121为好.以免读取半个中文字. 2)fgets的用法问题. 追加返回值的判断为好. if(fgets(str,120,fp)!=NULL){printf("%s\n",str); } 3)关于出现乱码的问题,估计你的文件中有中文汉字.读取到119位的时候正好是某个汉字的前一半. 要解决这个if(fgets(str,121,fp)!=NULL) 这里120 改成读偶数个121.另外文件最好用宽字符的.就可以避免乱码了.

五莲县17122901658: C语言字符串输出乱码 -
步咳复方: 输出乱码是必须的,因为你的数据类型搞错了,你使用的是字符函数stringcopy()来拷贝字符; 那么要处理的数据当是char类型,然而你所定义的指针应当也是char类型; 你应当修改的地方是 int *str1,*str2;//请将int改为char

五莲县17122901658: C语言输出结果不正确 乱码 -
步咳复方: readdata(float score[10]) { cout for(int i=0;i cin>>score[i]; return score[10]; } 这个函数没有规定函数的返回值

五莲县17122901658: c语言,输出总是乱码 -
步咳复方: 没看懂你想做什么 scanf("%d",m); 不能这样输入m是一个数组,要一个元素一个元素的输入 例如 for(i = 0;i<M;i++) scanf("%d",&m[i]);同样 printf("%d ",n) 这样输出 也不对要一个一个的输出

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网