Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: linux c中printf输出格式问题

回复:
user: user-1
content: 引用 2 楼 jianwufeng26 的回复:[quote=引用 1 楼 shihengzhen101 的回复:] "%s %s\r\n" + 3 其实就变成了 "%s\r\n"  也就是原来的字符串向后移动三个字节 const char *s3 = ("hello world\r\n" +3);向后移动3个字节，是输出lo world这个我理解； "%s %s\r\n" + 3 其实就变成了 "%s\r\n" ？？？ 你这里说的向后移动三个字节也不能变成输出 hello吧？[/quote] 只接受一个参数就是输出hello

user: user-0
content: 引用 3 楼 user-2 的回复:+3 就是像后移动3个字符  "%s %s\r\n" 移动后变成了："%s\r\n"  此时只需要1个字符串了，而且取的是第一个   嗯嗯，看明白了，理解了。多谢！！！

user: user-2
content: "hello world\r\n" +3 也是向后移动3个字符  也就是"lo world\r\n" +3

user: user-2
content: +3 就是像后移动3个字符  "%s %s\r\n" 移动后变成了："%s\r\n"  此时只需要1个字符串了，而且取的是第一个

user: user-0
content: 引用 1 楼 shihengzhen101 的回复:"%s %s\r\n" + 3 其实就变成了 "%s\r\n"  也就是原来的字符串向后移动三个字节 const char *s3 = ("hello world\r\n" +3);向后移动3个字节，是输出lo world这个我理解； "%s %s\r\n" + 3 其实就变成了 "%s\r\n" ？？？ 你这里说的向后移动三个字节也不能变成输出 hello吧？

user: user-1
content: "%s %s\r\n" + 3 其实就变成了 "%s\r\n"  也就是原来的字符串向后移动三个字节
user-0 提问: 如果取一个有符号16位数的低12位？

回复:
user: user-0
content: 我表达错了，一会修改

user: user-1
content: short int x = -0x3123, y =  (short)(x << 4) >> 4;

user: user-2
content: -3123低12位不是-123，要想获取-123建议使用%

user: user-3
content: 如果是取十进制数最后三位，那么模1000就行了： 	short temp = -3123; 	short temp2 = temp % 1000;

user: user-3
content: 我觉得你表述有问题，如果你想取低12位，那么是我之前发的那个写法，但得不到-123； 如果你的意思是取一个十进制数的第三位，则是另外一回事，不是所谓取低12位，请认清概念。

user: user-3
content: short temp = -3123; 	short temp2 = temp & 0xfff; 不过，怎么得到-123呢，不懂
user-0 提问: Linux下c编程

回复:
user: user-1
content: #!/bin/bash iNum1=$1 shift iNum2=$2 if [ $Num1 -lt $Num2 ] then      echo "The big one is " $iNum2 else if [$Num1 -gt $Num2] then     echo "The big one is " $iNum1 else     echo "The two number is equal" fi fi

user: user-2
content: 《Linux C编程一站式学习》

user: user-2
content: 《高级Bash脚本编程指南--中文版》

user: user-3
content: 引用 7 楼 Jingjingjng0504 的回复:谢谢大家，已经给搞定了，确实是我输入不正确那么shell编程该怎么弄呀？ 就各种命令呗，常用的不过就是移动路径，注册权限，运行，难道还需要在shell里面搞啥？ 我接触有限，只是做了linux下的程序之后拷贝到设备运行罢了，不知你说的shell编程什么意思。

user: user-0
content: 谢谢大家，已经给搞定了，确实是我输入不正确那么shell编程该怎么弄呀？

user: user-4
content: scanf输入是格式化输入，代码中输入数据中间需要有一个逗号，但是你的输入没有加逗号。所以会出现问题。

user: user-0
content: 引用 3 楼 phenix2009 的回复:程序跑起来没什么问题，你输入两个数时候，是根据格式输入的吗，比如输入4和5格式为：4,5。是的哦 ，怪我自己粗心了，还一直没有看出来哈哈哈哈，谢谢了~

user: user-3
content: 引用 1 楼 Jingjingjng0504 的回复:这就是出现问题的截图，希望大家帮我看看该怎么弄 你没按照格式输入，所以两个数没能正确的获取到，应该输入：2,6

user: user-3
content: 程序跑起来没什么问题，你输入两个数时候，是根据格式输入的吗，比如输入4和5格式为：4,5。

user: user-5
content: 怎么没输入逗号呢

user: user-0
content: 这就是出现问题的截图，希望大家帮我看看该怎么弄
user-0 提问: 涂色问题，怎么做？

回复:
user: user-0
content: 引用 4 楼 hdt 的回复:其实，就算离散学的不好，这种问题百度一下，就应该知道了https://baike.baidu.com/item/%E5%9B%BE%E7%9D%80%E8%89%B2%E9%97%AE%E9%A2%98/8928655?fr=aladdin 就你学的好，看了你给别人的评论，都是贬低别人的话，就以为自己很牛 让你说，你又说不出所以然，rubbish。

user: user-0
content: 引用 4 楼 hdt 的回复:其实，就算离散学的不好，这种问题百度一下，就应该知道了https://baike.baidu.com/item/%E5%9B%BE%E7%9D%80%E8%89%B2%E9%97%AE%E9%A2%98/8928655?fr=aladdin 我知道这个 但是请你给我说说 这两个的联系  说的具体点 别这么含糊 我笨

user: user-1
content: 其实，就算离散学的不好，这种问题百度一下，就应该知道了https://baike.baidu.com/item/%E5%9B%BE%E7%9D%80%E8%89%B2%E9%97%AE%E9%A2%98/8928655?fr=aladdin

user: user-1
content: 引用 2 楼 zhagoodwell 的回复:[quote=引用 1 楼 真相重于对错的回复:]离散数学，了解图论 ？？？了解离散数学的哪里？ 图论～二分图，最短路径，出度入度？回路？环？……哪块的内容？说一下[/quote] 看书要仔细，离散里的图论专门有讲，着色问题

user: user-0
content: 引用 1 楼 真相重于对错的回复:离散数学，了解图论 ？？？了解离散数学的哪里？ 图论～二分图，最短路径，出度入度？回路？环？……哪块的内容？说一下

user: user-1
content: 离散数学，了解图论
user-0 提问: 关于C语言

回复:
user: user-1
content: 引用 1 楼 weixin_42145190的回复:你这。。是数学问题吧。num=960不是表示960夸脱水吗，960×960才表示克啊 950，手滑，不好意思

user: user-1
content: 你这。。是数学问题吧。num=960不是表示960夸脱水吗，960×960才表示克啊

user: user-2
content: 1夸脱水约有950克，num克水有num * rate1克  一个水分子有rate2克，所有水分子有num * rate1克  所以水分子数= num * rate1 / rate2  如果还理解不了，建议看下小数数学
user-0 提问: printf中的\n与\r

回复:
user: user-1
content: 你说的是早期的电传打字机了，现在不同系统对换行要求并不相同了，UINX只需要\n，MAC只需要\r，WIN下需要\r\n，但控制台只需要\n就行了

user: user-2
content: 好像 在windows下一个enter 把两个人的活都干了

user: user-0
content: 引用 1 楼 user-2 的回复:好像 在windows下一个enter 把两个人的活都干了  按下enter同时录入\n和\r我可以理解，但是手动输入'\n'出来的却是\n+\r的效果，这个就有点诡异了……
user-0 提问: 本人菜鸟遇到一个c语言题目，求大神解答

回复:
user: user-1
content: 建议自己先编译运行一下，然后再找原因。 建议自己多动手，编程就是要动手操作的。 很明显选D，原因是指针在向后移动，%s输出是遇到'\0'结束。

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-3
content: ---我刚刚测试了改为%c\n 发现是这样。。。  对不起 。。。不过这题目意思是选D

user: user-3
content: 抱歉:是 printf("%c\n",pcPtr);

user: user-3
content: 如果输出语句是\n而不是/n 选D 如果改为 printf("%c"\n,pcPtr);  这样就是 A B C D E 了

user: user-4
content: 引用 4 楼 Q__ing 的回复:printf("%s/n", pcPtr);这条语句错了哦，应该是printf("%s\n", pcPtr); 答案是选D 对于过程我是这样子理解的 首先要知道for语句是for（循环初始化；循环条件；执行循环体一次后的某些处理） 题中应该是定义一个字符型数组  char   acArr[]= "ABCDE";    pcPtr = acArr令pcPtr（指向数组的第一个地址）;pcPtr < acArr + 5（用来限制行数，个人认为在这题中可以认为是语句循环次数）; pcPtr++（表示循环执行一次后指针往后以一位，就是从第一位移到第二位，，一直有效直到循环结束）)         printf("%s/n", pcPtr);表示输出数组，而输出的数组是从指针指向开始输出到最后 然后结束循环 答案图片发不出去，为以下格式 ABCDE BCDE CDE DE E你可以在软件中输入一遍，然后稍微改一下限制条件，有助于理解题目，对学习也更有帮助哦     然后定义指针   *pcPtr;

