Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 程序设计题——小白求救SOS！

回复:
user: user-1
content: 因为不知道你是否确定输入只有4个整数，我将它的输入范围设定为最多100个整数，请参考： #include <stdio.h>  #define MaxData 100  int main(int argc, char *argv[]) {     int data[MaxData];     int count;      printf("请输入整数的个数：");     scanf("%d", &count);     if (count > MaxData || count <= 0) {         printf("整数的个数不能超过%d，也不能是负数或等于0！\n", MaxData);         return 0;     }      int maxNumber = 0;     for (int i = 0; i < count; i++) {         printf("请输入第%d个整数：", i + 1);         scanf("%d", &data[i]);         if (data[i] > maxNumber) {             maxNumber = data[i];         }     }      for (int result = maxNumber; result > 0; result++) { // 暴力求解         int isOK = 1;         for (int i = 0; i < count; i++) {             if (result % data[i] != 0) {                 isOK = 0;                 break;             }         }         if (1 == isOK) {             printf("它们的最小公倍数是：%d\n", result);             break;         }     }      return 0; }
user-0 提问: 这代码没错啊，为什么PTA显示部分正确？

回复:
user: user-0
content: 我最后将感叹号改成中文的就可以了😅

user: user-1
content: #include <stdio.h> int main(int argc, char *argv[]) {     int m;     scanf("%d", &m);     switch (m) {         case 1:             printf("星期一 8节课\n");             break;         case 2:             printf("星期二 10节课\n");             break;         case 3:             printf("星期三 6节课\n");             break;         case 4:             printf("星期四 8节课\n");             break;         case 5:             printf("星期五 6节课\n");             break;         case 6:         case 7:             printf("今天没有课，可以好好休息一下啦!\n");             break;         default:             printf("输入无效，只能输入1-7!\n");             break;     }     return 0; }

user: user-2
content: switch完整呗。吧default:break;也加上试试

user: user-3
content: 这个也没错：int main(){return 0;}
user-0 提问: 大一新生，讲的递归调用，不知道哪里错了，求大神解答  

回复:
user: user-1
content: 1：注意if(c=='+') 这里的写法，常量写前面。2：F函数再加一个非 +-*/的 else分支3：除法要判断一下被除数是否为0

user: user-2
content: 要说错，可能是标题里提及的“递归调用”，而你这里，却没有，虽然我也看不出来你代码里表现出来的功能和递归有多大关系。
user-0 提问: 排序，从小到大输出n个输入的数字，运行不了

回复:
user: user-1
content: for (k = 0; k < n - 1; i++) 这里错误，应该为：for (k = 0; k < n - 1; k++)

user: user-0
content: 谢谢，自己怎么看都没看出来敲错了。
user-0 提问: 一个小白对数组的疑问

回复:
user: user-1
content: 对cout进行了重载，如果是学习C而不是C++，就不应该使用cout，应该先学会使用printf()函数可以这样理解吧：第1个cout << a，相当于printf("%p",a)，第2个cout << a相当于printf("%s",a)

user: user-2
content: 重载这个词的意思是，看起来长得一样，其实根本不是同一个东西。我在说流输出运算符。
user-0 提问: 大家有没有发现最近的品牌电脑读不出来硬盘序列号了

回复:
user: user-0
content: 有类似问题的网友，请百度EasyHardwareID 这个工具

user: user-0
content: 原因是wmic不支持NVME。需要自己写

user: user-1
content: 都有，在硬盘的SMART数据中

user: user-2
content: scsi硬盘没有smart

user: user-1
content: ATA-3+、SCSI-3、SATA、SAS接口的硬盘都支持SMART，基本上90年代后期以来的硬盘全支持

user: user-2
content: 硬盘序列号，准确说是IDE标准下的东西，很古老了，具体说就是在某个位置存放的2进制数据。读不出有几种情况：1、本身就没有序列号，比如非IDE类的scsi硬盘；2、读取方法有问题，比如最近这些版本的windows就需要管理员权限之类的才能读取，又比如这些直进制数据本身就是空白的内容，还有一种序列号前面是若干个空格，有的软件没有考虑到这种情况就不能正确处理；3、LZ说的这种，也有可能人家的序列号本身就是那样的，为什么一定要是：非空格的标准ascii字符呢？

user: user-2
content: 补充一点：序列号可能有组织或存放形式的区别，或者说对2进制的解析不对

user: user-0
content: 识别错误的序列号，四位字符间隔
user-0 提问: 第3个for小括号里面是什么意思啊？

回复:
user: user-1
content: 逗号间隔的多个表达式

user: user-2
content: i从0开始，条件是i<5，如果满足，那么就做花括号里的，接着i+1，然后再继续判断条件是否成立，成立则做括号里，不成立就跳出了，理解否？
user-0 提问: 结构体的地址引用问题

回复:
user: user-1
content: 楼上正解，像楼上一样定义，就没有警告 typedef struct tt{ char data; struct tt *lchild,*rchild; }test;  这个警告就是说你的类型不对应，你这里struct test不规范。

user: user-2
content: typedef struct  tt{char data;struct tt *lchild,*rchild;}test;
user-0 提问: 二叉树建树编译不通过

回复:
user: user-1
content: 修改如下，供参考： #include<stdio.h> #include<stdlib.h>  typedef struct TreeNode // 修改 {     char   val;     struct TreeNode* left;     struct TreeNode* right; }TNode, * T_Pointer;  void Build_Tree(T_Pointer& T) {     char ch;     scanf("%c", &ch);     if (ch == '#')     {         T = NULL;     }     else     {         T = (T_Pointer)malloc(sizeof(TNode));         T->val = ch;         Build_Tree(T->left);         Build_Tree(T->right);     } }  void Printf_Tree(T_Pointer& T)//修改 {     if (T != NULL)     {         printf("%c", T->val);         Printf_Tree(T->left);         Printf_Tree(T->right);     } }  int main(void) {     T_Pointer root;     root = NULL;     Build_Tree(root);     Printf_Tree(root);     return 0; }

user: user-2
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。
user-0 提问: 有关魔方阵，救救孩子吧！

回复:
user: user-1
content: #include <stdio.h>#include <stdlib.h> int main(){    int n,i,j,k,s[100][100];    scanf("%d",&n);    for(i=0;i<100;i++)        for(j=0;j<100;j++)        s[i][j]=0;//数组初始化    for(i=1;i<=n;i++)//一共n个正方形        for(j=i;j<=2n-i;j++)//坐标从i到2n-i            for(k=i;k<=2n-i;k++)                s[j][k]+=1;//面积填充    for(i=1;i<=2n-1;i++)    {        for(j=1;j<=2*n-1;j++)            printf("%d",s[i][j]);//输出        printf("\n");    }}
user-0 提问: 关于谭浩强书里不同类型数据间的混合运算问题

回复:
user: user-1
content: 书上说的不对呗内外有别不要混淆语言规则与硬件运算硬件浮点固然都是double的但是语言规则说float/float=float所以那个商是被转换为float，然后再考虑送给printf的

user: user-0
content: 请问“硬件浮点固然都是double的”能详细说下是什么意思吗？另外您的意思是：那个商根据c语句规则，就应该是float，然后转换成double类型，传给printf作为参数吗？

user: user-1
content: CPU里面或者CPU身边的真正进行浮点运算的部件，它只能处理64位（或更长）的浮点数，它不会处理32位的浮点数。 然而C语言讨论的是内存里面的事儿，float是32位存储单元，double是64位存储单元。对于CPU来说，内存在它外面。 所以按照C语言的规则，我们有三个32位的存储单元，这几个单元向/从浮点运算部件传送数据的时候要有个额外的32/64位格式转换，但这个转换是编译器在后台暗戳戳地加上的，本质上和我们的代码无关。 结论是C程序员只要不写操作系统或编译器，那就应该忽略掉书上“都是double”的描述，这样对谁都好。
user-0 提问: 延时函数更改值后无变化（延时函数没有延时）

回复:
user: user-1
content: for(j=100;j>0;j--); //改为 for(j=1000;j>0;j--);

user: user-2
content: #define u16 unsigned short

user: user-3
content: 有可能是循环里没实际操作被编译器给优化掉了。应该用 sleep() 类函数吧；用硬循环来实现，即使有效也让人不适（一是不同平台延时不一，二是无谓的消耗）。

user: user-4
content: 不要骗自己啊，unsigned char怎么可能放得下5000呢？就算放得下，延时也还是太短。
user-0 提问: 一个开辟动态内存后的小问题（再次修改）

回复:
user: user-1
content: 不调试的吗？上面代码的 16行有问题吧，不能有它，删除了即可；它即破坏了 原始的 P 这个又要被作为结果返回值的，下面的循环里又有 malloc() 的。

user: user-0
content: 好家伙，现在再一看立马看出问题来了，太感谢了

user: user-2
content: 这样的代码需要你在同一行里无分隔符地连续输入字符，最后输入！然后回车。

user: user-0
content: 谢谢你，不过无限输出乱码

user: user-2
content: 我说的是你之前问的scanf问题，你不要把不同的问题混在一起思考，不利于理顺思路。

user: user-0
content: 好的哥，salute

