精华内容
下载资源
问答
  • 运行程序,以文件形式输出结果,在文件上显示一堆乱码乱码形式如下: 0.224 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 0.244 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO...
  • 运行程序,以文件形式输出结果,在文件上显示一堆乱码乱码形式如下: 0.224 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 0.244 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO 1.#QO...
  • 前前后后这是第三次看这份代码,第一次时候刚在学校学完C语言,只是下载到运行了一把,想看懂。结果看了一会。一脸懵逼的放弃。第二次拿起他,分析了一部分,只是简单的把每个三目运算符对号入座了一下。又放弃了。...

    都说西藏是一种病,对于一个c程序员来说,我觉得乱码大赛的经典之作也是一种病,不把他完全理解通透总是不自在。至少对于我来说,是这样的。前前后后这是第三次看这份代码,第一次时候刚在学校学完C语言,只是下载到运行了一把,想看懂。结果看了一会。一脸懵逼的放弃。第二次拿起他,分析了一部分,只是简单的把每个三目运算符对号入座了一下。又放弃了。怂在了他69K+次递归和2.3K+次输出。这次,再次拿起这份代码。也想检验一下自己的逻辑能力。切入正题,开始分析这令我叹为观止的递归。
    首先上第一道菜,这基本是没改动的原版,只是把其中一点不符合现在编程语法这类的东西做了修改,至于原版,网上多的是。

    #include <stdio.h>
    main(int t,int _,char* a)
    {
        return !0<t?t<3?main(-79,-13,a+main(-87,1-_, 
    main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13? 
    main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t, 
    "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") 
    :t<-50?_==*a?putchar(a[31]):main(-65,_,a+1):main((*a=='/')+t,_,a+1) 
    :0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a, 
    "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);
    }

    这副样子一眼看过去是很头疼的,我们先来简单处理一下,把其中的字符串取出来,顺便把A?B:C语句用缩进来整理下,对于短的直接放到一行,也容易看,对于长的,我采用下面这种格式:

        A? //每个字母表示一个表达式
        (
            B
        ):
        (
            C?
            (
                D
            ):
            ()
        )

    上代码

    #include <stdio.h> 
    char *p1 = "%s %d %d\n";
    char *p2 = "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,\
    /n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
    +k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!\
    /n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w\
    {%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',\
    #nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/";
    char *p3 = "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry";
    
    main(int t,int _,char* a)
    {
        return  1 < t ? //!0就是真值,即 1 ,这里为了不迷惑,直接写成1
                (
                    (
                        (t < 3?
                            main(-79,-13,a+main(-87,1-_, main(-86,0,a+1)+a)):1
                        ),
                        (t<_?
                            main(t+1,_,a):3),
                            main(-94,-27+t,a)
                    )&&
                    (   (
                            (t==2?
                                (
                                    _<13? main(2,_+1,p1):9
                                ):
                                16
                            )
                        )
                    )
                ):
                (
                    t<0 ?
                    (
                        t<-72?
                        (
                            main(_,t,p2)
                        ):
                        (
                            t<-50?
                            (
                                _==*a?putchar(a[31]):main(-65,_,a+1)
                            ):
                            main((*a=='/')+t,_,a+1)
                        )       
                    ):
                    (
                        0<t?
                            main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,p3),a+1)
                    )
                );
    }

    现在,至少看起来容易点了,但是实际的运行,也就是递归过程,还是一脸懵逼态。
    接下来开始一步步分析,看程序是怎么递归的。
    可以看到main带了三个参数,这是合法的,具体什么意思自行百度。这不是我们今天的重点。第一次进入时候不需要关注第三个参数,第一二个参数值分别是 1, 1. 开始判断

    1. 1 < 1不成立,跳到第33行,1 < 0 不成立,跳到第48行,0 < 1 成立,调用main(2,2,“%s”)
    2. 1 < 2成立, 跳到16行, 2 < 3 成立, 顺次进去调用 main(-86,0,a+1)
    3. 1 < -86不成立,跳到33行,-86 <0成立,跳到35行,-86 < -72成立,调用main(_,t,p2),即main(0,-86,p2)
    4. 1 < 0不成立,跳到33行, 0 < 0不成立,跳到48行,0 < 0不成立,判断*a == ‘/’,*a即p2[0],不成立,所以执行 || 后面的 main(-61,*a,p3) 接下来不具体说了直接说相应的行。这次递归跳到42行 后面的main,每次调用这个main p3加1,直到_==*a 即p2[0] == *a,也就是匹配到p3中第一个和p2[0]相等的字符,就输出这个字符后第31个字符
      至此,终于把第一个字符分析出来了。
      这里有一个重点地方,第一个是*a ==’/’ ||根据程序偷懒规则,当前面为真,或后面的不执行直接返回结果。所以仔细一分析可以看出,程序每次以“/”作为分割,顺次输出每段字符(哪些段后面说)。

      第二个就是 _==*a?putchar(a[31]):main(-65,_,a+1),当_==a[0]时候,程序会输出一个字符,简单分析一下不难发现,这里的两个字符引自的字符串是固定的,_恒为p2,此处的a[0]恒为p3,也就是说,输出字符来自p3,顺序来自p2,我们写个简单的程序,把p3字符按照p2规定的顺序输出,并且以 ‘/’ 分割开。
      第三,控制程序跳转循环的是第一第二个参数,控制程序输出的是第三个参数,记住这些,我们后面会用到
      这是我的写好的代码

      
      #include <stdio.h>
      
      
      #include <stdlib.h>
      
      
      #include <string.h>
      
      char *p2 = "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,\
      /n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
      +k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!\
      /n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w\
      {%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/";
      char *p3 = "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry";
      int main()
      {
      int i = 0,j  = 0,len = -1;
      len = strlen(p3);
      while(*(p2+i) != '\0')
      {
          if(*(p2+i) == '/')
          {
              printf("\n");
              i++;
              continue;
          }
          for(j = 0;j < len;j++)
          {
              if(p3[j] == *(p2+i))
              {
                  printf("%c",p3[31+j]);
                  break;
              }
          }
          i++;
      }
      return 0;
      }
      

      这里写图片描述
      结合上面两点重要信息,这里就是这段代码的27条 ‘短语’(为了描述方面,姑且这么叫吧)
      再来对比一下原程序的输出。短语都能吻合上,证明我们的路是对的。
      这里写图片描述
      现在就走出了一大步了,至少,我们把无厘头的递归循环,简化成27条短语组合,接下来分析他们怎么组合的。
      我们可以发现格式是这样的
      A1 B1 A2 C1
      A1 B2 A2 C2 C1
      A1 B3 A2 C3 C2 C1

      A1 B12 A2 C12 C11 …… C2 C1
      这里写图片描述

    5. 这里分析不在脑算了,直接单步调试看call Stack窗口,不难看出进入第17行第三个main控制输出了A1,第二个顺次输出了B1–B12,第三个输出了A2,第二个控制B的顺序,主要是用_,需要我们知道他的call by的参数值,第一第三固定值,可以略过了。 顺次执行完这三个main后,执行逗号表达式后面语句,
    6. 这里就是C系列的控制逻辑了。用第19行的main控制C的个数级顺次,20行的main调用输出字符,这里参数t和都用上了。用携带信息是输出几个C,t所标示输出C?(? in 1,2,3……12)
    7. 由于这里是与逻辑,前面部分永真语句,所以后面的必会执行。这里,也就是调用的总源头了t==2,第一次执行,我们手算分析那儿t是等于2的然后调用这里的。所以条件成立的,进去
      _ < 13 这句话也就是12次递归循环的起源了。当_大于等于13后,后面只是常数直接返回,然后一步步结束这个递归。
      这里写图片描述
      好了。至此,我三次接触这段代码,总算有了一个善了的结果。写出来纪念一下,也分享给喜欢这段程序的你们。有什么疑问评论区交流。一起学习。
    展开全文
  • C语言查询数据库返回结果中文乱码

    千次阅读 2016-08-18 13:06:32
    运行结果如图: 这下子就不会出现乱码了。我经过很多次实验发现,不管你项目字符集如何,还有第一个图片所示的字符集如何,只要加上那一行代码就不会乱码了。设置数据库字符集可以用这条语句set character_s

    ==> 学习汇总(持续更新)
    ==> 从零搭建后端基础设施系列(一)-- 背景介绍


    1.数据库字符集如图

    2.程序运行如图

    3.在mysql_init下面加上一行代码

    mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");
    

    运行结果如图:

    这下子就不会出现乱码了。我经过很多次实验发现,不管你项目字符集如何,还有第一个图片所示的字符集如何,只要加上那一行代码就不会乱码了。设置数据库字符集可以用这条语句set character_set_results=utf8;

    展开全文
  • </li><li>按照字符串数组顺序输出分割结果,如下示例所示:</li></ol> 初始字符串:”abc;edf;cde;xyz” 字符串1:”abc;” 字符串2:”edf;” 字符串2:”cde;” 字符串2:”xyz;” <p>#...
  • 题目: ; margin-right:0">(1) 定义一个包括:...但是运行结果中,原本有的前三个成员的名字和性别都是乱码,成绩学号什么的都没问题,哪出了问题搞不明白,求助!</p>
  • 这段代码在rhel6中用gcc编译通过,运行结果未定义,其中作的链表按number大小排序打印出来是没有排过序的结果,而且输入记录多了,其中某些项的number打印出来会由输入的值变成0或者一个莫名其妙的整数. vs2008中编译...
  • 关于使用编辑器Dev C++中文编码运行乱码的问题解决办法 最近准备学C语言,但是在选择编辑器要么太老,要么太大,最后选择了Dev C++,因为习惯输出中文在控制台,所以写的程序有中文说明,就在这时出现了很恶心很...

    在说解决办法之前,先卖一下关子,先说说自己的一些解决过程,最后再说解决办法(心急就直接看解决办法,最好还是从上到下看,看看是不是咱们都是这样折腾的)

    最近准备学C语言,但是在选择编辑器要么太老,要么太大,最后选择了Dev C++,因为习惯输出中文在控制台,所以写的程序有中文说明,就在这时出现了很恶心很无奈的问题,竟然乱码?

    首先第一个想到的是去管网看看是不是下载错了,结果下载的没问题。然后就是网上各种找答案,英语的看不懂,中文的都是一些源代码中写中文乱码问题,然后用文本文件打开,设置字符集为ANSI解决,完全和我的问题南辕北辙,隔了几天不准备用汉字写在源代码中了,可是管不住自己的习惯,又用汉字结果还不行,最后准备卸载这个软件的时候,我提醒自己最后一次查查解决办法,因为,我猜想任何软件设计者们连基本的功能不可能想不到,再说我选择这个软件的初衷就是版本新,更没有理由说,乱码问题是正常。最最后,在一个博客上看到因为系统原因可能导致的控制台问题,这时我才恍然大悟,运行程序后是控制台出的问题,而不是搜索源代码乱码问题(侧重点不一样,搜索关键字耽误了时间),我立刻像是看到救命的稻草,马上付诸行动,去Windows控制台设置,结果也是空欢喜一场,根本就没有那个选项,不过也没灰心,这倒是给我起到了抛砖引玉的作用,我想到了,Dev C++运行程序的控制台,去里面设置,最后解决了问题,虽然写的比较多,挺啰嗦的,但这也是一种查找问题的过程,解决办法的思路!呵呵。

    下面附上代码和解决前后的办法:

    源代码

    #include <stdio.h>
    
    int main(void){
    	
    	int year = 50;
    	int days;
    	days = year * 365;
    	
    	printf("年龄:%d\n一共活了:%d天\n", year, days);
    	//printf("year = %d\ndays = %d",year,days);
    
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述
    真是一堆什么东东,看着很烦人,也看不懂。
    现在解决一下,别关闭窗口,点击最顶部(不确定是叫菜单栏还是状态栏),选择默认值:
    在这里插入图片描述
    进去之后看到,原来在这坏事了,真是防不胜防
    在这里插入图片描述
    选择中文简体 GBK,点确定,如下:
    在这里插入图片描述
    再次运行程序,如下:
    在这里插入图片描述
    问题解决意不意外,惊不惊喜,开不开森,反正我是开心到家,哇哈哈哈哈。
    题外话:无论是做编程还是其他专业,做事不能浅尝辄止,也不能半途而废,还是那句老话,天下无难事,只怕有心人。

    展开全文
  • 下面的程序运行时为什么在文件中显示的age信息都是乱码? 如何改正? #include #include #define N 3 void main() { typedef struct student { char id[6]; char name[8]; int age; }STU; FILE *fp;...
  • 上述代码若用double声明,结果乱码 若使用float声明,则结果运行正确 之前有了解到float输出时是先转换为double型,再按%f输出 这里不清楚为什么单精度和双精度对结果会产生影响 编译器使用的是codeblocks
  • C语言 Unicode字符问题

    2019-07-29 20:26:21
    运行出现乱码 2、char 只能是字母,数字,字符 char字符串可以显示汉字,字符不可以,字符连在一起%c%c可以输出汉字 3、 打印出2,说明ch占两个字节 4、wprintf函数 通过%wc格式输出符 打印出一个汉字 ...

    1、使用多字节字符集

    在这里插入图片描述
    运行正常

    在这里插入图片描述

    把字符集改成Unicode。

    在这里插入图片描述

    运行出现乱码

    在这里插入图片描述

    2、char 只能是字母,数字,字符

    在这里插入图片描述

    char字符串可以显示汉字,字符不可以,字符连在一起%c%c可以输出汉字
    在这里插入图片描述

    3、 wchar占两个字节

    在这里插入图片描述

    4、wprintf函数 通过%wc格式输出符 打印出一个汉字

    在这里插入图片描述

    正常显示
    在这里插入图片描述

    5、wprintf函数 通过%wc格式输出符 打印出一个汉字
    在这里插入图片描述

    结果打印正常

    在这里插入图片描述

    展开全文
  • c语言程序实现对素数的判断

    万次阅读 多人点赞 2018-07-30 13:40:15
    题目: 输出1-N之间的所有素数 要求: 为了便于观察结果,在控制台里每一行输出5个数,并且这5个数之间以...第一次写出来的代码运行出来之后,有很多的乱码,最后还是请教了学长才改过来的 然后我又运行了一次...
  • 为什么下面程序运行结果与源代码一模一样: #include main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);} “printf(a,34,a,34)”这一句我没有想明白,百科上说“printf()函数的...
  • 计算机产生数字,人来猜,猜后给出类似0A0B的结果,规则源码中有。源码纯C语言,不含C++特定代码,未使用结构体,学过函数就可以看懂,适合初学者。本程序在中文VC++6.0中编译运行成功。在TC2.0中也可编译通过,只...
  • char* fun1() {  char *a;  a = "c语言的那些小坑";  return a; } char* fun2() {  char a[128];  sprintf(a, "c语言的那些小坑"...从运行结果来看 明显fun2挂了一堆乱码 fun1...
  • 问题解决,再次运行程序,得到如如下结果: ![图片说明](https://img-ask.csdn.net/upload/202010/17/1602890694_226596.png) 5. 疑问: 为什么初始程序中使用ptr1和ptr2两个指针记录fets()返回值的方法不能...
  • C语言也能干大事 全部板书

    热门讨论 2011-08-08 14:35:18
    在以前大家用TurboC写的程序一般也就是一个文件,但是用C语言写大程序的时候不可能把所有的代码都写在一个文件中,肯定要写很多文件。“工程(Project)”就是这些问题的一个集合。)在“工程名”中写入你为这个工程...
  • 附上运行结果图: 第一行是子函数中的num 第二行是子函数中的str 第三行是子函数中返回的地址 第四行是主函数中接收到的地址 第五行是主函数中的num 第六行是主函数中的str ![图片说明]...
  • 对mi变量使用了指针,但是仍旧出现了乱码 这是怎么回事,我应该怎么做? ``` #include ...运行结果是这样的,mi乱码 ![图片说明](https://img-ask.csdn.net/upload/202009/15/1600137168_695534.jpg)
  • 1、字符串在结尾的位置隐藏了一个\0的字符,但是这个\0并不会算在字符串的长度里。 2、\0是字符串的结束标志 为什么第一个数组输出的是abc,而第二个...当上面这张图运行程序时,第一个和第二个的结果会一样吗? 结
  • 运行结果是这样的,理想的结果应该是zhangsan 20<img alt="" height="409" src="https://img-ask.csdnimg.cn/upload/1623402177119.png" width="1456" /></p> 用的软件是VS2012 <p>ps:大佬们我是小白...
  • //等待用户输入,如果没有这句话程序就退出了,看不到运行结果 endwin();//程序退出,调用函数来恢复shell终端的显示,如果没有这句话,shell终端会字乱码,坏掉 keypad();//设置了可以从stdscr接收键盘的功能键...
  • 运行结果: ![图片说明](https://img-ask.csdn.net/upload/201708/30/1504072551_117469.png) 函数原型: unsigned fread(void *buffer,unsigned size,unsigned count,FILE *fp); 根据我的理解是从fp指向的文件首部...
  • vs2010报错是“Windows 已在 公交查询系统.exe 中触发一个断点。 其原因可能是堆被损坏,这说明 公交查询系统.exe 中或它所加载的任何 DLL 中有 Bug。...运行结果在附属的图片中 还请帮忙看看是什么地方出了错误..
  • 运行上述程序,会出现下面的结果。 这是怎么回事啊,%s对应字符串类型,应当没有错啊。 如果将输出语句改成cout,输出则会恢复正常。 printf只能输出C语言中的内置数据,string不是c语言内置数据。 更深入的来说:s这...
  • 问题和困扰      时常使用vscode写...乱码体现在两方面,一方面是打开文件,文件乱码,还有一种就是打印输出的结果乱码。     曾经尝试过将两种更改方式,一种是将vscode的编码方式更改为gbk,这种编码方式下C
  • 关于float有效位数为7位的研究

    千次阅读 2017-06-13 20:00:20
    运行结果上可以看出输出的结果中前七位是和原数据保持一致,从第八位开始就乱码了,有些人就会问了,这只是整数部分,那小数部分呢?不要着急,看下面。 结果中48965.94是和原数据的前七位是保持一致的,这样就...
  • ** 起因:大三做日本交换生期间在修一门C语言图像处理的编程课,在配套书籍的网站上下载了sample,但是由于我用的ubuntu18.04系统默认用utf-8编码,而文件源码是Shift_JIS...运行结果如下: 需要注意的几点: open打...
  • 数据结构-校园导游咨询系统…

    千次阅读 2013-04-25 17:36:50
    原文地址:数据结构-校园导游咨询系统(c语言版)作者:陶陶//本程序最好在VC++中运行,但这是C程序,在TC中,显示结果会出现乱码,TC不支持汉字 #include "string.h" #include "stdio.h" #include "malloc.h" #...
  • 单片机C语言的主程序,通常要用一个while(1)语句来让程序进入一个无限循环,目的是为了让程序一直保持在我们需要运行的情况下。 在程序末尾加一句“while(1);”,显示完全正常。不加程序会不稳定,有时候会在main()...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

c语言运行结果乱码

c语言 订阅