user: user-4
content: printf("%s/n", pcPtr);这条语句错了哦，应该是printf("%s\n", pcPtr); 答案是选D 对于过程我是这样子理解的 首先要知道for语句是for（循环初始化；循环条件；执行循环体一次后的某些处理） 题中应该是定义一个字符型数组  char   acArr[]= "ABCDE";     然后定义指针   *pcPtr;    pcPtr = acArr令pcPtr（指向数组的第一个地址）;pcPtr < acArr + 5（用来限制行数，个人认为在这题中可以认为是语句循环次数）; pcPtr++（表示循环执行一次后指针往后以一位，就是从第一位移到第二位，，一直有效直到循环结束）)         printf("%s/n", pcPtr);表示输出数组，而输出的数组是从指针指向开始输出到最后 然后结束循环 答案图片发不出去，为以下格式 ABCDE BCDE CDE DE E
user-0 提问: makefile编译错误

回复:
user: user-1
content: 建议手动去执行mkdir -p xxxx，如果能够成功，建议找一下原因。如果不能成功，应该会给出详细的错误信息。

user: user-2
content: 很明显啊，$(PACKSODIR)为空啊，看这个Makefile的写法，该值可能是要从外面的Makefile（或执行make时）传进来的啊
user-0 提问: c语言用链表写酒店管理系统

回复:
user: user-1
content: 百度搜相关关键字。

user: user-2
content: 1.房间一条链，主要信息有房间类型，入住状态等；客人一条链，主要信息有客人ID、类型（要求），积分等 2. 客人信息录入时在客人链上创建节点，如已有节点则不创建 3. 入住时在房间链上寻找满足要求的节点，退房时删除节点，在客人链上上刷新积分 大致如此。
user-0 提问: C语音的一些疑问

回复:
user: user-1
content: 题目5是年龄，这个年龄可能是要包含月份。比如1988年5月出生，那么1989年1月就是7/12年。因此是浮点数也是可以理解的。 题目6，rate2是每个水分子的质量，num * rate1得到的是总质量，所以需要除以rate2

user: user-2
content: 1、不是天数，而是年数，也可以是浮点数，比如1.5表示一年半  2、num * rate1是水的总质量，一个水分子有rate2克，那么有多少个水分子自然除以rate2就可以得到

user: user-3
content: 1，整数能表达的范围有限，容易溢出。不过以long类型最大范围到9223372036854775807而言，其实也足以表达一个人的年龄秒数了，你的怀疑有道理。 2，因为要算的是分子数啊，第一段计算只得出质量（克），除以rate2才是分子数。
user-0 提问: keil中C编写的问题，求帮助，程序不难

回复:
user: user-1
content: 引用 4 楼 LIYAN2012013931 的回复:少了pic.h文件 应该是路径不对～

user: user-2
content: 少了pic.h文件

user: user-3
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-4
content: 每一个错误以及错误点都已经说的明明白白了，还叫编译器怎么告诉你！

user: user-5
content: 错误实在太明显了，把你代码的第一行拷到文本编辑器（UE、notepad++）等一看就知道了，#是全角，i nclude中间有空格，你这代码是自己敲的吗
user-0 提问: c语言二叉树

回复:
user: user-0
content: 1) CreateBiTree( )：根据先序遍历序列生成一棵二叉树 (2) Depth( )：求此二叉树的深度 (3) CountLeaf( )：统计该二叉树中叶子结点的个数 (4) InOrderTraverse( )：中序遍历二叉树 (5) PostOrderTraverse( )：后序遍历二叉树

user: user-1
content: 怎么你注释都是乱码，看不到的
user-0 提问: 运行c语言程序时，单补调试出现unhandle exception in exe，程序出现不明原因的错误。

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: #include<stdio.h> #include<stdlib.h>  void ReadByte(FILE *fp, unsigned char *data, int len); void AllocateByte(unsigned char **ptr, int len); void ExtractPhase(void *in_data,int xsize, int ysize);  //void main() int main() {     int   xsize=512,ysize=512;     unsigned  int            len=xsize*ysize;     FILE           *fp;     void           *in_data=NULL;     //if(fp = fopen("D:\\UserData\\ifsar.512x512.phase","r")==NULL)     if((fp = fopen("D:\\UserData\\ifsar.512x512.phase","r"))==NULL)     {         printf("未找到文件");         exit(1);     }     AllocateByte((unsigned char **)(&in_data), len);     ReadByte(fp, (unsigned char *)in_data, len);     ExtractPhase( in_data,  xsize, ysize);     free(in_data);     //fclose(fp);    /*重复关闭*/ } void AllocateByte(unsigned char **ptr, int len) {     int i;     *ptr = (unsigned char *)  malloc (len*sizeof(unsigned char));     if ((*ptr)==NULL)     {         //printf("打开文件错误");         printf("申请空间错误");         exit(1);     }     else         printf("ok");     for (i=0; i<len; i++)         ptr[i] = 0; } void ReadByte(FILE *fp, unsigned char *data, int len) {     int i;     if (len!= fread(data, sizeof(unsigned char), len, fp))         printf("shibai");     else         printf("读取文件zhenfque");     fclose(fp); } void ExtractPhase(void *in_data,int xsize, int ysize) {     unsigned char  *quantized_phase = in_data;     //float  phase[10000000];     //float  phase[10000000];   /*局部变量申请的空间太大，可能会导致栈溢出*/     float scale;     int j;     scale = 1.0/256.0;     for (j=0; j<xsize*ysize; j++)     {         phase[j] = quantized_phase[j]*scale;     }  }  问题挺多，建议对比查看一下。
user-0 提问: 新手小白求助，帮分析下哪里有问题

回复:
user: user-1
content: 一次性得到1--N之间的所有质数 可以用埃氏筛法   复杂度O(sqrt(N)loglogN) 代码: # include <stdio.h> # include <math.h> # define N 10000 char A[N]; int main() {     int i,j,Q;     for(A[0]=A[1]=1,Q=sqrt(N)+1,i=2;i<Q;i++) 		if(!A[i])for(j=i*i;j<N;j+=i) 			A[j]=1;//经过筛法后 如果i是质数则S[i]=0 否则为1 		printf("[2,%d)的质数:\n",N);     for(i=0;i<N;i++)     if(!A[i])printf("%d ",i);     return 0; }  希望能帮到你

user: user-1

user: user-0
content: 哦，我是个智障，我绝对是个瓜皮，谢谢各位，已经解决了，判断没写双等号

user: user-0
content: 问题是出在循环内，大部分都可以求出来，不知道为什么有一些不行

user: user-0
content: 大部分奇数都可以，还有一些就不行了，像99和11199就不行了，不知道为什么
user-0 提问: C语言对指针常量中的字符进行冒泡排序

回复:
user: user-1
content: 不要纠结各种常量了，这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢！

user: user-1
content: 引用 7 楼 wanggui2015 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！   赵老师的回答总是另辟蹊径呀。。[/quote]

user: user-1
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-2
content: 字符串常量是不能修改的，只能读。冒泡排序就会涉及到交换两个字符，交换字符就会涉及到内存的写操作。所以若冒泡就可能出现段错误。

user: user-3
content: 引用 6 楼 zhao4zhong1 的回复:#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！   赵老师的回答总是另辟蹊径呀。。

user: user-4
content: {*temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=*temp;} /*冒泡交换*/  ↑改用这个试一下吧   下面是完整的代码 #include <stdio.h>  int main()  {  int n,i,j,*temp,*p,num;  printf( "input sum of the numbers\n ");  scanf( "%d ",&n);  num=n;  printf( "input numbers n <%d ",num);  printf( "\n ");  for (i=0;i <n;i++) scanf( "%d ",p+i);  getchar();  for (i=0;i <n;i++)  for (j=0;j <n-i;j++)  if (*(p+j+1) <*(p+j))  {*temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=*temp;} /*冒泡交换*/  printf( "the sort:\n ");  for (i=0;i <n;i++) printf( " %d ",*(p+i));  printf( "\n ");  getchar(); return 0; }

user: user-0
content: 改掉还是用数组吧， char str[]="sgfdsagreqw" char *p = &str;

user: user-5
content: 常量改动会core dump的

user: user-6
content: 字符串常量不能更改吧
user-0 提问: 输出结果9这类平方数都是素数

回复:
user: user-1
content: 问题： 1.使用到平方根的函数时要用包含math.h的头文件。 2.flag定义时没有赋初值，会导致错误。 3.判断n能否被2到根号n的数整除时，break语句应该放在if的复合语句中，否则执行一次循环便跳出了循环。 正确的代码如下：

user: user-2
content: 另外 有个一次性求出1--N之间所有的数的埃氏筛法 复杂度O(sqrt(N)*log(logN)) 代码: # include <stdio.h>   # include <math.h>   # define N 10000   char A[N];    int main()   {       int i,j,Q;       for(A[0]=A[1]=1,Q=sqrt(N)+1,i=2;i<Q;i++) 		if(!A[i])for(j=i*i;j<N;j+=i) 			A[j]=1;//经过筛法后 如果i是质数则S[i]=0 否则为1   		printf("[2,%d)的质数:\n",N);     for(i=0;i<N;i++)       if(!A[i])printf("%d ",i);       return 0;   }