user: user-0
content: 自己尝试debug发现第二个scanf会直接跳过，每两次while才输入一次scanf，不知为何
user-0 提问: 有没有大佬帮我为什么总么算都是一个数

回复:
user: user-1
content: scanf("%lf",&Amount);把lf改为f就行了

user: user-1
content: 2000500.00这个工资有点离谱

user: user-2
content: 粗看一眼是int 和float疯狂混用，导致commission一直为0？？？，这个是dev c++？debug一下马上就知道为什么了

user: user-3
content: float和%lf不搭应该用%f其他逻辑错误慢慢找。
user-0 提问: 大佬们解释一下这个代码(●'◡'●)

回复:
user: user-1
content: 就是从n到m每个数加起来的和

user: user-0
content: 有什么书籍推荐吗

user: user-1
content: 明解C语言

user: user-0
content: 谢谢

user: user-2
content: 说句难听的，你不要不高兴。不想学就不要学，但凡把c语言前三章学完了也不会问这种问题

user: user-0
content: 了解

user: user-0
content: 有什么书籍推荐吗

user: user-3
content: 这个代码还要解释？哪里看不明白？

user: user-0
content: 对初学者来说有什么书籍推荐吗
user-0 提问: 这个在c语言中的意思是什么啊

回复:
user: user-1
content: 如果a是’.‘这个符号，p为真，否则如果 a<=’9‘且a>=‘0’,且!p为真的情况执行下面操作结合语境去看代码啊，单引号内的内容表示为字符而不是真的数字

user: user-2
content: if (a == '.')     p = true; else if ((!p) && (a <= '9') && (a >= '0'))    // ....
user-0 提问: 有没有大佬帮我看看这个代码有什么问题啊？（用的VS2019）

回复:
user: user-1
content: 我看最明显的是这个代码不产生输出，但既然你这样写，想必是有自己的理由的，因此对你来说这个不算是问题。
user-0 提问: linux下用c写多进程服务器端时，对sigaction函数与信号处理的时机有点小问题

回复:
user: user-1
content: 主函数里的调用一系列库函数的顺序，应遵循你学习到的正确顺序，不能自己发挥。因为涉及到库函数里相应数据结构的正确初始化。

user: user-0
content: 这样子啊，感谢～
user-0 提问: 编写程序：计算y年m1月d1日与同年的m2月d2日之间的天数（m2>m1）,若m2=m1且d2=d1则算1天。 输入：2017，2，27，3，10 输出：12

回复:
user: user-1
content: 把switch语句放到for(month=0;month<m;month++)这个for循环内，试试。
user-0 提问: 这个表达式10！=9的值是多少

回复:
user: user-1
content: 值就是1啊，逻辑表达式如果成立，值就是1，不成立值就是0

user: user-2
content: 非零值

user: user-3
content: 严格来说，应该是 true 吧，虽然它常被定义为 1

user: user-0
content: 谢谢！
user-0 提问: 这个题为什么打印没有输出

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

user: user-2
content: strcat() 的问题吧，它不是形成临时变量，而是把第二个字符串添加到第一个末尾，p1 是没空间存放额外的。

user: user-0
content: 谢谢！看来答案有问题
user-0 提问: 运行结果变量b没有减1

回复:
user: user-1
content: 因为逻辑短路

user: user-0
content: 谢谢！逻辑短路是什么意思？能具体说说嘛

user: user-2
content: &&运算左边是假的，结果注定是假的了，右边就忽略了。

user: user-0
content: 谢谢！那个的值呢？

user: user-0
content: 那个b的值呢？
user-0 提问: 静态库太麻烦了不同平台不同工程都要重新编译，有没有简单的方式

回复:
user: user-1
content: You need a cup of JAVA.

user: user-0
content: 可惜用的是C

user: user-0
content: 难道这就是JAVA的优势吗？

user: user-0
content: 大家怎么处理的？

user: user-0
content: 没人啊？
user-0 提问: 为什么会报错[Error] expected declaration specifiers or &#039;...&#039; before numeric constant

回复:
user: user-1
content: 因为你把函数调用写成了函数声明的格式。去掉主函数里面的两个void

user: user-0
content: 我就是声明了一个函数，然后在主函数里面调用这个函数，我这个程序在vss里面可以运行但是到了vec里面就一直说我错
user-0 提问: 请问这行代码是什么意思？void (*io_isr_cbfun)(u8 index) = NULL;

回复:
user: user-1
content: 楼上说的都对 : )

user: user-2
content: 给io_isr_cbfun这个指针变量赋初值NULL其类型是一个函数指针，指向  “没有返回值，带一个u8类型的参数index"这类原型的函数

user: user-3
content: 函数指针赋值
user-0 提问: C++队列舞会问题触发断点，求解

回复:
user: user-1
content: 仅供参考： //舞会上，男士们（m人）和女士们（n人, n<m）进入舞厅时，各自排成一队。跳舞开始时，依次从男队和女队的队头上各出一人配成舞伴。 //男队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。在第t首曲子时，第x个女生和第几个男生配对跳舞？ #include <stdio.h> #include <string.h> #define MAX 26 int m,n,t,x,y,i,j,k; char md[MAX]; char nd[MAX]; char c; void main() {     while (1) {         printf("Input n m(1<=n<m<=%d):",MAX);         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1<=n && n<m && m<=MAX) break;         }     }     while (1) {         printf("Input t x(1<=t<=%d 1<=x<=%d):",MAX,n);         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&t,&x)) {             if (1<=t && t<=MAX && 1<=x && x<=n) break;         }     }     for (i=0;i<m;i++) md[i]='A'+i;     for (i=0;i<n;i++) nd[i]='a'+i;     k=0;     for (i=0;i<t;i++) {         printf("%2d: ",i+1);         for (j=0;j<n;j++) {             c=' ';             if (i==t-1 && j==x-1) {c='*';y=k+1;}             printf("%c%c%c",md[k],nd[j],c);             k=(k+1)%m;         }         printf("\n");     }     printf("%d\n",y);  }
user-0 提问: 求教一道题，请大佬解答

回复:
user: user-0
content: 发现问题了，改成5.0就好了

user: user-1
content: c=5*...改为c=5.0f*

user: user-2
content: 整数计算得不到浮点结果非法数据判断条件也不对
user-0 提问: C++作业求大牛看一下 实在是不会！！

回复:
user: user-1
content: 发觉自己能力退步了哎  写个这种东西居然调试了很久 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h>  struct Data {     unsigned int s;     unsigned char c[4];     int n,A,B; }; void Clear( Data *d ){ memset( (void*)d,0,sizeof(Data) ); } void Printf( Data *d ){ printf("%d%d%d%d\n",d->c[0],d->c[1],d->c[2],d->c[3]); } int AddNum( Data *d,unsigned char v ) {     if( (d->s)&(1<<v) ) return d->n;     d->c[d->n++]=v;     (d->s)|=(1<<v);     return d->n; } int Check( Data *d,int in ) {     if(in<1000||in>9999) return 0;     unsigned char c[4]={0};     for( int i=3;i>=0;i-- ){         c[i]=in%10; in/=10;         if( c[i]==0 ) return 0;     }     unsigned int v=0;     for( int i=0;i<4;i++ ){  v|= 1<<c[i];  }     unsigned int n;     for (n = 0; v; v >>= 1) { n += v & 1; }      if(n!=4) return n;     int x=0,y=0;     for( int i=0;i<4;i++ )     {     if( c[i]==d->c[i] ){ x++; }     if( d->s&(1<<c[i]) ) { y++; }     }     d->A=x; d->B=y-x;     return 4; }  int main() {      srand(time(NULL));      Data D;      Clear(&D);      while( AddNum( &D,1+rand()%9 )<4 ){}      unsigned int In=0,Pass=10;      while(1)      {      printf("Enter 4 num:\n");      scanf("%d",&In);      if( Check( &D,In )!=4 ){         printf("Num cant't be 0 or repeat!\n");         In=0;      }      else if( D.A==4 ){        printf("You win!\n");        break;      }      else{ printf("%dA%dB\n",D.A,D.B); Pass--; }      printf( "Left:%d\n",Pass );      if( Pass==0 ){ printf("You lost! Num is:\n"); Printf(&D);break; }      }     return 0; }

user: user-2
content: 百度搜“猜数字 C源代码”，这是经典题目。
user-0 提问: 萌新发现一个问题，求大佬解答

回复:
user: user-1
content: 看看C新标准里有没有定义这种用法，没有就是错误的

user: user-0
content: 好！谢谢

user: user-2
content: 这是要做啥，10个字符指针的数组？应该：typedef char** Strings;

user: user-3
content: 理解不了的就是不正确的。嗯，编译器理解不了的。
user-0 提问: 运行之后不显示顺序表的元素，只显示这是一个空表

回复:
user: user-1
content: 调试啊，写代码不调试是不行的，代码难免会有异常，不能总是寻求别人，自己也未必能一眼就瞅出问题所在。你这个，主要问题可能是在 ListInsert() 函数开头的判断 i<1 这个似乎应该是 i<0 因为首个元素的序号为 0，这样就总也无法插入数据了。
user-0 提问: 请教一下，这个错在哪里了？