user: user-2
content: #include"stdio.h" # include <math.h> int main() {     int i,n,flag,j;     //printf("please enter a number:\n");    // scanf("%d",&n);     for(j=100,n=2;n<j;n++)     {     for(i=2,flag=0; i<=sqrt(n); i++)     {         if(n%i==0)         {             flag=1;           break;         }     }    if(flag)         printf("%d不是素数\n",n);     else         printf("%d是素数\n",n);     }     return 0; }

user: user-3
content: flag 应初始化为 0
user-0 提问: [C语言]新手跪求帮忙分析代码

回复:
user: user-1
content: 引用 10 楼 cheese143 的回复:[quote=引用 8 楼 wanggui2015 的回复:] 啊，不好意思，忘了你是C哈。  stack *m = (stack*)malloc(sizeof(stack));  这样。 谢谢！我想问一下为什么要这样分配空间呢？ 为什么不能直接stack *m[/quote] 因为stack* m;只是一个stack结构体的指针，没有实际的对象实例，上面那句话就是给stack分配对象空间。还有你malloc的内存最后不用了要free掉额。 你也可以stack m;直接定义对象实例，然后initstack(&m);传对象的地址进去初始化，这样也可以的。

user: user-0
content: 引用 8 楼 wanggui2015 的回复:啊，不好意思，忘了你是C哈。  stack *m = (stack*)malloc(sizeof(stack));  这样。 谢谢！我想问一下为什么要这样分配空间呢？ 为什么不能直接stack *m

user: user-2
content: 引用 4 楼 cheese143的回复:[quote=引用 1 楼 user-2 的回复:] initstack函数参数是按值传递的，也就是你函数形参只是实参的一个复制品，你在函数中赋值malloc得到的值不会影响到主函数中的m，主函数中的m仍然是没有初始的 不太懂，传入的参数不是指针形式的吗，为什么没有改变呢 如果initstack函数有问题那是不是push函数也不对呀 pop函数我发现问题在哪里了  还有就是改变这三个之后，仍旧没办法输出  不好意思我真滴很菜[/quote] 函数参数类型要改，如果你要修改指针，你需要传入指针的指针  因为指针本身是复制的，虽然他们都指向同一块内存，你如果改指针指向的内存，那没问题，如果改指针本身，那你的改动只针对复制品的指针  pop函数第二个参数也要换成指针的形式  你自己再体会一下，改了如果还是不行，把你改的代码发出来

user: user-1
content: 啊，不好意思，忘了你是C哈。  stack *m = (stack*)malloc(sizeof(stack));  这样。

user: user-0
content: 引用 6 楼 wanggui2015 的回复:[quote=引用 5 楼 cheese143 的回复:] [quote=引用 3 楼 wanggui2015 的回复:] 28行： void pop(stack *l,char* e){          改成传指针，char* e 32行： *e=l->base[l->top]; 37行：stack *m=new stack;   要分配空间 52行： pop(m,&ch); 传指针 37行分配空间不是已经在下面39行的initstack函数中做了吗 pop函数错误感谢指正[/quote] 你的initstack函数里面只是给结构体里面的base分配空间，你没有给你的整个结构体分配空间啊。[/quote]  C里面貌似不可以这样做呀，我试了一下提示出错。

user: user-1
content: 引用 5 楼 cheese143 的回复:[quote=引用 3 楼 wanggui2015 的回复:] 28行： void pop(stack *l,char* e){          改成传指针，char* e 32行： *e=l->base[l->top]; 37行：stack *m=new stack;   要分配空间 52行： pop(m,&ch); 传指针 37行分配空间不是已经在下面39行的initstack函数中做了吗 pop函数错误感谢指正[/quote] 你的initstack函数里面只是给结构体里面的base分配空间，你没有给你的整个结构体分配空间啊。

user: user-0
content: 引用 3 楼 wanggui2015 的回复:28行： void pop(stack *l,char* e){          改成传指针，char* e 32行： *e=l->base[l->top]; 37行：stack *m=new stack;   要分配空间 52行： pop(m,&ch); 传指针 37行分配空间不是已经在下面39行的initstack函数中做了吗 pop函数错误感谢指正

user: user-0
content: 引用 1 楼 user-2 的回复:initstack函数参数是按值传递的，也就是你函数形参只是实参的一个复制品，你在函数中赋值malloc得到的值不会影响到主函数中的m，主函数中的m仍然是没有初始的 不太懂，传入的参数不是指针形式的吗，为什么没有改变呢 如果initstack函数有问题那是不是push函数也不对呀 pop函数我发现问题在哪里了  还有就是改变这三个之后，仍旧没办法输出  不好意思我真滴很菜

user: user-1
content: 28行： void pop(stack *l,char* e){          改成传指针，char* e 32行： *e=l->base[l->top]; 37行：stack *m=new stack;   要分配空间 52行： pop(m,&ch); 传指针

user: user-2
content: 同理，pop的第二个参数也是这样

user: user-2
content: initstack函数参数是按值传递的，也就是你函数形参只是实参的一个复制品，你在函数中赋值malloc得到的值不会影响到主函数中的m，主函数中的m仍然是没有初始的
user-0 提问: 大神求解！写的这个输入整数逆向输出程序，能实现10位以内的数字逆序输出，但是输出10位以上数字输出结果就乱八七糟，谁能解释下原因啊？？

回复:
user: user-1
content: 输入的数值已经超出了int类型的表示范围。建议查一下int，unsigned int， unsigned long long类型数据表示的数值范围。

user: user-2
content: 在现实世界中，除时间和空间可能是无限的以外，其它任何事物都是有限的。  不然你逆向一个16TB长的整数试试？！

user: user-3
content: 输入的数值已经超出了int类型的表示范围。建议查一下int，unsigned int， unsigned long long类型数据表示的数值范围

user: user-4
content: int和long范围是一样的，换成long long

user: user-5
content: 各种类型的变量放到内存里面都是二进制，int类型一般为16位或32位，由编译器决定，通常都为32位，而int类型是默认带符号的，就是可以表示负数，所以最高位的二进制位是符号位，所以32位的有符号int型所能表示的范围就是 -2^31 ~ 2^31-1，即 -2147483648 ~ +2147483647 。 long类型也是32位，表示范围跟int一样。 long long类型是64位，可表示范围就是 -2^63 ~ 2^63-1，即 -9223372036854775808 ~ +9223372036854775807。

user: user-6
content: 引用 4 楼 ZhnagJ1an的回复:引用 3 楼 zhagoodwell 的回复:换成long long 的话也只是范围大了点，大约18--19位的样子，如果真要逆输出～用字符串呗～那原因到底是什么呢？不是范围的原因？楼上那个大哥说超过整形所能表示的大小，我不怎么明白。我初学，目的也不是想实现逆输出，就是想弄清楚其中的原因。 拿10进制为例 一个64位的10进制数最多能表示的数的位数就是64位10进制数 在计算机里每个二进制位不是0就是1 而一个字节有8位，一个int占4个字节所以共32位 因此unsigned int最多就能表示32位的2进制数～如果化为我们平时熟悉的10进制数，位数将会更少。 而long long是8个字节，共64位二进制数，只是表示的数的范围大了点

user: user-0
content: 引用 3 楼 zhagoodwell 的回复:换成long long 的话也只是范围大了点，大约18--19位的样子，如果真要逆输出～用字符串呗～那原因到底是什么呢？不是范围的原因？楼上那个大哥说超过整形所能表示的大小，我不怎么明白。我初学，目的也不是想实现逆输出，就是想弄清楚其中的原因。

user: user-0
content: 引用 5 楼 zhagoodwell的回复:引用 4 楼 ZhnagJ1an的回复:[quote=引用 3 楼 zhagoodwell 的回复:] 换成long long 的话也只是范围大了点，大约18--19位的样子，如果真要逆输出～用字符串呗～那原因到底是什么呢？不是范围的原因？楼上那个大哥说超过整形所能表示的大小，我不怎么明白。我初学，目的也不是想实现逆输出，就是想弄清楚其中的原因。 拿10进制为例 一个64位的10进制数最多能表示的数的位数就是64位10进制数 在计算机里每个二进制位不是0就是1 而一个字节有8位，一个int占4个字节所以共32位 因此unsigned int最多就能表示32位的2进制数～如果化为我们平时熟悉的10进制数，位数将会更少。 而long long是8个字节，共64位二进制数，只是表示的数的范围大了点[/quote] 多谢！

user: user-6
content: 换成long long 的话也只是范围大了点，大约18--19位的样子，如果真要逆输出～用字符串呗～

user: user-7
content: 超过整形所能表示大小了

user: user-0
content: 引用 1 楼 真相重于对错的回复:超过整形所能表示大小了 能具体点吗？整型的所能表示的不能超过10位吗？我换成long int也不行呀？
user-0 提问: 求助，看看我这道C语言题目哪儿错了

回复:
user: user-1
content: 其实你只是scanf后面少了一个&，下次记得要细心点，希望对你有帮助

user: user-2
content: scanf("%d",a[i]);，使用scanf()函数时，缺少取地址运算符&，&是地址运算符，分别获得这变量的内存地址。 正确代码应该是#include<stdio.h> void sort(int a[],int n) { int i,j, t; for(j=0;j<n-1;j++) { for(i=0;i<n-j-1;i++) { if(a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } } void main() { int i; int s[8]; for(i=0;i<8;i++){ scanf("%d",&s[i]); } sort(s,8); printf("The sort is:\n"); for(i=0;i<8;i++) printf("%d\n",s[i]); }  希望对您有帮助，麻烦给个赞

user: user-3
content: 1楼正解 &a[i]

user: user-4
content: for(i=0;i<=9;i++) scanf("%d", &a[i]); scanf中缺少& 或者这样写也可以 for(i=0;i<=9;i++) scanf("%d",a + i); 总之，第二个参数是地址，而非数值。

user: user-5
content: 正如1楼所说，scanf的第二个参数必须是地址，a[i]并不是地址，&a[i]才是地址。 请参考《scanf()、gets()和getline()读取输入》https://blog.csdn.net/hou09tian/article/details/70045040 希望能够帮到你

user: user-0
content: 引用 1 楼 自信男孩的回复:for(i=0;i<=9;i++) scanf("%d", &a[i]); scanf中缺少& 或者这样写也可以 for(i=0;i<=9;i++) scanf("%d",a + i); 总之，第二个参数是地址，而非数值。 大叔可以留个联系方式吗？
user-0 提问: 提问C prime plus 第6版第3章问题

回复:
user: user-1
content: 输入的夸克数的值的执行在总共水分子的表达示之后，输入的值无法代入表达式中进行计算。 把计算总共水分子表达式写在输入语句的下面。

user: user-2
content: # include <stdio.h>  int main(void) {     long double m_H2O = 3.156E-23;                  //给出每克水的分子数     float number_H2O_quart;                               //声明所要输入的夸脱数     long double number_H2O_total;                     //声明总共水的分子数     number_H2O_total = 950*number_H2O_quart/m_H2O;                      //总共水的分子数的表达式     //printf("%f\n",950/m_H2O);     printf("There are %Le H2O molecule in 2 quart water\n",950*2.0/m_H2O);                       //若共有2夸脱水，则所拥有的水分子数     printf("Please enter quart of water: ");     scanf("%f",&number_H2O_quart);                    //提示用户输入水的夸脱数（2夸脱)     //printf("%le",number_H2O_total);     number_H2O_total = 950 * number_H2O_quart / m_H2O;     printf("\nThe number of total H2O molecule  is %Le",number_H2O_total/*950*number_H2O_quart/m_H2O*/);     return 0; } 参考一下吧  在输出总的水分子数之前，并没有计算即缺少这句： number_H2O_total = 950 * number_H2O_quart / m_H2O;

user: user-3
content: float number_H2O_quart;                               //声明所要输入的夸脱数 long double number_H2O_total;                     //声明总共水的分子数 number_H2O_total = 950*number_H2O_quart/m_H2O;                      //总共水的分子数的表达式  1：没初始化，2：又没赋值。谁知道计算出来是什么数
user-0 提问: 字符串数组里内容消失了！求大神抱抱T_T

回复:
user: user-1
content: function退出后 temp_name 被破坏，指向他的 names[stu_name]指针也无意义了

user: user-2
content: 内容已经被覆盖了

user: user-3
content: 你的temp_name 每次都来新的。。。那个 names[stu_name]=temp_name  只是指向了 temp_name 并没有存上 你下一次再选择1 temp_name的内容就被覆盖掉了 。。。。 直接定义 names[][]为二维字符数组 ，录入的时候 也不用 temp_name 了 直接 scanf("%s",names[stu_name]); 另外 代码 可以直接贴上  如果是图片  也不好看出问题。。。 ，如果用一维字符指针数组

user: user-4
content: char * names[100] 改为 char names[100][32] 试试看
user-0 提问: usb通信接口报错

回复:
user: user-1
content: 参看下:https://bbs.csdn.net/topics/390479032

user: user-0
content: 引用 1 楼 user-1 的回复:1784 的解释是：The supplied user buffer is not valid for the requested operation.  https://msdn.microsoft.com/en-us/library/ms681386(v=vs.85).aspx  The size of the DeviceInterfaceDetailData buffer. The buffer must be at least (offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA, DevicePath) + sizeof(TCHAR)) bytes, to contain the fixed part of the structure and a single NULL to terminate an empty MULTI_SZ string.  https://msdn.microsoft.com/zh-cn/ff551120  devDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(length); memset(devDetail, 0, length); devDetail->cbSize = sizeof(PSP_DEVICE_INTERFACE_DETAIL_DATA); 已经设置大小了

user: user-1
content: 1784 的解释是：The supplied user buffer is not valid for the requested operation.  https://msdn.microsoft.com/en-us/library/ms681386(v=vs.85).aspx  The size of the DeviceInterfaceDetailData buffer. The buffer must be at least (offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA, DevicePath) + sizeof(TCHAR)) bytes, to contain the fixed part of the structure and a single NULL to terminate an empty MULTI_SZ string.  https://msdn.microsoft.com/zh-cn/ff551120
user-0 提问: 报错..不知道是什么原因

回复:
user: user-1
content: 检查q_strGameBack[g_arrSnake[i][0]][g_arrSnake[i][1]]的类型，类型应该是char，建议用&q_strGameBack[g_arrSnake[i][0]][g_arrSnake[i][1]]； 或者其他方式，保证strncpy的第一个参数是char *类型。

user: user-2
content: 1：strncpy类型需要char* 2：关闭安全开发生命周期 参考：https://blog.csdn.net/duke56/article/details/52403458

user: user-0
content: 引用 1 楼 phenix2009 的回复:改成这样：  void DrawSnake() { 	int i = 0; 	for (i = 0; g_arrSnake[i][0] != 0; i++) 	{ 		strncpy(q_strGameBack[g_arrSnake[i][0]], "*", 2); 	} }  这样写画不出来东西。。。。

user: user-3
content: 改成这样：  void DrawSnake() { 	int i = 0; 	for (i = 0; g_arrSnake[i][0] != 0; i++) 	{ 		strncpy(q_strGameBack[g_arrSnake[i][0]], "*", 2); 	} }
user-0 提问: 咨询libmodbus相关问题

回复:
user: user-1
content: 学会使用find、whereis命令。

user: user-2
content: 我之前linux开发时候，头文件什么的都放一块儿的，库放在lib目录下，是linux工程师设置好的位置，没出过问题。

user: user-2
content: 头文件和.c文件放一个目录试试
user-0 提问: 求大佬看看为什么结果是wrong answer

回复:
user: user-0
content: 引用 1 楼 user-1的回复:leap=(year%4==0&&year%100!=0||year%4==0); 这边的逻辑判断并不是很清晰， 不妨改成leap=(year%400==0||(year%100!=0&&year%4==0)) 谢谢谢谢大神

user: user-1
content: leap=(year%4==0&&year%100!=0||year%4==0); 这边的逻辑判断并不是很清晰， 不妨改成leap=(year%400==0||(year%100!=0&&year%4==0))
user-0 提问: vs2015为什么我打不开我自己建的头文件？

回复:
user: user-1
content: #include "head.h" 一般是<>里存放的是系统头文件或库的头文件。自定义的头文件，建议使用""。 另外，""头文件要使用真确的路径。

user: user-2
content: 你要搞清楚#include <>和#include ""的含义

user: user-3
content: #include "head.h"  用双引号
user-0 提问: 入门之问

回复:
user: user-1
content: cfree吧，操作简单

user: user-2
content: 我开始用的cfree很简单，如果准备长期用简易vs

user: user-3
content: 其实编译软件的话Dev c++会比较简单用，一下就会了。学C语言可以用老九学堂的视频

user: user-4
content: 《彻底解决兼容问题 Windows 7 安装 Visual C++ 6.0 (VC6) 全程图解》 《Windows 7下VC6打开文件报错导致其崩溃的解决办法 》 其实个人觉得VC++6.0还是挺不错的，用起来也方便。而且现在网上的很多代码都是基于VC++6.0的

user: user-5
content: 还是别用 vc 吧很多后来更新的标准都不支持

user: user-6
content: 建议你使用dev c++，这个非常适合新手使用，在这里下载https://pc.qq.com/detail/16/detail_163136.html

user: user-7
content: C语言快速入门 http://cs.glimix.com

user: user-8
content: 使用VS可以，但是建议文件定义为.c文件，直接创建的是cpp

user: user-9
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-6
content: 新手的话强烈推荐用dev c++，VC6.0已经是非常老了，不兼容新版Windows

user: user-10
content: C语言的话推荐看看这个教程： https://cloud.tencent.com/developer/doc/1023

user: user-11
content: 引用 2 楼 cfjtaishan 的回复:建议使用更高版本的开发环境，比如vs 引用 4 楼 zhao4zhong1 的回复:VC6EN http://pan.baidu.com/s/1jImOtAe Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt 用啊哈C 推荐新手

user: user-12
content: 最好用VS2017

user: user-13
content: 感觉新手可以用dev c++，不用创建工程，用着也简单，等到熟悉了后可以用vs这些。

user: user-14
content: 还是下载一个vs吧，百度搜一堆，找绿色版本的，不用配置什么乱七八糟的东东，都不用下一步安装，直接使用

user: user-7
content: 推荐看看 cs.glimix.com上的教程

user: user-9
content: VC6EN http://pan.baidu.com/s/1jImOtAe Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-15
content: 个人觉得菜鸟入门就用devcpp吧，几十个mb，点开就能写代码，新手哪懂什么文件什么配置的，那是以后的事了

user: user-16
content: http://www.xdowns.com/soft/38/121/2008/Soft_44195.html 下个绿色版就行了，不用安装的

user: user-17
content: 建议使用更高版本的开发环境，比如vs
user-0 提问: fgets（）读取字符串数组问题

回复:
user: user-1
content: static char bufs[80] int n; int nn[402]; double fs[402],fe[402]; FILE *rfp; rfp=fopen("d:\\mydir\\mydata.txt","r"); if (rfp) {     for (n=0;n<402;n++) {         if (NULL==fgets(bufs, 80, rfp)) break;         if (3==sscanf(bufs, "%d%lf%lf", &nn[n], &fs[n], &fe[n])) {             printf("%d %d %lg %lg\n",n,nn[n],fs[n],fe[n]);         } else {             break;         }     }     fclose(rfp); } else {     printf("Can not open file [%s]!\n","d:\\mydir\\mydata.txt"); }

user: user-1
content: static char bufs[402][80] int n,nn; double fs,fe; FILE *rfp; rfp=fopen("d:\\mydir\\mydata.txt","r"); if (rfp) {     for (n=0;n<402;n++) {         if (NULL==fgets(bufs[n], 80, rfp)) break;         if (3==sscanf(bufs[n], "%d%lf%lf", &nn, &fs, &fe)) {             printf("%d %d %lg %lg\n",n,nn,fs,fe);         } else {             break;         }     }     fclose(rfp); } else {     printf("Can not open file [%s]!\n","d:\\mydir\\mydata.txt"); }

user: user-2
content: char *bufs[256] int n,nn,fs,fe;   for (n=0;n<402;n++){ fgets(bufs[n], 80, rfp); 第一个问题：bufs的长度是256,n的循环是从0~401，这样会有数组越界的问题。 第二个问题：bufs是指针数组，每个指针都是一个野指针，所以要使用之前需要将其指向可以读写的内存位置。可以考虑使用malloc/free方式动态申请内存空间；

user: user-3
content: fgets表示从文件里面读数据，你的文件打开在哪里？以下是一个fget的调用示例：  FILE * fp = fopen(argv[1],"r"); char buf[200]; while (fgets(buf,200,fp) != NULL) {    /* 每行的字符不能超过199才能正常工作 */       printf("%s",buf); }

user: user-4
content: fgets的第三个参数是一个FILE*指针
user-0 提问: 请问DEV C++可以引用excel表格吗？

回复:
user: user-1
content: 引用 9 楼 dlutlh 的回复:问题已经解决，谢谢各位 解决了你到是结贴啊

user: user-0
content: 问题已经解决，谢谢各位

user: user-2
content: 那楼主就把excel另存为csv格式文件，再用记事本打开就知道，它的格式用逗号进行分割。 程序里就直接打开csv文件，处理字符串吧。代码就不献丑了

user: user-3
content: 楼上已经说了。你把自己的Excel文件打开 ，别存为，格式 选 CSV. 其實就是逗號分隔的文本文件 然後用C++讀取CSV文件， 每讀一行getline（），用split()函數 以逗號分隔出CSV一行的數據 每一個分隔出來的數據，添加到你定義的Vector里去。 建議把數組換成Vector

user: user-0
content: 引用 1 楼 donjin9的回复:可以把excel另存为csv文件读取，不然就得使用MSO.dll EXCEL.exe等处理。 您好，非常感谢回复，我是学水利水电的，对这个学的不怎么深，基本上还是小白，您能列举一段程序吗？我对照着看看怎么弄

user: user-2
content: 可以把excel另存为csv文件读取，不然就得使用MSO.dll EXCEL.exe等处理。

user: user-0
content: 引用 6 楼 user-4的回复:https://www.codeproject.com/Articles/13852/BasicExcel-A-Class-to-Read-and-Write-to-Microsoft有源码有例子 看懂这个还是很困难啊，我能发给你我的一段代码，和需要输入的Excel，帮我看看怎么写输入的那段代码可以吗？

user: user-4
content: https://www.codeproject.com/Articles/13852/BasicExcel-A-Class-to-Read-and-Write-to-Microsoft有源码有例子

user: user-0
content: 引用 4 楼 user-4的回复:basic excel 求教，

user: user-4
content: basic excel
user-0 提问: printf输出double类型的问题

回复:
user: user-1
content: http://en.cppreference.com/w/c/io/fprintf

user: user-1
content: 确实C99才支持，C89下是未定义行为，但编译器可能不完全支持C99

user: user-1

user: user-2
content: 只能说这一处标准还没有实现。不过，C99标准中只是说了一句 %lf conversion specifier allowed in printf，也没有看见更多的解释和示例

user: user-0
content: 感谢各位老师告知。

user: user-3
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！
user-0 提问: C语言关于逻辑“或”运算符在if语句中的应用问题

回复:
user: user-1
content: 基础！基——础！

user: user-2
content: 你的代码思想和你的实现要求差距很远呢。

user: user-2
content: 'A'||'E'||'I'||'L'||'N'||'O'||'R'||'S'||'T'||'U' 这些得到的是1，根据||截断的思想，即'A' || 'E'若为真，那么后面的就不会再比较。由于真 || 真则结果是为真。 ch == 真(1)比较得到的结果应该是假，除非输入的是1. 同理下面的比较，都是ch == 真(1)。

user: user-3
content: ||运算符，两边只要有一个不为零运算结果即为1，字符常量在内存中就是整数，括号里面('A'||'E'||'I'||'L'||'N'||'O'||'R'||'S'||'T'||'U')这一串，结果就是1，判断ch==('A'||'E'||'I'||'L'||'N'||'O'||'R'||'S'||'T'||'U'),就是判断ch==1，因为ch是一个字符，就是一个整数，只要ch的ascii码不是1，那么这个判断的结果就是否，也就不会进入后面的操作。

user: user-4
content: 这样用或的用法是不是不对？还是应该分开来写吧

user: user-5
content: if (strchr("AEILNORSTU", ch)){   sum=sum+1; }

user: user-6
content: if (ch=='A'|| ch=='E')    是这样写吧

user: user-7
content: if ( ch==('D'||'G') ) 能编译成功?   另建议把+1的处理用else放在最后.

user: user-8
content: else if(ch==('J'||'X')){ sum=sum+8; } else{ sum=sum+10; } } printf("Scrabble value: %d",sum); return 0; }修改为  else if(ch==('J'||'X')){ sum=sum+8; } else if(ch==('Q'||'Z')){ sum=sum+10; } else{ sum=sum+1; } } printf("Scrabble value: %d",sum); return 0; }
user-0 提问: 求大神指点，PAT-B.1008，用了数组和指针两种做法，为什么一用指针就段错误？

回复:
user: user-1
content: for(i=0;i<N;i++)          scanf("%d",&(*(p+i))); 你确定这句话没问题？

user: user-2
content: b是野指针，可能指向不可读写的内存位置。*b = y;其实是将y地址写到b指向的内存单元，但是b若是指向不可写的内存单元，此操作就会导致段错误；解决办法是：  b = (int *)malloc(sizeof(int)); if (!b)     exit(0); *b = y;

user: user-2
content: 第一个代码是因为p是野指针，并没有让p指向一个可以读写的内容空间。因此会出现段错误（这个段错误不一定每次都会出现）；解决办法是通过malloc/free（释放时使用）为p申请空间，让其指向堆上的内存空间；  p = (int *)malloc(sizeof(int) * N); if (!p)     exit(0);

user: user-3
content: b没有初始化，所以给*b赋值错误。

user: user-4
content: 指针数组‘中每一个指针都要先指向 你所变换的数组中的不同元素

user: user-5
content: 用指针，就要注意初始化
user-0 提问: 求大佬看看，为什么后面else if语句不能表达

回复:
user: user-1
content: 定义x是为单精度，输入时用的是lf,表示双精度，而应该用l 正确的代码如下：

user: user-2
content: int main() { 	float x = 0, y = 0; 	scanf("%f", &x); 	if (x<0) { y = 0; printf("%.2f\n", y); } 	else if (x >= 0 && x <= 15) { y = 4 * x / 3; printf("%.2f\n", y); } 	else if (x>15) { y = 2.5*x - 10.5; printf("%.2f\n", y); } 	else printf("error!\n"); 	return 0; }

user: user-3
content: 要学会下断点查bug 1楼正解，输入的数据类型要和scanf设定的格式匹配

user: user-4
content: 逻辑上来说，就是没有满足if else 的条件，我这里复制不了你的代码

user: user-5
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-5
content: scanf("%f",&x);
user-0 提问: 初学c语言，求大神指点

回复:
user: user-1
content: 刚入门C语言可以看看这个：https://cloud.tencent.com/developer/doc/1023

user: user-2
content: #include <stdio.h>   #include<math.h>   using namespace std;    bool judge(int x);   int main()     {         int m,n;       scanf("%d %d",&n,&m);       if(n%2==0)  n++;         for(int i=n;i<=m;i+=2)       {           if(judge(i)&&judge(i+2)&&i+2<=m)  printf("(%d,%d)",i,i+2);       }          return 0;     }         bool judge(int n)   {        if(n<=1)  return false;       int m=floor(sqrt(n)+0.5);       for(int i=2;i<=m;i++)           if(n%i==0)  return false;       return true;   }     这个是我敲的。 你敲的有太多的问题：1.  if(i%j==0) { flag=0; break;  } ，这有两种可能break 跳出if语句，执行for循环，那就没有意义，或者break跳出for循环，那就肯定出错。 2.     if(flag==1)   { a[m++]=i;printf("%d",i);   }，就算前面的能判断出i为素数，printf里的也应该是a[m++]不是i(即使两者输出结果一样)。
user-0 提问: 数组倒置我这个for循环写错了么？为什么不倒置、

回复:
user: user-1
content: 因 i->6 j->0 等于换了2遍，负负得正 又换回来了

user: user-2
content: for (i = 0; i < j; i++)   for (i = 0; i < 7; i++)不行，又换回原顺序了
user-0 提问: matlab Sfcn

回复:
user: user-1
content: 偶遇到类似问题都是用 “每次注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:偶遇到类似问题都是用 “每次注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。 首先谢谢老师回答，之前是犯了中文符号的问题，结果专注于错误提示，找语法方向的问题，浪费了不少时间。
user-0 提问: C语言初学者不懂的地方

回复:
user: user-1
content: 输出c2 = B肯定不对,  重新编译一下( rebuid all) c2 = b; 编译时应该会有警告的. 养成好习惯, 使用 c2 = (char)b ;

user: user-2
content: 重新编译 rebuid all

user: user-3
content: 重建所有

user: user-4
content: 我也觉得奇怪，%d应该输出十进制的数，你的怎么能输出B（十六进制的）

user: user-5
content: 我这里都输出 66 的说

user: user-6
content: 你确定不是输出66？

user: user-7
content: 你那个编译器很神奇 按%d 输出 ，竟然能输出字符？？？

user: user-8
content: char字符占8 bit的空间，表达范围为0~255，你的322已经超出。322%256=66，66在ascii中就是B
user-0 提问: 请教一个在pthread线程函数中使用回调函数的问题

回复:
user: user-1
content: 线程对应的函数的格式必须是这样：void *xxoo(void *arg)  a.把“void *sayhello(void *arg)”改成“void sayhello(void *arg)”会报错如下：  root@book-desktop:/opt/pc_test/multithreading/1# make  gcc -o main main.c -lpthread  main.c: In function ‘main’:  main.c:14: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type  /usr/include/pthread.h:227: note: expected ‘void * (*)(void *)’ but argument is of type ‘void (*)(void *)’  b.把“void *sayhello(void *arg)”改成“void *sayhello(void)”会报错如下：  root@book-desktop:/opt/pc_test/multithreading/1# make  gcc -o main main.c -lpthread  main.c: In function ‘main’:  main.c:14: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type  /usr/include/pthread.h:227: note: expected ‘void * (*)(void *)’ but argument is of type ‘void * (*)(void)’

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:pthread_create第三个参数是void *类型，但是void (*func)()函数的返回值是void类型，与void *冲突。 下面的修改，参考一下吧  #include <stdio.h> #include <unistd.h> #include <pthread.h>  struct param {     void (*func)(const char *); };  //回调函数 void OutputSth(const char *str) {     printf("%s\n", str);      //return NULL; }  //线程函数 void *ThreadRun(void *arg) {     const char str[20] = "hello callback.";     struct param *p = (struct param *)arg;     int i = 0;     for(; i < 10; ++i)     {         p->func(str);         sleep(1);     }      return NULL; }  int main(void) {     pthread_t thd;     struct param arg;     arg.func = OutputSth;     pthread_create(&thd, NULL, ThreadRun, (void *)&arg);     pthread_join(thd, NULL);      return 0; } 十分感谢，学习了

user: user-2
content: pthread_create第三个参数是void *类型，但是void (*func)()函数的返回值是void类型，与void *冲突。 下面的修改，参考一下吧  #include <stdio.h> #include <unistd.h> #include <pthread.h>  struct param {     void (*func)(const char *); };  //回调函数 void OutputSth(const char *str) {     printf("%s\n", str);      //return NULL; }  //线程函数 void *ThreadRun(void *arg) {     const char str[20] = "hello callback.";     struct param *p = (struct param *)arg;     int i = 0;     for(; i < 10; ++i)     {         p->func(str);         sleep(1);     }      return NULL; }  int main(void) {     pthread_t thd;     struct param arg;     arg.func = OutputSth;     pthread_create(&thd, NULL, ThreadRun, (void *)&arg);     pthread_join(thd, NULL);      return 0; }

user: user-3
content: void *ThreadRun(void (*func)())  这个函数的参数类型应该是void*  也就是说是：void *ThreadRun(void * func) 这样的形式
user-0 提问: gdb调试时输出不能正确输出中文

回复:
user: user-1
content: export LANG=zh_CN.UTF-8

user: user-2
content: 有安装汉字库吗

user: user-3
content: 查看文字的格式。

user: user-4
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-5
content: 你可以考虑在编写的是，将编码更换为ANSI 编码

user: user-6
content: 确认一下你的code中文的编码格式，是utf-8格式的吗？ 在Linux下中文一般是utf-8格式的才能正常显示，否则可能会以乱码形式出现
user-0 提问: 求不同类型（运算or访存）的程序源代码

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素正在看你推荐的这个视频，感谢指教！

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！其实也没有需要这么深入，是在做毕业设计，导师说需要来分析不同类型的程序，好让论文有得写，但是自己理解的不够不知道怎样来写这些不同类型的程序，所以才会提出这个问题

user: user-1
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！
user-0 提问: win32 串口通信接收数据异常

回复:
user: user-1
content: 仅供调用：void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }

user: user-2
content: 最高位没接收到，0xFA变成了0x7A，以目前状况来看，我比较怀疑你初始化时候，串口的几个参数与调试工具是否一致； 波特率，校验位，数据位，停止位，这里要跟你的串口助手一致，请查看一下； 你之前帖子里说你波特率调的9600，但你截图工具用的115200，请一定确认一下串口参数，如果参数对不上，数据传输是会出现问题的。

user: user-3
content: 加个断点调试下

user: user-0
content: 引用 9 楼 hou09tian 的回复:我觉得可以换个串口助手试试，以前遇到过这种情况。  能否推荐一个？谢谢

user: user-4
content: 我觉得可以换个串口助手试试，以前遇到过这种情况。

user: user-0
content: 引用 7 楼 phenix2009 的回复:不能看后面那个，前面的才是收到的数据吧  我发送的数据为：70 15 03 00 00 00 00 02 00 00 70 FA 0A  收到的为：  倒数第二个字节也不对啊，FA应该是250，收到的为什么是122呢

user: user-0
content: 引用 12 楼 phenix2009 的回复:最高位没接收到，0xFA变成了0x7A，以目前状况来看，我比较怀疑你初始化时候，串口的几个参数与调试工具是否一致； 波特率，校验位，数据位，停止位，这里要跟你的串口助手一致，请查看一下； 你之前帖子里说你波特率调的9600，但你截图工具用的115200，请一定确认一下串口参数，如果参数对不上，数据传输是会出现问题的。  果然是因为这个导致的，谢谢大神指点。