回复:
user: user-1
content: a 是你定义的那个结构的名，不是个变量名；还需定义个变量如 a va1; 然后 ..., &va1.x, &va1.y, ...

user: user-0
content: 也就是说仅仅定义了一个结构是不行的，需要再定义结构变量再进行操作是嘛

user: user-1
content: 是这个意思。

user: user-0
content: 谢谢
user-0 提问: 我的问题我的问题求答

回复:
user: user-0
content: 我知道了，scanf格式字符串中最后一个转换说明后面打了一个空格。 感谢你们。

user: user-0
content: 调试卡在scanf这里，就算输入数据一直点下一步也没有办法继续。

user: user-1
content: 用 switch 不合适吧，要用循环从 1月加到 (month-1)月；而闰月，还要看 month 是不是大于 2 了；严格点儿的话，甚至还应对 month 和 day 进行检查是否合法。

user: user-2
content: 这样的话是结果未必对的问题。然而楼主是输入了没结果。 大概率是输入格式不对，按代码来，年月日空格分开。

user: user-0
content: 好像也不是，我输入的格式特地加了空格。

user: user-0
content: 我也想用循环其实，但这里老师要求用switch。 头痛。
user-0 提问: 请问c语言中这个错误是怎么回事啊？

回复:
user: user-1
content: 你的main()函数定义了有返回值，但是，你并没有提供返回值，增加一条return 0;即可 #include <stdio.h> int main() {     char c[] = {"China"};          printf("%s", c);          return 0; } ```c

user: user-2
content: 这就相当于你考试把答案写在草稿纸上，所以没有成绩。

user: user-0
content: 百度搜了但没看懂
user-0 提问: 求答，if else问题

回复:
user: user-1
content: float a,b;  //定义单精度浮点数scanf("%lf %lf",&a,&b);// %lf 是错误的，应该为:%fprintf("%d",a); // a 是浮点数，%d 输出是整形数

user: user-0
content: 爱你！
user-0 提问: PTA作业求助，感谢大佬

回复:
user: user-1
content: #include <stdio.h>int main(){    int a,b,c,t;    scanf("%d %d %d",&a,&b,&c);    t=a;    a=b;    b=c;    c=t;    printf("%d %d %d",a,b,c);    return 0;}

user: user-2
content: scanf("%d%d%d",&c,&a,&b);printf("%d %d %d\n",a,b,c);
user-0 提问: 求助，如何从标准输入中读取指令

回复:
user: user-1
content: 自己逐个字符判断并取子串正则表达式有限状态自动机 以上方法都可行

user: user-2
content: 指令库应该是棵树。

user: user-3
content: 建议了解一下词法分析，和语法分析
user-0 提问: socket传输效率问题

回复:
user: user-1
content: 无profiler不谈效率

user: user-2
content: 脱离实际谈效率那是耍流氓啊。一个长期连接，每10秒发来1字节和文件下载能同日而语么？

user: user-3
content: 当然是一次读取多个字节，每次recv都会有一次系统调用

user: user-0
content: read 底层不也是 一字节一字节的读吗？

user: user-4
content: 有文章或者资料吗？想看看read底层实现

user: user-4
content: 另外，就算底层是一字节一字节的读，你代码里也写成一字节一字节的读，但是最外面始终都得有个while吧？ ```c read(fd, _1KBData, 1024); // 一次函数调用，底层 for 循环 1024 次 for(int i = 0; i &lt; 1024; ++i) { // 调用时 for 循环 1024 次，同时1024次函数调用     read(fd, &_1KBData[i], 1); } ```
user-0 提问: 问题。。。。。。。。。。

回复:
user: user-1
content: ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <=  'z'   ch >= '0' && ch < '9'  ch == 32  else

user: user-2
content: fabs(ch-77.5)<12.6 || fabs(ch-109.5)<12.6fabs(ch-52.5)<4.6!(ch-32)
user-0 提问: 请问这个代码有啥问题（用的VS2019）

回复:
user: user-1
content: scanf_s("%s",name,(unsigned)_countof(ws));

user: user-2
content: 修改部分如下： scanf_s("%s", name,20);//表示最多读取19个字符，name[19]放'\0'  输入字符时scanf_s比scanf多一个参数！

user: user-0
content: 谢谢大哥，我自己找了两天都没有搞定，谢谢谢谢

user: user-3
content: scanf_s("%s"&name);少了&符号
user-0 提问: 关于指向数组的指针作函数参数的问题

回复:
user: user-1
content: 因为数组名是地址常量，把它传给变量的时候需要类型兼容。score是float [3][4]类型，兼容于指针类型float (*)[4]*score是float [4]类型，兼容于指针类型float *
user-0 提问: 求求将下面的C语言转成Java语言