user: user-2
content: 不能看后面那个，前面的才是收到的数据吧

user: user-2
content: 收到的是17 17 17 17 34 34 34 34 51 51 51 68 请全部转换成16进制，不就是0x11 0x11 0x11 0x11 0x22 0x22 0x22 0x22 0x33 0x33 0x33 0x44

user: user-0
content: 引用 4 楼 phenix2009 的回复:请问接收数据错乱是指什么，我看接收的数据的确是你发送的，是不是你把16进制和10进制看混了？ 还是说下面那俩0是多发了？ 我发送的是16进制：11 11 11 11 22 22 22 22 33 33 33 44 收到的是 \x11 \x11 \x11 \x11 \‘’  \" \" \" 3 3 3 3 收到的也对不上啊？

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:波特率设置低一点，串口线短一点。 波特率9600，没有串口线，用的串口调试工具，虚拟的串口

user: user-2
content: 请问接收数据错乱是指什么，我看接收的数据的确是你发送的，是不是你把16进制和10进制看混了？ 还是说下面那俩0是多发了？

user: user-1
content: 波特率设置低一点，串口线短一点。

user: user-1
content: 想办法换实际的串口。
user-0 提问: C语言串口调用

回复:
user: user-1
content: 之前刚好做过linux下的串口，分享给你看看，可以配合找找问题。 首先是打开串口，我们设备的串口是固定一个，名字是ttyPS1：  	m_hCom = ::open("/dev/ttyPS1", O_RDWR | O_NOCTTY | O_NONBLOCK);  	if(m_hCom==-1) return false; 	 	struct termios options; 	tcgetattr(m_hCom, &options); 	struct termios newtio; 	switch (m_nBaudRate)//设置数据传输率 	{ 	case 4800: 		cfsetispeed(&newtio, B4800); 		cfsetospeed(&newtio, B4800); 		break; 	case 9600: 		cfsetispeed(&newtio, B9600); 		cfsetospeed(&newtio, B9600); 		break; 	case 19200: 		cfsetispeed(&newtio, B19200); 		cfsetospeed(&newtio, B19200); 		break; 	case 38400: 		cfsetispeed(&newtio, B38400); 		cfsetospeed(&newtio, B38400); 		break; 	case 115200: 		cfsetispeed(&newtio, B115200); 		cfsetospeed(&newtio, B115200); 		break; 	default: 		cfsetispeed(&newtio, B9600); 		cfsetospeed(&newtio, B9600); 		break; 	} 	//修改控制模式，保证程序不会占用串口    	newtio.c_cflag |= CLOCAL; 	//修改控制模式，使得能够从串口读取输入数据    	newtio.c_cflag |= CREAD; 	newtio.c_cflag &= ~CRTSCTS; 	switch (m_DataBits)//设置数据位 	{ 	case 5: 		newtio.c_cflag |= CS5; 		break; 	case 6: 		newtio.c_cflag |= CS6; 		break; 	case 7: 		newtio.c_cflag |= CS7; 		break; 	case 8: 		newtio.c_cflag |= CS8; 		break; 	}  	switch (m_nParityIndex)//设置奇偶效验位 	{ 	case 0: 		newtio.c_cflag &= ~PARENB; 		break; 	case 1: 		//newtio.c_iflag |= (INPCK | ISTRIP); 		newtio.c_cflag |= PARENB; 		newtio.c_cflag &= ~PARODD; 		break; 	case 2: 		newtio.c_cflag |= PARENB; 		newtio.c_cflag |= PARODD; 		//newtio.c_iflag |= (INPCK | ISTRIP); 		break; 	}  	switch (m_nStopBitsIndex) 	{ 	case 1: 		newtio.c_cflag |= CSTOPB; 		break; 	default: 		newtio.c_cflag &= ~CSTOPB; 		break; 	}  	//修改输出模式，原始数据输出    	newtio.c_oflag *= ~OPOST;  	newtio.c_cc[VTIME] = 1; 	newtio.c_cc[VMIN] = 1; 	tcflush(m_hCom, TCIFLUSH);  	if ((tcsetattr(m_hCom, TCSANOW, &newtio)) != 0) 	{//激活新配置 		::close(m_hCom); 		m_hCom = -1; 		return false; 	}   然后是发送部分，buff是char数组，nlen是发送长度：  		nRet = write(hComm, buff, nLen); 		if (nRet < 0) 		{ 			return KSJVB_RET_FAIL; 		}

user: user-2
content: 百度搜“Linux操作系统下串口编程入门教程”

user: user-1
content: 引用 7 楼 leetow2006 的回复:原来ttyPS1是串口设备名称，学习了 这个可不一定的，不过很多设备都会叫这个罢了，具体还要看设备，不像Windows下面，定好了就叫com1 com2

user: user-3
content: 原来ttyPS1是串口设备名称，学习了

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:百度搜相关关键字。 已经搜了两天了，程序改了好多遍，都不行啊

user: user-0
content: 引用 1 楼 hzy_76 的回复:調試過沒有，能按預期執行到哪一步？ 用USB转串口的线连接到PC上，在串口调试工具里面都看不到返回数据，估计是都没写进去

user: user-2
content: 百度搜相关关键字。

user: user-4
content: 調試過沒有，能按預期執行到哪一步？
user-0 提问: 二维指针数组，int* a[2][2]，怎么理解 &(a[0])和&(a[0][0])相等，但a[0]和a[0][0]不等？

回复:
user: user-1
content: a[0]是二维数组的第0行第0列的列地址，对其取地址就相当于上升一个维度，就从列地址变为行地址，&a[0]就是第0行的行地址，a[0][0]为第0行第0列元素的值，对其取址操作就是取a[0][0]元素的地址，&a[0][0]即0行0列的地址，就是刚才说的a[0]，因为a[0][0]中的第二个0代表在行上没有偏移，所以a[0]代表的0行0列列地址等于0行的行地址。所以&a[0]和&a[0][0]相等。 a[0][0]为第0行第0列元素的值，不是地址，所以a[0]和a[0][0]不等。

user: user-2
content: 步长了解一下

user: user-3
content: int a = {{1,2}, {3, 4}}; 可以将a看成一个数组，这个数组中有2个元素，每个元素又是一个包含2个int的数组。所以&a[0]是第一个数组{1，2}的起始地址；a[0][0]是第一个元素即1的地址，所以两个值相同。而a[0]是第一个数组{1，2}的起始地址，a[0][0]是第一个元素的值即1，所以两者不同。  至于a[0]和&a[0]的区别，请查看《C++中对数组名的运算》https://blog.csdn.net/hou09tian/article/details/80136819 希望能够帮到你

user: user-4
content: 理解和讨论之前请先学会如何观察！  //char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-5
content: 把int* 看成int，你再理解试试。也许你会恍然大悟

user: user-6
content: https://blog.csdn.net/fx677588/article/details/69592329

user: user-7
content: &a[0]， &a[0][0],   都是地址，前者是第0行地址再取地址，后者取a[0][0]这个数的地址，两者都是相同的地址值，但是含义不同，执行++操作结果也不同 a[0]，a[0][0] 类型不同，前者是一个地址，表示第0行首个数字所在的地址，而a[0][0]是数组中的第一个数，两者是不同的东西

user: user-8
content: 在C语言中，a[0]代表的是一维数组的第一列，而a[0][0]是二维数组的第一行第一列，所以表示的内容是不相同的 而当加上取地址符&后，&a[0]和&a[0][0]都表示选取数组中的第一个地址，所以表示的内容是相同的。

user: user-9
content: &a[0],       &a[0][0],   代表是取地址 a[0] a[0][0] 一个是代表数组的第一行 ，一个是代表数组第一行，第一列，类型不同
user-0 提问: C语言形参char*可以传""进去吗？会不会有乱码生产？

回复:
user: user-1
content: 没问题，""是空串，strcpy后你函数中的字符数组也是空，只要函数中不修改参数字符串就没问题，而且也不会有乱码

user: user-2
content: ""代表的是空串，空串的长度为０．因此strlen(a), strlen(b), strlen(c)都为０． strcpy拷贝空串到a1, b1, c1，那么每个字符数组得到也都是空串，唯一的一个字符是'\0'。因为空串也是字符串的一种，所以也是以'\0'结束。 #include <stdio.h> #include <string.h>   int fund(char* a, char* b, char* c) {     char a1[10];     char b1[10];     char c1[10];       printf("a=%s\n",a);     printf("b=%s\n",b);     printf("c=%s\n",c);       //memset(a1,0x00,sizeof(a1));     //memset(b1,0x00,sizeof(b1));     //memset(c1,0x00,sizeof(c1));     strcpy(a1,a);     strcpy(b1,b);     strcpy(c1,c);       if( strlen(a1)> 0 )     {         printf("a1=%s\n",a1);     }       if( strlen(b1)> 0 )     {         printf("b1=%s\n",b1);     }       if( strlen(c1)> 0 )     {         printf("c1=%s\n",c1);     }       return 0; }   int main(void) {     fund("","","");       return 0; } 参考一下吧 memset可以不需要，因为strcpy会将'\0'加到目标串的末尾，目标串即strcpy的第一个参数。

user: user-3
content: ""就是一个字符'\0'呀，你的代码很谨慎，没有任何问题。

user: user-4
content: 可以, c,c++中是以\n结尾，所以"" 后面跟了一个\0, 长度是0，没有信息. 没有错，你不能修改。  char  *p="123456"; //123456/0在常量区，p在栈上.

user: user-5
content: 引用 楼主 baidu_28726667 的回复:     if( strlen(a1)> 0 )     {         printf("b1=%s\n",b1);     }      if( strlen(a1)> 0 )     {         printf("c1=%s\n",c1);     }   这部分应该是以下吧：      if( strlen(b1)> 0 )     {         printf("b1=%s\n",b1);     }      if( strlen(c1)> 0 )     {         printf("c1=%s\n",c1);     }   如楼主所说，这样做是没有问题的，char*实际上是可以看成是字符串的。楼主程序运行后应该没有输出