回复:
user: user-1
content: import java.io.IOException; public class MyInput {     public static void main(String[] args) throws IOException {          int x, n, i, j;         x = System.in.read();         n = System.in.read();         int count = 0;         while(0 == count) {             x++;             for(j = 2; j <=x; j++) {                 if (0 == x % j ) {                     break;                 }                 if (x == j) {                     System.out.print("x = " + x + " ");                     ++count;                 }             }         }     }
user-0 提问: 为什么当a重复输入时就会出现奇怪的东西求解

回复:
user: user-1
content: char a[81] = {0};char b[81] = {0};或者每次 给数组赋值之前先清理一下数组memset(a,0,sizeof(a));

user: user-2
content: 改成char a[81]{0}；b也如此

user: user-3
content: 把if语句改为这个试试：        if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i' || a[i] == 'u' || a[i] == 'o' || a[i] == 0x00) {

user: user-4
content: puts(b); 输出字符串吧，字符串，是以 0x00 字节标记结束的，但好像没看到你的代码里有设置这个结束标记字节的地方；puts(b); 前加个 b[c]=0x0; 语句试试？

user: user-0
content: 字符串的结尾我看书上写的是\0...我改成\0行不通改成0x00是可以的谢谢,能告诉一下是为什么吗

user: user-5
content: 应为\0这个东西既然叫做转义字符，那就得放在字符该放的环境，单引号里面才是它的用武之地。
user-0 提问: 求助为啥后面会多一个o

回复:
user: user-1
content: 把if语句改为这个试试：        if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i' || a[i] == 'u' || a[i] == 'o' || a[i] == 0x00) {

user: user-0
content: 字符串的结尾我看书上写的是\0...我改成\0行不通改成0x00是可以的谢谢,能告诉一下是为什么吗
user-0 提问: 这个错在哪怎么改求解答

回复:
user: user-1
content: 你这样是死循环，break只能中止最接近的for循环，不能中止外层的for循环，改成这样试试： #include <stdio.h> int main() {      int i;     int x;     int isprime = 1;     int cnt = 0;     for (x = 2; cnt < 50; x++) {         for (i = 2; i < x; i++) {             if (x % i == 0) {                 isprime = 0;                 break;             }         }         if (isprime == 1) {             printf("%d", x);             cnt++;         } else {             break;         }     }     return 0; }

user: user-2
content: 这不是问题，虽然算法上可以改进；主要还是 isprime=1; 放错了地方，应该在 x 循环里的开头。

user: user-3
content: 我纯新手刚学10天,不对别骂我0.0感觉i和x是不是刚开始都等于2for不太好用

user: user-2
content: isprime=1; 语句要放在 x 循环的首部吧，否则可能会被前次的 isprime=0; 给错了。

user: user-2
content: 输出时 ％d 后面加个空格把各数据分开，否则全糊在一起看不清。

user: user-4
content: 至少看上去缺少主函数结束的花括号。
user-0 提问: 简述学习编程遇到的问题，并求荐书！

回复:
user: user-1
content: 这个思路有个问题就是，即使有这样的书，也会被抨击以偏概全。或者说适合您的思路的适合您的职业需求的，反而不适用于大多数人。就轮子来说，学机械的可能认为核心是轴承，学化工的可能认为重要的是橡胶优化，学材料的会说核心技术是滚珠的表面热处理。所以写书的人才会泛泛地说轮子。其实是留下空白，也留下无限的可能。  既然说到这儿了，再扯几句。预设过于明确的学习目标，然后围绕这个目标学习，固然看起来效率会提高，但是，我是说但是这正是现行的培养AI的思路！也就是说这样培养出来的“人材”迟早会被AI取代！！！——人类要维持自己对AI的优势，就不能走捷径，只能是广泛学习触类旁通，收敛成自己那棵与众不同的科技树。这就是人类的格。
user-0 提问: [Error] invalid conversion from 'char' to 'char*' [-fpermissive]，这是我写的冒泡程序的一部分，标记红色字体的部分都是着给错误，望解惑

回复:
user: user-1
content: 字符是字符，字符串是字符串

user: user-2
content: strcpy()是字符串拷贝函数，代码里是要对单个字符操作吗，单个字符可以直接赋值操作：d[i] = sex[i]; sex[i] = sex[min]; sex[min] = d[i];
user-0 提问: 用c语言编程的时候出现了[Error] ld returned 1 exit status，求大佬帮助

回复:
user: user-1
content: 函数声明：int getlen(char s[]);函数实现：int gatlen(char s[]){getlen() 写成 gatlen() ，e 写成 a  了。

user: user-0
content: 好嘞，谢谢大佬

user: user-0
content: 我刚接触c语言编程，还不怎么会哈哈哈，求大佬们指点哈哈
user-0 提问: 管理代码应该看什么书？

回复:
user: user-0
content: 期待有启发的优质回答！

user: user-1
content: 使用笔记相关软件使用everything软件

user: user-0
content: 工具好说，方法呢？

user: user-1
content: 无他，唯手熟尔。
user-0 提问: c语言的基础，救救我！！！

回复:
user: user-1
content: 前面输入的回车的残留吧，先用 fflush(stdin); 语句清理下试试？

user: user-2
content: 这是一个历史悠久的错误，fflush是用来处理输出缓冲区的，不应用来处理输入。而且不是清除，而是催促输出不要再缓了。 四老师建议使用rewind(stdin)做这个事儿。

user: user-0
content: 谢谢老师的建议，可是我还没学rewind(stdin)，不知道怎么样，我们老师说要加getchar（），但我不知道加哪里
user-0 提问: 新手小白学习C语言笔记

回复:
user: user-1
content: 既然问题是无条件的，那么回答也是无条件且不负责任的：从全部学习C语言的人群的统计数据来看，学好的可能性不大。理智地回头吧，不要往坑里跳。

user: user-2
content: 老哥稳

user: user-3
content: 好家伙直接劝退
user-0 提问: 通过宏，怎么判断当前编译器是 gcc 还是 arm-linux-gnueabihf-gcc 呢

回复:
user: user-1
content: 不用代码格式则连续的下划线被删除了，这个属于csdn特色？ #if defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__)) // gcc ARM/ARM64 compiler #endif  #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64__) || defined(__amd64__)) // gcc x86/x64 compiler #endif

user: user-0
content: 多谢

user: user-2
content: #if defined(_ECLIPSE)||defined(__ANDROID__)||defined(__ARM_EABI__)

user: user-3
content: 找不到的话自己制造一个宏就好。
user-0 提问: 关于在unix中建立C语言编译环境的问题

回复:
user: user-1
content: 系统自带的，安装好就可以用，方便。

user: user-2
content: FreeBSD带有Linux兼容层，所以可以用大部分Linux下的软件，打开一个终端，输入命令：pkg install lang/gcc
user-0 提问: C语言中time.h的计时是从1970年开始的，这个怎么改变，比如改为2000年

回复:
user: user-0
content: 非常感谢大家的回复，非常感谢！

user: user-1
content: 定义一个偏移量常数，宏替换一下就行了。

user: user-0
content: 谢谢

user: user-2
content: 自己加偏移量改变一下

user: user-0
content: 谢谢

user: user-3
content: 这个是先天的设定，库函数本身并没有修改开始时间的功能，你只好自己写代码进行转换。

user: user-0
content: 谢谢
user-0 提问: 大佬们帮忙看看C语言代码，vs2019可以跑，但是vc6反而报错

回复:
user: user-1
content: C不够地道，当然不行。改用C++，就行了。

user: user-2
content: 代码不够ANSI，应该啥也没做之前声明所有变量，包括i，然后再干活。

user: user-0
content: 明白了

user: user-3
content: 源代码扩展名改为.cpp

user: user-0
content: VC6根本不给我出输出窗口

user: user-4
content: 抱什么错？

user: user-0
content: vs6调试只给了errors（1） 要是知道哪有问题我就自己解决了

user: user-0
content: 学校非要用vc6上课

user: user-4
content: 我没有vc6,你把输出窗口的内容贴出来
user-0 提问: 做作业的时候遇到的问题，求大佬帮看看

回复:
user: user-1
content: 要ANSI把变量c的声明提到前面去。

user: user-0
content: 具体最后代码是什么样的呢，急！

user: user-2
content: 行 7 类型前少了分号，看前面好像没少，那可能是误输入了汉字全角的分号？
user-0 提问: c语言帮忙帮忙！！！

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

user: user-0
content: 好的谢谢！

user: user-0
content: 还有其他的吗

user: user-2
content: 你是要学习C语言的软件还是能编译C语言的软件

user: user-0
content: 能编译c语言的软件 因为平时学的时候自己也想上手一下
user-0 提问: 这个指针为什么无法输出元素，

回复:
user: user-1
content: 最后一个 printf() 输出的是指针吧，不是指向的元素；要输出指向的元素的值，应加上取值的 * 如 printf(..., *p, *v, *u);

user: user-0
content: 谢谢，大佬。那大佬怎么保存vs2019的对与处理器的修改。

user: user-0
content: 什么是指针指向多维数组？ int a； p=a 那＊p=a是否相等？＊p改变了a改变吗？

user: user-1
content: 多维数组，就是如 aArrp[6][8] 这样的有两个或以上下标的数组，指向这样数组的指针就是了。 不相等，应该是 p=&a; 吧，就是把 a 的地址给 p 即让 p 指向 a；这样，*p=b; 就会改变 a 的，使其和 b 内容一样。
user-0 提问: C语言求助一题，如何归并两个本就有序的文本文件

回复:
user: user-1
content: 可以当cvs文件处理

user: user-2
content: 好像是有些麻烦，不如分两步，首先简单合并如 A aaa\nA bbb\nA ccc\nB aaa\n... 然后再对其进行关键字同项合并。

user: user-0
content: 好像就是这样，谢谢！但是怎么才能同项合并呢

user: user-2
content: 同项合并简单吧，读入一行，分解为关键字和值，比较此关键字和前面是否一样，若一样，输出空格和本次值，若不一样输出回车换行、本次关键字、空格、本次值；继续读入下一行到文件末。
user-0 提问: 求大神帮忙解答一下为什么程序有时候可以正常运行有时候会崩掉

回复:
user: user-1
content: MakeNode() 里的 malloc() 里的 sizeof(ElemType) 是不对的，应该是 sizeof(LNode)

user: user-0
content: 好像确实是这个问题 不过那为什么总会在第二个循环出错

user: user-1
content: 不是总的，我在 win7 32位下用 vc2008 生成，有时第一行就出错的，但在 Ollydbg 加载执行却又能正常，没去细究，大致就是堆内存管理上结构被破坏导致内存访问了错误的地方（malloc() 函数里重设内存块部分）。

user: user-0
content: 哦哦 好的谢谢
user-0 提问: 输入a,b两个数字，求解n的取值范围（新人），求大佬帮忙解惑

回复:
user: user-1
content: int a = 2010, b = 2011;     int n = 1;     double tx = 1;     double lf = 1;     bool bf = false;     while (true) {         if (tx >= a && !bf) {             cout << n<<endl;             bf = true;         }         if (tx > b) {             cout << n - 1;             break;         }         n++;         lf = lf + 1.0 / n;         tx = tx + 1.0 / lf;     }
user-0 提问:  贪吃蛇（队列实现）

回复:
user: user-1
content: #include <iostream> #include <iomanip> #include <vector> using namespace std; int main() {     int dir[4][2]{ {0,1},{1,0},{0,-1},{-1,0} };     int n;      std::cin >> n;     int r = n - 1;     int u = 1;     int d = n - 1;     int l = 0;     vector<vector<int>> board(n, vector<int>(n));     int x = 0, y = 0;     int dict = 0;     for (int i = 0; i < n * n; i++) {         board[x][y] = i;         if (y == r && dict == 0) {             dict=(dict+1)%4;             r--;         }         if (y == l && dict == 2) {             dict = (dict + 1) % 4;             l++;         }         if (x == u && dict == 3) {             dict = (dict + 1) % 4;             u++;         }         if (x == d && dict == 1) {             dict = (dict + 1) % 4;             d--;         }         x += dir[dict][0];         y += dir[dict][1];     }     for (int i = 0; i < n; i++) {         for (int j = 0; j < n; j++) {             cout <<setw(4) << board[i][j];         }            } }
user-0 提问: 多线程间的消息通知机制

回复:
user: user-1
content: 你觉得会有这样的机制吗？

user: user-2
content: 这个，好像不需要吧，线程1 写就是了，写完了给线程2 发个自定义消息让它去读；因为要隔段时间才设置一次，不会发生线程1 在写时，上次的线程2 还没读完，除非线程2 读一个字符处理半天再读下一个字符。

user: user-0
content: 您没明白我的意思，线程2线程1操作共享内存，肯定是要有同步机制的， 但是我还不知道怎么设置同步机制，让他不阻塞，因为像互斥锁这样的同步机制得不到锁是不向下运行的

user: user-2
content: WaitForSingleObject() 这样的函数不是有 dTimeOut 参数吗，到点了即便没拿到所有权，也是会返回的，不会死锁。
user-0 提问: 低级问题。。。。。。。

回复:
user: user-1
content: 按你的代码，输入的时候71.82和A之间不能留空格。或者按你的输入，最后一个scanf的第一个%c前面留个空格试试。

user: user-0
content: 噢，是哦，我就说为什么从=c1没输出，原来是输出了空格

user: user-0
content: 感谢感谢

user: user-2
content: scanf("a=%d b=%d", &a, &b)改为scanf(%d %d", &a, &b)scanf("%c,%c", &c1, &c2)改为scanf(%c %c", &c1, &c2)x,y的值小数点后那么多位是咋回事?在printf中，可以限定小数位的个数为2个，改x=%6.2f,y=%6.2f

user: user-0
content: 感谢

user: user-0
content: 两个%c中间不能用逗号隔开吗？
user-0 提问: 大佬们，为什么这个程序中第12行sum=sum+1.0/c;是对的，sum=sum+1/c;就错了呢？这个.0有什么讲究吗？

回复:
user: user-1
content: 因为常量也有类型

user: user-2
content: sum=sum+1.0/c;算出来是浮点数，sum=sum+1/c;算出来是整数，而且，C语言的整数除法跟我们的算术除法是不同，它不会帮你四舍五入，它是直接不要小数部份，算出来的结果当然是不对了。
user-0 提问: 大佬们，这咋回事啊，什么意思啊

回复:
user: user-1
content: double后面是分号不是逗号这里printf拼写错误

user: user-2
content: 请仔细校对标点符号和拼写。

user: user-3
content: %lf %16.7lf
user-0 提问: 学校让做一个词典，加载的时候出问题了，不报错，自动进调试页面 ，希望大佬给看看怎么回事

回复:
user: user-0
content: 自己改过了 运行成功

user: user-0
content: 希望大佬看看是哪里的错误，指正一下
user-0 提问: 1~4组成无重复数字的三位数

回复:
user: user-1
content: #include <iostream> #include <vector> using namespace std; void func(int nums[4],int pos,int len,int item[3]){     if (len == 0) {         for (int i = 0; i < 3; i++)             printf("%d ", item[i]);         printf("\n");         return;     }     for (int i = pos; i < 4; i++) {         item[pos]=nums[i];         swap(nums[pos], nums[i]);         func(nums, pos + 1, len - 1, item);         swap(nums[pos], nums[i]);              }  } void pailie(int nums[4], int len) {     int item[3]{ 0 };     func(nums, 0, len, item); }  int main() {     int nums[4]{ 1,2,3,4 };     pailie(nums, 3);     }

user: user-2
content: //qplw.cpp #include <stdio.h> #include <string.h> #include <stdlib.h> int v=0; int w=0; int m;//记录字符串长度 int n;//记录字符串中的字符种类数 char map[256];//记录是哪几种字符 int count[256];//记录每种字符有多少个 int stack[1000];//递归用的栈，并记录当前生成的排列 void Make_Map(char *str) {//统计字符串的相关信息     int s[256];     int i;     memset(s,0,sizeof(s));     memset(count,0,sizeof(count));     m=strlen(str);     if (w<1 || m<w) w=m;     while(*str) {         s[*str]++;         str++;     }     n=0;     for (i=0;i<256;i++)         if (s[i]) {             map[n]=i;             count[n]=s[i];             n++;         } } void Find(int depth) {//递归式回溯法生成全排列     if (depth==w) {         int i;         for (i=0;i<depth;i++) putchar(map[stack[i]]);         putchar('\n');     } else {         int i;         if (v && depth>0) {             for (i=0;i<depth;i++) putchar(map[stack[i]]);             putchar('\n');         }         for (i=0;i<n;i++)             if (count[i]) {                 stack[depth]=i;                 count[i]--;                 Find(depth+1);                 count[i]++;             }     } } void main(int argc,char**argv) {     if (argc<2) {         printf("%s 要产生全排列的字符串 [限定长度|-1]\n",argv[0]);         return;     }     if (argc>=3) w=atoi(argv[2]);     if (-1==w) v=1;     Make_Map(argv[1]);     Find(0); } //C:\test>qplw //qplw 要产生全排列的字符串 [限定长度|-1] // //C:\test>qplw 123 //123 //132 //213 //231 //312 //321 // //C:\test>qplw 123 2 //12 //13 //21 //23 //31 //32 // //C:\test>qplw 122333 3 //122 //123 //132 //133 //212 //213 //221 //223 //231 //232 //233 //312 //313 //321 //322 //323 //331 //332 //333 // //C:\test>qplw 123 -1 //1 //12 //123 //13 //132 //2 //21 //213 //23 //231 //3 //31 //312 //32 //321 //   运行qplw 1234 3输出123124132134142143213214231234241243312314321324341342412413421423431432

user: user-3
content: 同学，请参考： #include <stdio.h>  int main() {     int number[] = {1, 2, 3, 4};      for (int indexI = 0; indexI < 4; indexI++) {         for (int indexJ = 0; indexJ < 4; indexJ++) {             for(int indexK = 0; indexK < 4; indexK++) {                 // 保证不重复                 if (indexI!=indexJ && indexI !=indexK &&indexJ!=indexK) {                     printf("%d%d%d\t", number[indexI], number[indexJ], number[indexK]);                 }             }         }         printf("\n");     } }

user: user-4
content: 排列数4x3x2种
user-0 提问: 问一下为什么LocateList里运行到L->length或L->data程序就会结束

回复:
user: user-1
content: 同学，你这个 CreateList传入的是一个指向结构体的二级指针，在此函数内使用了malloc分配后，它的地址与你传入的地址是不同的，所以，CreateList返回后，L指向的一个空指针或野指针，所以，你应该传入L的一级指针。还有malloc分配的空间也借了。这个CreateList函数建议简单点，直接传入一个需要创建的元素个数即可，然后，返回创建好的指针，我将它改成这样： /*函数的声明*/ SeqList* CreateList(int n) {     // L = (SeqList *)malloc(ListSize * sizeof(int)); // 原式是错的，分配内存空间与实际的不符     SeqList *L = (SeqList *)malloc(sizeof(SeqList));         printf("要输入的元素:");     for (int i = 0; i < n; i++) {         int p;         scanf("%d", &p);         L->data[i] = p;     }     printf("顺序表创建成功:");     L->length = n - 1;     for (int j = 0; j < n; j++) {         printf("%d ", L->data[j]);     }     printf("\n");          return L; // 返回创建好的指针 }
user-0 提问: C语言写简单猜数游戏

回复:
user: user-1
content: 前几天也有同学发了这个：     https://bbs.csdn.net/topics/601319902  呵呵，你们是不是同一学校？ #include <stdio.h> #include <time.h> #include <stdlib.h> #include <math.h>  int main() { srand(time(0)); int weishu; printf("请选择猜的位数【1为一位数 2为2位数 3为三位数】"); scanf("%d", &weishu); int a = 0; int n = 0; int number = rand() % ((int) pow(10, weishu)) + 1; printf("number = %d\n", number); printf("请输入%d以内的数字\n", (int) pow(10, weishu)); do { n++; printf("输入你认为的数是："); scanf("%d", &a); if (number > a) { printf("小了\n"); } else if (number < a) { printf("大了\n"); } } while (number != a); printf("对了，你用%d次了\n", n); system("pause");  return 0; }
user-0 提问: 要输出这样一个3*3的二维数组 1 2 3 4 5 6 7 8 9 为什么我这个只有123？

回复:
user: user-1
content: 1、数组的下标是从0开始，你的2个for循环已经越界2、printf函数的数据类型也不对3、第2个for循环完了后就可以直接换行，为什么要if条件？我把它改了，应该这样就可以了： int main () {    float a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};    int i, j;    for (i = 0; i < 3; i++) {        for (j = 0; j < 3; j++) {            printf("%3.0f", a[i][j]);        }        printf("\n");    }    return 0;}

user: user-2
content: #include<stdio.h> int main() {     float a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};     int i,j,n;     for(i=0;i<3;i++){     for(j=0;j<3;j++,n++)         { if(n%3==0) printf("\n");             printf("%3.f",a[i][j]);                     }     } }
user-0 提问: 为什么会出错代码本身并没有错 

回复:
user: user-1
content: //scanf_s("%s", name,sizeof(name));    scanf_s("%s", name);好像这儿不对。

user: user-2
content: 我没看到上面的C代码里面什么地方引用memset，所以无法理解两个图之间的联系。另外，忠告是关注一下两个warning，也许有什么线索呢。
user-0 提问: 如何学好C语言，个人认为不错的一篇文章

回复:
user: user-1
content: 这个文章也许有部分说得有道理，但是有一个最大的问题：提出了问题，却没有给出解决问题的办法

user: user-2
content: 学好C语言，关键是遇到一个会教C语言的老师。

user: user-3
content: 写这些文章的人，只有两种可能：大牛，扯蛋。对号入座。。如：C语言，谭浩强的C，确实有很多瑕疵，但是适合入门。一个没编程基础的人，看K & R的C，无疑天书。。
user-0 提问: 跪求大神指导 安装fftw3时 ./configure --enable-mpi CC=mpicc CXX=mpiCC F77=mpif77，结果出来下面的错误

回复:
user: user-1
content: 楼主解决了吗 我的也是了！求解

user: user-0
content: --with-compiler=/path/to/gcc

user: user-2
content: try sudo
user-0 提问: vc6代码正确，输入数值，不显示结果

回复:
user: user-0
content: 好的好的谢谢谢谢

user: user-1
content: BTW:scanf的格式串里面，字符是不转义的。

user: user-1
content: 如果你认定了代码没错的话，那就只能是输入的错了你得输入 11\n这样然后再敲回车，这样才能满足scanf的胃口。

user: user-2
content: 代码是没有错，你错在scanf("%d\n",&x); 这里不应该多加一个换行符\n，去掉之后，输入数字，直接回车，就可以计算出来了。 但是你加了这个换行符，就相当于你一定要先换行，再输入，才可以。

user: user-2
content: 代码是没有错，你错在        scanf("%d\n",&x);

user: user-3
content: scanf()里，把那个 \n 去掉试试？
user-0 提问: 求帮助！帮忙改下错误（萌新遇难）

回复:
user: user-1
content: 前两个拼写错误吧，第一个是前面预定义时错写了个小写成 SearchPresentplan，第二个是前面预定义时多敲了个字母 t 成 Intput...第三个，就是定义和使用的类型上不一样，自己看着怎么改吧。
user-0 提问: 想做一个译码的题，除了把大写字母比如A就专程A+4的字母 ，但是大写字母可以了输入数字或者小写就乱码是什么问题呢，不知道怎么将数组中是数字的单个元素输出，查了百度说如果是用%c输出要将单个元素加''

回复:
user: user-1
content: 主要问题在于关系运算符不能连着用。

user: user-2
content: 同学，首先，你不能直接循环整个字符数组，如果输入小于10个字符你就出错了，所以，循环条件改用sizeof更好。大写字母那个条件改为：if (ch[i] >= 65 && ch[i] <=90)，小写字母的条件改为if(ch[i]>=97 && ch[i] <=122)，还要增加一个数字的条件：if(ch[i]>=30 && ch[i] <=39)

user: user-3
content: 老师，请问一下在循环条件里面怎么用sizeof
user-0 提问: ，大一新手。pta一个题目怎么都过不了。麻烦好心人看看哪里错了。

回复:
user: user-1
content: 供参考： #include<stdio.h> int main() {     int T,n,k,s;     scanf("%d",&T);     while(T--)     {         scanf("%d",&n);         s = 0;         while(n--)         {             scanf("%d",&k);             s += k;         }         if(s%5==0 && s%7==0 && s%3==0)             printf("YES\n");         else             printf("NO\n");     }     return 0; }

user: user-0
content: 感谢！感谢！

user: user-2
content: 第一，你想的太多了。只要判断一组就输出一个结论就行了，不必煞费苦心地“一起输出”。因为OJ系统没有交互式输入，不会乱的。第二，你想的太少了。要是数据组数稍微多一点，你的a根本就不够用。第三，非必要不用浮点数，因为浮点数不精确。我的意思是不要用pow函数。 当然，落实了第一，后面就都是多余的了。

user: user-0
content: 按照您的思路确实是对的！

user: user-0
content: 我的代码再要输出十几组是就会出错

user: user-0
content: 感谢！
user-0 提问: 第一次在csdn发帖，本人新手刚入门c语言

回复:
user: user-1
content: 同学，提示你变量a和number重复定义了，而且，你写的也太复杂 了，我把它简化了：#include <stdio.h>#include <time.h>#include <stdlib.h>#include <math.h> int main() {    srand(time(0));    int weishu;    printf("请选择猜的位数【1为一位数 2为2位数 3为三位数】");    scanf("%d", &weishu);    int a = 0;    int n = 0;    int number = rand() % ((int) pow(10, weishu)) + 1;    printf("number = %d\n", number);    printf("请输入%d以内的数字\n", (int) pow(10, weishu));    do {        n++;        printf("输入你认为的数是：");        scanf("%d", &a);        if (number > a) {            printf("小了\n");        } else if (number < a) {            printf("大了\n");        }    } while (number != a);    printf("对了，你用%d次了\n", n);    system("pause"); return 0;  }

user: user-2
content: 出错理由你的图片里已经说的很清楚了。你可以把三个case下面具体的内容分别用花括号括起来试试。
user-0 提问: realloc, 静态数组，扩容。为什么可行？

回复:
user: user-1
content: 请明白什么是堆，什么是栈，堆是自由存储区，一般使用链表。栈是连续存储区，堆可以改变一个单元大小，但需要你自己去操作他的生死。栈是连续的，有系统自动创建和回收。也就是说一个单元大小确定了就不能更改。因为更改它会影响下一个单元。realloc，malloc free这些都是针对堆，而不能针对栈。

user: user-2
content: 实践是检验真理的唯一标准。这句话经常有意无意地被误解或者曲解。这种追求易传易记的口号实际上要求简短，所以实际上省略了很多修饰语和限定词。至少不是随便什么行为都有资格称为实践，也不是所有的实践都有资格检验真理的。

user: user-2
content: 如果这样运行是可以的，那么去掉里面realloc那行以后运行，结果将还是一样的。这就足以说明那句realloc实际上不起作用。  异想天开并非进取之道，还是要把思维调整回到C语言的规范轨道上来。

user: user-3
content: 这个，应该不可以吧，应该检查一下 realloc() 的返回值。

user: user-0
content: 既然realloc这么好用，就没有什么风险吗？
user-0 提问: 大一新生C++小白，程序错误百出，但是不知道哪里错了

回复:
user: user-1
content: 同学，我帮你改好了，真的错了很多，最关键是C语言的case语句只能是整数（字符也是整数的特例）： #include #include #include using namespace std; int main() {    double a, b;    char ys;    cin >> a >> b >> ys;    switch (ys) {        case '+':            cout << a << ys << b << "=" << a + b;            break;        case '-':            cout << a << ys << b << "=" << a - b;            break;        case '*':            cout << a << ys << b << "=" << a *b;            break;        case '/': {            if (b == 0.00)                cout << "除数不能为0";            else                cout << a << ys << b << "=" << a / b;        }        break;     case '%':         cout << (int)a << ys << (int)b << "=" << ((int)a % (int)b);         break;     default:         cout << "error!"; } cout << endl;  return 0;  }

user: user-0
content: 感谢感谢，我懂了
user-0 提问: 为什么gcc默认的char类型是有符号的？

回复:
user: user-1
content: 既然C语言标准放任了这个问题存在于Implementation Defined，那就是公说公理，婆说婆理的事儿了，咱们就不要企图从理上理解他了，接受就好。也就是心中不做假设。如果语义上真的只需要字符，那就上char如果需要它来表达小整数，那就按自己的需要明确使用signed char或者unsigned char

user: user-2
content: 与硬件架构相关，gcc也不总是默认char是signed char，在ARM、PPC平台上默认就是unsigned char
user-0 提问: 求助！！新手小白的疑问

回复:
user: user-1
content: while (scanf_s("%d", &x)!=EOF);这一句是啥意思

user: user-1
content: while (scanf_s("%d", &x)!=EOF);

user: user-2
content: 你while语句的那行多写了一个 ;

user: user-0
content: 谢谢！解决啦
user-0 提问: 高性能接收和处理消息问题

回复:
user: user-1
content: 1、自己写吧，练练手，没啥难度。2、s2全局序号没任何意义。s1发送N个数据包，s2可能一次就接收完了。

user: user-0
content: 自己顶一下
user-0 提问: 老是报fopen_s参数太少，但用fopen,又报不安全。

回复:
user: user-1
content: 鼠标右键点fopen_s,再弹出的菜单中选转到定义

user: user-0
content: 老师，转到定义之后呢，怎么操作

user: user-1
content: 按照函数定义调用函数

user: user-0
content: 刚刚解决了，在vs2019中已经取消了fopen，在头文件从新声明（加入）#pragma warning(disable:4996) 就可以了。

user: user-2
content: 好像不太行啊大哥

user: user-0
content: 已经解决：
user-0 提问: 实在搞不懂了，救救。

回复:
user: user-1
content: 我主要强调转义字符是一个编译期概念，编译结束以后就再也没有什么转义字符了。

user: user-0
content: 感谢感谢。

user: user-2
content: 同学，你这个小程序至少有2个地方有问题：1、char *st;这里你只定义了一个字符指针，没有为它分配空间，它在下面读取的时候会出现不可预料的错误。2、输入的“pro\ngrme"，每一个都是正常可显示的字符，不是换行符也不是回车符，所以，它不可能与'\n'或'\0’相等如果你非要将某个字符转换为换行符或回车符，建议使用反斜杠‘/’。

user: user-0
content: 感谢感谢。
user-0 提问: 编写一个JavaScript脚本，在浏览器中输出3位整数中的所有对称数（个位和百位相同）。

回复:
user: user-1
content: 最近刚好在折腾JS  帮你改了下 <html> <body> <script>      var str="3位整数中的所有对称数如下：<br />";      var g,s,b,i=100;                          for(var i=100;i<1000;i++){                 g=i%100;                 s=(i-i%10)/10;                 b=(i-i%100)/100;                 if(b==g){                 str+=" "+i+" ";                    }                         }     document.write(str);  </script> </body> </html>

user: user-0
content: 想不出来啊，有没有大佬啊
user-0 提问: 不知道为什么Compilation Error。求大佬解答

回复:
user: user-1
content: int m,n,x=0,y=0,i,j,k,t; int a[j];  在这里j没有初始值，是不能定义数组a。还有一点，如果你的编译器不支持c99，数组的大小还不可以是变量。

user: user-0
content: 太谢谢了，大佬强啊👏
user-0 提问: 分享一下写了N年的自用编辑器 -- EDX

回复:
user: user-1
content: 使用了下，不错，功能强大，把python调试环境支持下就完美了。！

user: user-2
content: 能undo,redo吗？ 支持键盘宏/脚本宏吗？
user-0 提问: 新人求解，刚入门，很简单的

回复:
user: user-1
content: int a;scanf("%d",&a);int b=a%10100+a/100+a%100/1010;printf("%d",b);  同学，这样才对。你a还没有初值，怎么可以使用它呢？

user: user-0
content: int main(){    int a;    scanf("%d",&a);printf("%d",a%10100+a/100+a%100/1010); 这个就是对的，那我原来那个错哪了

user: user-2
content: printf语句里面不要加&

user: user-0
content: 还是不对

user: user-2
content: a初值没有赋初值，程序是依次执行的，你要使用a就要先赋值再使用，其次，printf不要加&
user-0 提问: 学生刚入门，求解问题

回复:
user: user-1
content: 你的输出有问题printf("语文成绩为 %f\n数学成绩为 ：%f\n",y,s)

user: user-2
content: 你的s有啥用吗？输入是不是得是%lf，倒数第二行差，&y，&s （我也不确定 我也是小白）

user: user-1
content: 输入的话float是%f，double是%lf，printf里面不加&

user: user-3
user-0 提问: 四则运算计算器怎么才能让输出的负数带括号

回复:
user: user-1
content: 1、输入第1个操作数2、输入四则中任一个运算符3、输入第2个操作数4、使用switch语句，根据运算符，进行四则运算。如果在除法中，除数为0，输出“除数不能为0”。否则，在printf中输出结果，如果操作数小于0，加括号。  这位哥哥好象是大学生，我还是小学生，打扰了！

user: user-2
content: so easy! 妈妈再也不用担心你的学习问题～
user-0 提问: 哪里错了或者是语法错误 

回复:
user: user-1
content: 因为当把一个字符串改为整形的时候，系统是以ASCII把来输出的，无需强制转换。

user: user-1
content: 把a=int(x),修改为    a =x;

user: user-2
content: 看着没什么问题啊。

user: user-0
content: 又是你 哈哈

user: user-2
content: 幸会  幸会

user: user-0
content: 该代码就是将英文字母转化为序号1,2,3，——26
user-0 提问: 我不李姐 天哪 我认为的是p=5+6+7 q=6+7+8

回复:
user: user-1
content: 我的是vs2019，运行的结果是15，24，懒得去研究得，反正后面一般用得最多的就只是一个递增或递减，不会无聊的用到这个。

user: user-2
content: 特别安装了一个vs2019看看，果然与我用开的dev-c++是不同的，vs是遵从后置++当整行运算完成后，才改变自身的值！vs2019：15，22dev-c++：18，22

user: user-3
content: 不同编译器不同结果，李不李姐无所谓。

user: user-2
content: 1、后置++（--），是在整行运算完成后才改变自身的值，2、前置++（--），是先改变身的值，再参与整行的运算

user: user-2
content: 我认为p=5+6+7 q=6+7+8是对的，但vs不这么认为，我也不理解，呵呵
user-0 提问: 这个问题怎么解决啊 球球了 大佬们

回复:
user: user-1
content: C 库函数 double pow(double x, double y) 返回 x 的 y 次幂，即 xy。

user: user-2
content: 数据范围很重要，写个最简单的整数的次幂，提供大致的思路，供参考： #include<stdio.h> int fun(int n,int m) {      int  s=1;      while(m--) s *= n;      return s; } int main() {      int a,b,c;      scanf("%d%d%d",&a,&b,&c);      printf("%-9d%-9d%-9d\n%-9d%-9d%-9d\n%-9d%-9d%-9d\n",                               fun(a,1),fun(a,2),fun(a,3),                               fun(b,1),fun(b,2),fun(b,3),                               fun(c,1),fun(c,2),fun(c,3));            return 0; }

user: user-0
content: 谢谢谢谢

user: user-3
content: 数的大小没说  那可不是写个代码就能解决的问题啊
user-0 提问: 关于字符指针定义奇怪的地方

回复:
user: user-1
content: 你发送是一个结构体，接收也应该是一个结构体。message = (struct tcp_msg *)buf;这句肯定是错的，buf是字符串数组，怎么能强转成message结构体？

user: user-0
content: 这个是可以的，就将字符串按照结构体的类型划分空间

user: user-2
content: 一般是这样用吧 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <syspes.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h>  #include "proto.h"  #define DATASIZE    128  int main(int argc,char **argv) {     int sock_fd;     struct sockaddr_in s_addr;     uint8_t data[DATASIZE];     int res;      if(argc < 2)     {         fprintf(stderr,"error : %s + destip!\n",argv[1]);         exit(1);     }      if((sock_fd = socket(AF_INET,SOCK_STREAM,0)) < 0)     {         perror("socket");         exit(1);     }          s_addr.sin_family = AF_INET;     s_addr.sin_port = htons(PORT);     inet_pton(AF_INET,argv[1],&s_addr.sin_addr);     if(connect(sock_fd,(void *)&s_addr,sizeof(s_addr)) < 0)     {         perror("conne);ct");         exit(2);     }          while(1)     {         gets(data);         if(!strcmp(data,"exit"))             break;          if(write(sock_fd,data,DATASIZE) < 0)         {             perror("write");             break;         }          res = read(sock_fd,data,DATASIZE);         if(res < 0)         {             perror("read");             break;         }                      if(res == 0)         {             printf("server is shutdown!\n");             break;         }                  puts(data);     }      close(sock_fd);     exit(0); }

user: user-2
content: ssize_t send(int sockfd, const void *buf, size_t len, int flags); 这个应该传空类型的指针吧，也没见过传结构体的。

user: user-0
content: 这个空指的是可以传任何类型的指针
user-0 提问: 在线等，a[2]={1,2,3,4};这个数组啥意思呢

回复:
user: user-1
content: a[2]={1,2,3,4};就是定义了一个num结构体数组，它的大小是2这样写可能有点费解，如果你把它改为这样：a[2] = {{1, 2}, {3, 4}};就很好理解了

user: user-0
content: 谢谢您的回复，a[2]不是应该表示这个数组中的第三个元素吗？

user: user-1
content: 同学，a[2]在这个位置上是定义，不是取值，而且，你这个数组的数据类型是结构体啊，每个结构体里面定义了2个整型。

user: user-0
content: 就是这里有点糊涂，给您添麻烦了！那 *p=a;是不是表示指针指向了a数组的第一个位置呢
user-0 提问: gbk编码中怎么区分中文和英文？判断方式是什么？

回复:
user: user-1
content: 转为Unicode，切分，转回GBK

user: user-2
content: IsDBCSLeadByte

user: user-0
content: 大佬，这是什么意思？没有看懂

user: user-0
content: IsDBCSLeadByte只是判断一个指定字节是否为一个双字节字符的头一个字符，而汉字的高字节和低字节都是大于0x80的，所以没什么区别

user: user-2
content: 方法，方法，方法... 从buffer[0]开始怎么判断到需要截取的位置
user-0 提问: 求求了 想一晚上了 if语句没生效

回复:
user: user-0
content: 没事了没事了 我处理好了 谢谢大家

user: user-1
content: 楼主的意思，是输入三个一位数，1--9 之间？

user: user-2
content: 啥叫“当有0的时候消掉0”？

user: user-0
content: 刚把if删了。。
user-0 提问: 为什么输出结果数据有问题？求教

回复:
user: user-1
content: 是不是因为BMR是浮点数，而655和230都是整型

user: user-2
content: 单步运行，看看各处的各相关值是否和预期一致，就象你这里好像没给 M 和 F 变量赋值就用上了，编译时不给 error 起码也是 warning 么？数据的输入，好像要和设定的格式完全一致的，否则可能有误。
user-0 提问: 代码看起来没有错，可是为什么不会停止

回复:
user: user-0
content: 已解决，第一个for语句的括号位置不对：以下是正确的代码：#include <stdio.h>#include <string.h> struct Person{    char name[30];    int count; }leader[3] = { "li",0,"zhang",0,"ran",0 }; int main() { int i, j; for (i = 0; i < 10; i++) {     char leader_name[30];     printf_s("please enter the name of the elector:\n");     scanf_s("%s", leader_name, 30);     for (j = 0; j < 3; j++)     {         if (strcmp(leader_name, leader[j].name) == 0) leader[j].count++;      } } printf_s("\nResult:\n"); for (i = 0; i < 3; i++)     {         printf_s("%s,%d", leader[i].name, leader[i].count);     }            return 0;
user-0 提问: json-c库的浮点型存储问题

回复:
user: user-1
content: 浮点数格式  ▼     http://bbs.csdn.net/topics/390676437

user: user-2
content: 楼主您对标准的误会到今天就打住吧，这样的才是标准的，而不是您以为那样。

user: user-0
content: 是吗？肤浅了

user: user-0
content: 别只知道喷 那点资料让我这个菜鸟学习学习嘛， 你说这句话对你我都没啥益处对不对
user-0 提问: 为什么下面这段用c语言判断回文数的代码在vs2019上跑的出来，在vc++2010上跑不出来

回复:
user: user-1
content: #include <stdio.h> #include <string.h> #define N 80  int fun(char* str) {     int sz = strlen(str);     int i = 0, j = sz-1;     while (str[i] == str[j])     {         i++;         j--;         if (i >= j)             break;     }      return (i >= j); }   void main() {     char s[N];     FILE* out;     char* test[] = { "1234321","123421","123321","abcdCBA" };     int i;     printf("Enter a string : ");     gets(s);     printf("\n\n");     puts(s);          if (fun(s))         printf("YES\n");     else         printf("NO\n");     /************************************/     out = fopen("out.dat", "w");     for (i = 0; i < 4; i++)         if (fun(test[i]))             fprintf(out, "%s --> YES\n", test[i]);         else             fprintf(out, "%s --> NO\n", test[i]);     fclose(out);     /************************************/ }

user: user-2
content: 你的“int sz = sizeof(str) / sizeof(str[0]);”这条语句错了，sizeof(str)返回的是指针的大小，32位程序是4，64位程序是8。如果要返回空终结字符数组中元素的个数，应该用strlen(str)。

user: user-3
content: 嗯，我也不信这个代码能在vs任何版本上得到正确结果。

user: user-4
content: sz 的求取是错的，直接用求字符串长度减1 就是了。
user-0 提问: codeblock怎么打开dev c++的项目

回复:
user: user-1
content: 为什么要打开其他软件的项目呢？作业这种东西只需要交源程序就可以了，基本和项目无关。就算有关，也只需要在codeblock中打开源程序，编写完成后使用dev c++编译调试。 最后，我感觉你应该是对老师的要求理解有误！这种要求最多就是上机考试时只提供dev c++环境，所以叫你们熟悉它
user-0 提问: 求大佬帮忙看看这是咋了

回复:
user: user-1
content: 同学，你错误的地方就是scanf这句用错了！使用scanf时最好给输入者清析的提示，把它改成这样就更好啦： int main() {    float a, b, h, s; printf("请输入梯形的上、下底和高(请用,分隔它们)："); scanf("%f,%f,%f", &a, &b, &h); s = (a + b) * h / 2; printf("梯形上底=%8.2f, 下底=%8.2f, 高=%8.2f, 它的面积=%8.2f\n", a, b, h, s);  return 0;  }

user: user-0
content: ok,感谢，想这个想了好久

user: user-2
content: and cut '&' off from printf

user: user-2
content: typea=4,b=6,h=4then press enteras if your scanf format
user-0 提问: 急turboc的问题

回复:
user: user-1
content: 应该是环境没设置好。另外没在dosbox下玩过，我在virtualbox下玩过。路径里有没有超过8个的文件名，空格等字符，dos都是不支持的  好久不见有人用这个了，你是什么学校的，竟然还在用tc？

user: user-2
content: 图怎么换了。应该#include <graphics.h>

user: user-3
content: 哦，图形啊，我近些年来一直认为怀念TC图形的行为只能叫做抱残守缺。是的，说的就是布置这种作业的老师。你知道让大黄蜂把自己伪装成农用小四轮拖拉机有多么困难么，居然还抱怨人家装得不像。//---------------------------------------------------------------//以上是吐槽。//---------------------------------------------------------------编译出错说明你设置的不对。回VC去加装easyx库用来模拟TC图形库是可行的方案。

user: user-3
content: 貌似程序在等输入。

user: user-4
content: 代码内容帖上来

user: user-0
content: 老师求你帮忙看看

user: user-2
content: 哦，你是TC都没运行起来，可能是你下载的版本有问题

user: user-2
content: Alt+F，OS Shell，再运行你的程序

user: user-0
content: 大神，不行唉 我能私信问你吗
user-0 提问: 调用函数的返回类别...

回复:
user: user-1
content: 使用struct fa就是值传递，因为它是一个结构体，所以，传递进函数需要将原数据复制一份副本，而且，你在函数内修改的是这份复制的副本，对原数据是没有影响的， 这样降低效率又不是你想要的，因此，只能是使用struct fa *传结构体的指针。另外，因为函数传进来的是结构体指针，所以，也不需要返回值。

user: user-2
content: 请不要碎片化学习，知识这玩意是有体系的，只有学习了前置内容，才能正确使用术语进行提问。

user: user-0
content: 这是一道改错题，不懂为什么调用函数返回指针的地址，其类别为什么是struct fa *,不用’*‘可以吗
user-0 提问: 简单的题但却疑惑并且新人懵逼中

回复:
user: user-1
content: 我经常说，学习汇编和C之前，要抛弃小时候的”自动“观念，机器不会自动做任何事。我是说，你输入一个数和输出一个数之间啥也没有，在那中间机器不会自动给你做任何事。

user: user-0
content: 我懂了！谢谢！
user-0 提问: 这个错误怎么改呢，求大神

回复:
user: user-1
content: 1、先声明函数：int insertSeqList(SeqList *L, int i);2、不能在函数里面，定义另一个函数。我刚学C语言时，最常犯的错误就是在main()函数里定义了另一个函数，呵呵。

user: user-2
content: 直译一下：函数定义不能放在这里。所以和你贴出来的部分没啥关系，问题在你没贴出来的部分里面。
user-0 提问: 怎么将b链表中有的数但a链表中没有的数插进a链表中

回复:
user: user-1
content: 同学，参考我在B站的分享：     https://space.bilibili.com/1901488254   循环A链表，遍历B链表查找，没有再插入。

user: user-2
content: 复杂度有点高了，直接用一个数组进行提前记录可以更好
user-0 提问: 二级指针的问题。。。。

回复:
user: user-1
content: 定义时： ... *p;表示p为指向...的指针 ... &r;表示r为...的引用，且只有c++才有引用  表达式中： *p表示取指针p指向的内容 &r表示取指向r的指针

user: user-2
content: 同学，我举个简单的例子，你就明白了：int main() {    int **a;    int *p;    int data = 100;    p = &data;    a = &p;  printf("**a = %X, *a = %X, data = %d\n", a, p, **a);  return 0;  }
user-0 提问: 为什么我不能输出我的单链表

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

user: user-0
content: 似乎是第38行并没有改变L，InitList对L的修改只停留在InitList内，当我在InitList内输出时就可以成功了 修改后，代码如下： #include <stdio.h> #include <stdlib.h>  typedef struct LNode {     int data;     struct LNode *next; } LNode, *LinkList;  void InitList(LinkList L) {     LNode *s, *p;                       //S指向新申请的结点，P指向后结点     L = (LNode *)malloc(sizeof(LNode)); //建立头结点     L->data = -1;     L->next = NULL;     p = L; //P指向头结点     int n;     scanf("%d", &n);     for (; n != 0;) {         s = (LinkList)malloc(sizeof(LNode)); //新建结点         s->data = n; //放入data         s->next = NULL;         p->next = s;                        //P结点指向新结点S         p = s;                        //p取代s结点         scanf("%d", &n);     }     p->next = NULL; //终端结点不指向     outlist(L); }  void outlist(LinkList L ) {     LNode *p;     for (p = L->next; p != NULL; p = p->next) {         printf("%d ", p->data);     }     printf("\n"); }  int main() {     LinkList L;     InitList(&L);     //相当于传入一个变量，而非地址？     //outlist(L);     return 0; }

user: user-2
content: 修改如下，供参考： #include <stdio.h> #include <stdlib.h>  typedef struct LNode {     int data;     struct LNode *next; } LNode, *LinkList;  void InitList(LinkList * L) {     LNode *s, *p;                       //S指向新申请的结点，P指向后结点     (*L) = (LNode *)malloc(sizeof(LNode)); //建立头结点     (*L)->data = -1;     (*L)->next = NULL;     p = (*L); //P指向头结点     int n;     scanf("%d", &n);     for (; n != 0;) {         s = (LNode *)malloc(sizeof(LNode)); //新建结点         s->data = n;                        //放入data         p->next = s;                        //P结点指向新结点S         p = p->next;                        //p取代s结点         scanf("%d", &n);     }     p->next = NULL; //终端结点不指向 }  void outlist(LinkList L ) {     LinkList p = L->next;//LinkList p = L;                          //L = L->next;     while ( p != NULL ) {         printf("%d ", p->data);         p = p->next;     } }   int main() {     LinkList L;     InitList(&L);     outlist(L);          return 0; }

user: user-3
content: 同学，你这个程序很多错误的地方，重复的语句，你可以从我分享的网盘中下载我关于链表的实现（增、删、改、查、排序）：     https://space.bilibili.com/1901488254
user-0 提问: 关于反序输出递归函数的疑问

回复:
user: user-1
content: reverse(&s[1]);就是reverse(s+1);嘛。

user: user-0
content: 试了一下，发现确实可以这样，谢谢大佬的建议

user: user-2
content: 递归算法都比较烧脑，这个算法关键在于这句： reverse(&s[1]);它实质上就是每次都向右移动了字符串的首地址一个位置，你把 putchar(s[0]);换成这样：printf("s=%s, s[0]=%c\n", s, s[0]);就很容易看出，它是如何做的。

user: user-0
content: 对，就是这句 reverse(&s[1]);我不理解它是如何运作以达到这个效果的，使用了后面的方法看到了怎么“归”，就是不知道怎么递出去的 谢谢大佬解惑