user: user-6
content: 下断点调试可以看出 char a1[10]; 此时a1的地址为  再查看该地址的数据  使用memset()填零之后的内存数据为 memset(a1, 0x00, sizeof(a1));  使用strcpy()拷贝字符串之后的数据为 strcpy(a1, a);  从以上分析可以看出，字符串""实际上就是包含了“\0”，不会出现你担心的乱码

user: user-7
content: 你当前的程序没有问题，但是需要注意在函数fund中不能修改变量a,b,c的值，为了防止这种情况出现，可以修改下函数定义  int fund(const char* a, const char* b, const char* c)
user-0 提问: 一个小小的歌手系统 但是我有一个功能实现不完全 求大神帮忙

回复:
user: user-1
content: 引用 7 楼 qq_41951726 的回复:感谢各位大佬提的问题，看到最后我发现确实是初始的变量的问题，我把它放在了某个函数外面了 下次小心吧，顺便把帖子结一下吧

user: user-0
content: 感谢各位大佬提的问题，看到最后我发现确实是初始的变量的问题，我把它放在了某个函数外面了

user: user-1
content: sum[j]=sum[j]+ass[j].num1+ass[j].num2+ass[j].num3+ass[j].num4+ass[j].num5; sum[j]=sum[j]+ass[j].num6+ass[j].num7+ass[j].num8+ass[j].num9+ass[j].num10; 你这块不就是算总分吗，话说sum[j]初值是不是0，如果不是0那么计算结果自然是不对的，你的那个sum数组的初始化做了没有？

user: user-0
content: ass里面的变量用来记录10个评委的分数，ass【i】数组是记录歌手人数的

user: user-2
content: 没看懂你的代码，所有输入数值全都赋值给  数值  ass【j】， 没想明白

user: user-3
content: 我不太懂这里用switch   case,并且建议加花括号，避免在case中定义对象产生的一些问题。

user: user-3
content: 如果没进case 1就没有总分啊

user: user-3
content: 好像没看到有错误哈，你看下你sum数组有没有初始化
user-0 提问: 想删除特定元素，可是运行时打印了一行，什么原因，求解释

回复:
user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-2
content: #include <stdio.h>  //#define MAX 100000 #define MAX 100  typedef int DataType; typedef struct {     DataType list[MAX];     int size; }SeqList;  void ListInitiate(SeqList* L) {     L->size = 0; }  int ListInsert(SeqList* L,int i,DataType x) {     int j;     if(L->size >= MAX|| i < 0 || i > L->size)         return 0;       for(j = L->size+1;j >= i;j--)         L->list[j+1] = L->list[j];     L->list[i] = x;     L->size++;     return 1;//代表数据插入成功。  } int ListDelete(SeqList* L,int i) {     int j;     if(L->size>MAX||i<0||i>L->size-1)         return 0;      for(j=i;j<L->size-1;j++)         L->list[j]=L->list[j+1];     L->size--; } void ListDeleteByValue(SeqList *L, DataType x) {     int i;     for (i = 0; i<L->size+1; i++)     {         if(L -> list[i]==x)         {             //ListDelete(L,x);//这儿有点蒙             ListDelete(L, i);//这儿有点蒙         }     } } int ListLength(SeqList* L) {     return L->size; } int ListGet(SeqList* L,int i,DataType *x) {     int j;     //判定i是否有效     if(L->size<=0||i<0||i>L->size-1)         return 0;     //如果i有效     *x=L->list[i];     return 1;  } void PrintList(SeqList* L) {     int i,x;     for(i=0;i<L->size;i++)     {          printf("%5d",L->list[i]);     }     printf("\n"); }  int main(int argc, char *argv[]) {     SeqList my;     int i;     DataType x;     ListInitiate(&my);     while(scanf("%d",&x)!=EOF)     {         ListInsert(&my,0,x);     }     PrintList(&my);     ListDeleteByValue(&my,123);     PrintList(&my);     return 0; } 参考下吧  首先，不建议将局部数组定义那么大，因为局部数组是在栈上申请的，栈上的空间是有限的。如果自己使用不了100000，建议定义大小为100，或者更小； 删除操作时，第二个参数应该传递的是位置值而不是要删除的数值

user: user-3
content: Listdelete你判断的是i数组下标，可是你传递的却是一个值

user: user-4
content: ListDelete(L,x);//这儿有点蒙     改成ListDelete(L,i);
user-0 提问: 关于用Dev-C++运行后的问题

回复:
user: user-1
content: 引用 2 楼 qq_42076842 的回复:也不算是运行失败，他是输入两个数据求面积，输完两个数据后，在按回车时就不在了 环境和程序。 如果结果不能停留，建议在程序末尾，确切的说是main末尾使用system("pause");或 getchar();等让结果停留

user: user-0
content: 也不算是运行失败，他是输入两个数据求面积，输完两个数据后，在按回车时就不在了

user: user-1
content: 建议详细描述一下你的问题，比如运行失败的信息，运行.exe的环境等等
user-0 提问: 请教一个__LINE__ 的问题,vs报错

回复:
user: user-1
content: https://stackoverflow.com/questions/11461915/visual-studio-9-0-error-c2051-case-expression-not-constant  In particular, if you are getting `case expression not constant' errors when building with MS Visual Studio, this is because MS's Edit and Continue debugging feature causes their compiler to violate ANSI C. To disable Edit and Continue debugging:  - right-click ssh.c in the FileView - click Settings - select the C/C++ tab and the General category - under `Debug info:', select anything _other_ than `Program Database for Edit and Continue'.    如文中描述，把这一项换成只要不是 “Program Database for Edit and Continue” 就行。

user: user-0
content: 引用 6 楼 jianwen0529 的回复:编译器警告级别的问题？ 这个我也调过了，但是不管用，比较尴尬

user: user-0
content: 引用 5 楼 zilaishuichina 的回复:引用 3 楼 yangxiangzhan 的回复:vs2017实测没有报错， 输出 case 8说的不错，就是这样的，但是我这边报错了，让我十分困惑。不知道是要设置预定义还是怎么做  那编译器具体的报错信息是啥啊[/quote]报错代码C2051，case 表达式不是常量

user: user-0
content: 引用 5 楼 zilaishuichina 的回复:引用 3 楼 yangxiangzhan 的回复:vs2017实测没有报错， 输出 case 8说的不错，就是这样的，但是我这边报错了，让我十分困惑。不知道是要设置预定义还是怎么做  那编译器具体的报错信息是啥啊[/quote]报错代码C2051，case 表达式不是常量.

user: user-0
content: 引用 10 楼 wanggui2015 的回复:https://stackoverflow.com/questions/11461915/visual-studio-9-0-error-c2051-case-expression-not-constant  In particular, if you are getting `case expression not constant' errors when building with MS Visual Studio, this is because MS's Edit and Continue debugging feature causes their compiler to violate ANSI C. To disable Edit and Continue debugging:  - right-click ssh.c in the FileView - click Settings - select the C/C++ tab and the General category - under `Debug info:', select anything _other_ than `Program Database for Edit and Continue'.    如文中描述，把这一项换成只要不是 “Program Database for Edit and Continue” 就行。 膜拜！我找了好久不知道在哪改这个！跪谢！

user: user-2
content: 编译器警告级别的问题？

user: user-3
content: 引用 3 楼 yangxiangzhan 的回复:vs2017实测没有报错， 输出 case 8说的不错，就是这样的，但是我这边报错了，让我十分困惑。不知道是要设置预定义还是怎么做[/quote]  那编译器具体的报错信息是啥啊

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复: 婴儿出生时是不能case没投胎在大富大贵之家，就重新投胎的！这位老师，这个 protothread 的写法我在其他平台运作的很好，只是挪到vs这就报错了

user: user-0
content: 引用 1 楼 zilaishuichina 的回复:你如果说的是类似如下的代码：  #include "stdafx.h"  int main(int argc, char* argv[]) { 	int a = 8; 	switch (a) 	{ 		case __LINE__: 		printf("case %d", a); 		break; 		default: 		printf("default %d", a); 		break; 	} 	return 0; }  vs2017实测没有报错， 输出 case 8 引用 1 楼 zilaishuichina 的回复:你如果说的是类似如下的代码：  #include "stdafx.h"  int main(int argc, char* argv[]) { 	int a = 8; 	switch (a) 	{ 		case __LINE__: 		printf("case %d", a); 		break; 		default: 		printf("default %d", a); 		break; 	} 	return 0; }  vs2017实测没有报错， 输出 case 8说的不错，就是这样的，但是我这边报错了，让我十分困惑。不知道是要设置预定义还是怎么做

user: user-4
content: 婴儿出生时是不能case没投胎在大富大贵之家，就重新投胎的！

user: user-3
content: 你如果说的是类似如下的代码：  #include "stdafx.h"  int main(int argc, char* argv[]) { 	int a = 8; 	switch (a) 	{ 		case __LINE__: 		printf("case %d", a); 		break; 		default: 		printf("default %d", a); 		break; 	} 	return 0; }  vs2017实测没有报错， 输出 case 8