Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于数据结构和抽象数据类型的理解问题？

回复:
user: user-0
content: 引用 8 楼 百 五 花 大 绑的回复:随便找本 数据结构与算法的书前言 就会讲很多相关的知识   I.e Data Structures Using C, 2nd edition 觉得老师讲的重逻辑上的理解，讲思路，很多东西不自己去查去看就不知道为什么

user: user-0
content: 引用 8 楼 百 五 花 大 绑的回复:随便找本 数据结构与算法的书前言 就会讲很多相关的知识   I.e Data Structures Using C, 2nd edition 目前在学严蔚敏的数据结构。小白级别，请见谅！

user: user-1
content: 随便找本 数据结构与算法的书前言 就会讲很多相关的知识   I.e Data Structures Using C, 2nd edition

user: user-0
content: 最后自己差不多想明白了

user: user-0
content: 不好意思我们还没有学封装这些知识，能否再详细讲解一下呢？还有上面最初提到的三个问题可否解答一下呢？（最近复习感觉总卡在这个点，理解不透彻）感激不尽！！！

user: user-1
content: 需要复杂的结构来配合算法，struct 都是链表之类的基础，可以理解为封装

user: user-0
content: 引用 2 楼 自信男孩的回复:typedef是起别名，建议楼主在网上搜一下typedef以及其用法。  如果对数据结构和结构体有异议，建议自己写代码测试一下，理论联系实际，用实践去指导理论 关于typedef,还有我以上的问题我都搜索过了，但没有我想要的答案，数据结构的具体代码实现我觉得我这些问题搞不清楚，没办法写代码，写出来的也是没有真正理解的。所以您可否针对我所说的三个具体问题来解答一下呢？感激不尽！！

user: user-0
content: 引用 1 楼 百 五 花 大 绑的回复: typedef struct     {         Selemtype *base;         Selemtype *top;         int stacksize;     } SqStack;  SqStack * pSqStack = NULL;   struct     {         Selemtype *base;         Selemtype *top;         int stacksize;     } SqStack;  struct SqStack * pSqStack = NULL;   typedef 是有作用的 其实疑惑点不在是不是使用typedef来简化struct类名，而是为什么有struct这样一个整体的存储结构定义。

user: user-2
content: typedef是起别名，建议楼主在网上搜一下typedef以及其用法。  如果对数据结构和结构体有异议，建议自己写代码测试一下，理论联系实际，用实践去指导理论

user: user-1
content: typedef struct     {         Selemtype *base;         Selemtype *top;         int stacksize;     } SqStack;  SqStack * pSqStack = NULL;   struct     {         Selemtype *base;         Selemtype *top;         int stacksize;     } SqStack;  struct SqStack * pSqStack = NULL;   typedef 是有作用的
user-0 提问: 求助

回复:
user: user-0
content: 引用 1 楼 百 五 花 大 绑的回复:第一个就是读入用户回车前的输入，存到a[]里面 好的，谢谢😜

user: user-1
content: 第一个就是读入用户回车前的输入，存到a[]里面
user-0 提问: VC++6.0编译没有错误，但是无法运行

回复:
user: user-1
content: 看一下fscanf.c的第54行，VC++6.0挺好的，我的最爱，没有之一

user: user-2
content: fscanf.c文件看下54行是什么内容？

user: user-3
content: 好像是想读文件，但是读到的是空     看看要读的文件存在吗？ 内容是不是空

user: user-4
content: VC++6.0，太老了，早该淘汰了。你还用它，自找麻烦吧。 VC++6.0 IDE，C99就不支持，现在是C11，C18了。你还想古董支持？？？
user-0 提问: 机器数采用补码规格化，求机器数字长16位的计算机表示数的范围

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

user: user-0
content: 这个是计算机组成原理的题  那个数 是这个意思  阶符 阶数 数符 尾码

user: user-2
content: 仅供参考：
user-0 提问: 为什么结果在自定义函数中正常，返回到主函数输出异常？

回复:
user: user-1
content: 楼主返回的其实是anw的地址，虽然返回的是ans，但是ans指向了anw。问题就在这里，anw是什么变量，局部变量，函数f调用结束后anw就被释放了，所以返回anw的地址没有意义。  修改的办法是改变anw的属性，进而改变该变量的生命周期。在anw前加一个static，这样该变量的生命周期就是从定义开始直到程序退出一直有效。

user: user-2
content: if ( n == 0 )//递归出口     {         *anw = { '1' };         ans = anw;         return ans;     }  典型的指针错误。 ans指向局部变量anw然后返回。 anw在函数结束后不再有效，所以返回后打印结果就不对了。
user-0 提问: C语言怎么实现对输入的严谨检查

回复:
user: user-1
content: 仅供参考：//输入两个整数 #include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }  #include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-2
content: 请参考《C++控制台程序判断输入的数字》 希望能够帮到您！

user: user-3
content: 使用getchar()，一个一个的分析，发现不合法，就提示， 如果合法，自己拼接数字，字符串，等等。

user: user-4
content: 用正则表达式试试，数字时\d
user-0 提问: 关于利用C语言为快递公司设计快递投递路线的优化程序（求帮助感谢）

回复:
user: user-1
content: 学习一下OSPF就好，一样一样地。

user: user-0
content: 引用 3 楼 Ricentch·J·Satoware 的回复:引用 2 楼 早打大打打核战争 的回复:每个城市都可能有包裹投递到其他城市？每个中转点可以暂存？可以杂凑？那太复杂了，是NP问题，要取得最优解非常困难，只能穷举。应该没有那么复杂，就很直接的优化路线问题，大佬简单点想就行叭 大佬有思路吗

user: user-0
content: 引用 2 楼 早打大打打核战争 的回复:每个城市都可能有包裹投递到其他城市？每个中转点可以暂存？可以杂凑？那太复杂了，是NP问题，要取得最优解非常困难，只能穷举。应该没有那么复杂，就很直接的优化路线问题，大佬简单点想就行叭

user: user-2
content: 这么貌似不容易，需要好好研究图论和算法。

user: user-3
content: 每个城市都可能有包裹投递到其他城市？每个中转点可以暂存？可以杂凑？那太复杂了，是NP问题，要取得最优解非常困难，只能穷举。
user-0 提问: C语言中编译时自动赋初值0或空字符'\0'的变量有哪些？

回复:
user: user-1
content: 自动赋值不放心，还是自己复制靠谱。

user: user-0
content: 引用 6 楼 ctrigger的回复:[quote=引用 5 楼 AruNi° ഒ 的回复:][quote=引用 3 楼 user-2的回复:]还是自己赋值比较好，没必要去纠结哪些变量是自动赋值的 关键是做选择题或者填空题的时候要知道。[/quote]  编译器不一样，结果可能就不一样。 纠结这个有啥意义呢？？？[/quote] 好的吧！！！

user: user-1
content: 引用 5 楼 AruNi° ഒ 的回复:[quote=引用 3 楼 user-2的回复:]还是自己赋值比较好，没必要去纠结哪些变量是自动赋值的 关键是做选择题或者填空题的时候要知道。[/quote]  编译器不一样，结果可能就不一样。 纠结这个有啥意义呢？？？

user: user-0
content: 引用 3 楼 user-2的回复:还是自己赋值比较好，没必要去纠结哪些变量是自动赋值的 关键是做选择题或者填空题的时候要知道。

user: user-0
content: 引用 3 楼 user-2的回复:还是自己赋值比较好，没必要去纠结哪些变量是自动赋值的 关键是有时候做选择题或者填空题会遇到，

user: user-2
content: 还是自己赋值比较好，没必要去纠结哪些变量是自动赋值的

user: user-0
content: 引用 1 楼 ctrigger的回复:自动赋值不放心，还是自己复制靠谱。 有时候做题会遇到没有赋值的
user-0 提问: 求助

回复:
user: user-0
content: 引用 3 楼 user-1的回复:把第5行这句改下，不要中间的‘，’号，再输入试下：scanf("%d %d",&a,&b);，输入时两个数字间空格就可以了。 请问为什么加逗号就不可以了

user: user-0
content: 引用 4 楼 m0_52586836的回复:[quote=引用 3 楼 user-1的回复:]把第5行这句改下，不要中间的‘，’号，再输入试下：scanf("%d %d",&a,&b);，输入时两个数字间空格就可以了。 还是和之前一样[/quote] 抱歉，可以了，刚刚看错了

user: user-0
content: 引用 3 楼 user-1的回复:把第5行这句改下，不要中间的‘，’号，再输入试下：scanf("%d %d",&a,&b);，输入时两个数字间空格就可以了。 还是和之前一样

user: user-1
content: 把第5行这句改下，不要中间的‘，’号，再输入试下：scanf("%d %d",&a,&b);，输入时两个数字间空格就可以了。

user: user-0
content: 引用 1 楼 user-1的回复:第5行 scanf("%d,%d",&a,&b);，你输入的时候两个数字之间是有‘，’号的，例如：2，3  ，你是不把这个‘，’号漏掉了。 没有漏，而且不管我输什么数字进去自定义函数的值总是取a而不是a+b

user: user-1
content: 第5行 scanf("%d,%d",&a,&b);，你输入的时候两个数字之间是有‘，’号的，例如：2，3  ，你是不把这个‘，’号漏掉了。

user: user-1
content: 引用引用 3 楼 user-1的回复: 把第5行这句改下，不要中间的‘，’号，再输入试下： C/C++ code ? 1 scanf("%d %d",&a,&b); ，输入时两个数字间空格就可以了。  请问为什么加逗号就不可以了不是说加逗号不可以，这里有全角和半角之分，如果你在scanf("%d，%d",&a,&b);加的是全角的逗号，那你在输入时必须也是全角状态的逗号。如果scanf("%d,%d",&a,&b);加入的是半角的逗号，那在输入时必须是半角的逗号。问题在于全角和半角你很难分清的情况下，所以建议你干脆把逗号取消，改变下输入格式试试喽。逗号的全角和半角之分，是因为全角状态是两个字节来存储一个逗号，半角状态是一个字节存储一个逗号，如果在输入的时候对不上，电脑就不认识了。
user-0 提问: C语言小白，请求大神指点，为什么运行不了，怎么改一下（用了while，稍有繁琐）

回复:
user: user-1
content: 第6行 m=factorize(x);这句调用函数是错的，void factorize(int x)定义为空函数没有返回值。第6行改为：factorize(x);

user: user-2
content: 代码也不贴上了，谁有空给你一个一个字母敲进去。 代码完成什么功能也没说，只有天知道你想干什么。
user-0 提问: 删除数字

回复:
user: user-1
content: delete是关键字，不能定义成函数。引用int delete(int d,int a[]) { int j; for(j=0;a[j]==d;j++) { } return j;  }这个函数，for里面至少要有个‘；’。修改如下，供参考：#include<stdio.h> int delete_my(int d,int a[],int n);  int main(int argc, char* argv[]) {     int a[6]={3,2,1,4,5,6};     int d,i,pos;     printf("请输入您要删除的数\n");     scanf("%d",&d);      pos=delete_my(d,a,6);     if(pos<=5){        for(i=pos;i<5;i++)           {            a[i]=a[i+1];           }        pos=6-1;     }     for(i=0;i<pos;i++)        {          printf("%4d",a[i]);        }     system("pause");     return 0; }  int delete_my(int d,int a[],int n) {     int j;     for(j=0;j<n;j++){         if(a[j] == d ) break;     }     return j;  }
user-0 提问: 视觉追踪，可以选用stm32单片机和yolo平台实现，只会c语言，哪个更容易实现

回复:
user: user-1
content: 两个不一样的东西，怎么比较呢？ stm32，只是st公司的微处理器，是硬件。目前来说貌似性能有效，视觉算法跑不起来。 yolo，只是个对象检测算法，详细情况需要研究Redmon大神的论文。

user: user-2
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-3
content: 兄弟 你弄了吗
user-0 提问: 求大神帮忙康康

回复:
user: user-0
content: 引用 2 楼 自信男孩的回复:if(fp==NULL) { printf("错误");  } 这个地方已经打开失败了，还要继续往下执行吗？后面怎么再用这个fp？  if(fp==NULL) { printf("错误");  return; } 有道理，感谢大佬

user: user-0
content: 引用 1 楼 赵4老师的回复:books[N+1]越界了吧。 这是结构体变量，我定了5000个

user: user-1
content: if(fp==NULL) { printf("错误");  } 这个地方已经打开失败了，还要继续往下执行吗？后面怎么再用这个fp？  if(fp==NULL) { printf("错误");  return; }

user: user-2
content: books[N+1]越界了吧。
user-0 提问: 二叉树的最近公共祖先

回复:
user: user-1
content: 哪里不理解？我觉得思路挺清晰的。 首先，查找共同祖先就要涉及到树的遍历，那么就先找出遍历的主干代码，就是以下代码，记为A代码 while((cur || top>0) && ancestor != root) {     while(cut) {//把左节点都压栈直到左节点为null         stack[top++] = cut;          cur = cur->left;     }     cur = stack[--top]; //把最后乳栈的左节点出栈     cur = cur->right; //遍历出栈节点的右节点（这里如果右节点存在接下来就会进入while(cur)遍历右节点的左子树 }  如果不明白为什么是遍历，就拿你的例子来套入看看 首先whlie(cur)会把3，5，6入栈 然后6出栈，6没有右节点，所以下一轮while(cur)被跳过 然后5出栈，5有右节点2，所以下一轮while(cur)，2和7入栈 然后7出栈，7没有右节点，所以下一轮while(cur)被跳过 然后2出栈，2有右节点44所以下一轮while(cur)，4入栈 等等，依次类推  好了，上面找到遍历的主干了，接下来要知道遍历是为了什么？是为了找共同祖先，怎么找？先来看以下代码，记为B代码 if(cur= == p || cur == q) {     if(ancestor) break; //当两个pq节点都找到就会进入这里     ancestor = cur; //否则只找到p或q其中一个     ancestorDepth = top; //会走里记录ancestor和深度 } 不难发现，这段代码是控制在遍历的过程中找到了p和q两个节点就退出循环结束遍历，说明走到这里就是找到祖先节点了。然而这里明明是找到p和q，跟祖先没关系啊。别急，再来看以下代码，记为C代码 //首先从A代码知道，top越小就越是祖先节点（因为是父节点先入栈再左子节点入栈），从B代码知道找到p或q任意一个节点ancestorDepth才开始有值 if(top < ancestorDepth) { //所以进入这里说明cur是p或q其中一个的祖先节点     ancestor = cur;     ancestorDepth = top; } 再结合B代码就知道进入if(ancestor)break;时，ancestor是q或p其中一个的祖先节点，从该祖先节点也能找到p或q另外一个节点，说明ancestor就是p和q的共同祖先

user: user-1
content: 哪里不理解？我觉得思路挺清晰的。 首先，查找共同祖先就要涉及到树的遍历，那么就先找出遍历的主干代码，就是以下代码，记为A代码 while((cur || top>0) && ancestor != root) {     while(cut) {//把左节点都压栈直到左节点为null         stack[top++] = cut;          cur = cur->left;     }     cur = stack[--top]; //把最后乳栈的左节点出栈     cur = cur->right; //遍历出栈节点的右节点（这里如果右节点存在接下来就会进入while(cur)遍历右节点的左子树 }  如果不明白为什么是遍历，就拿你的例子来套入看看 首先whlie(cur)会把3，5，6入栈 然后6出栈，6没有右节点，所以下一轮while(cur)被跳过 然后5出栈，5有右节点2，所以下一轮while(cur)，2和7入栈 然后7出栈，7没有右节点，所以下一轮while(cur)被跳过 然后2出栈，2有右节点44所以下一轮while(cur)，4入栈 等等，依次类推  好了，上面找到遍历的主干了，接下来要知道遍历是为了什么？是为了找共同祖先，怎么找？先来看以下代码，记为B代码 if(cur= == p || cur == q) {     if(ancestor) break; //当两个pq节点都找到就会进入这里     ancestor = cur; //否则只找到p或q其中一个     ancestorDepth = top; //会走里记录ancestor和深度 } 不难发现，这段代码是控制在遍历的过程中找到了p和q两个节点就退出循环结束遍历，说明走到这里就是找到祖先节点了。然而这里明明是找到p和q，跟祖先没关系啊。别急，再来看以下代码，记为C代码 //首先从A代码知道，top越小就越是祖先节点（因为是父节点先入栈再左子节点入栈），从B代码知道找到p或q任意一个节点ancestorDepth才开始有值 if(top < ancestorDepth) { //所以进入这里说明cur是p或q其中一个的祖先节点     ancestor = cur;     ancestorDepth = top; } 再结合B代码就知道进入if(ancestor)break;时，ancestor是q或p其中一个的祖先节点，从该祖先节点也能找到p或q另外一个节点，说明ancestor就是p和q的共同祖先
user-0 提问: 请问一下窗口的坐标

回复:
user: user-1
content: 窗口是二维平面的，用x和y就能表示坐标。 如果是三维立体空间，就用x，y，z表示坐标。

user: user-2
content: 这是自己定义的结构体，用来保存坐标，所以x，y就能代表坐标  比如  A=坐标 那么A就能直接代表坐标，这不是很容易理解吗？

user: user-3
content: C语言没函数重载，是不是C++？？？
user-0 提问: 嵌入式编写程序（c )

回复:
user: user-1
content: 这样的题不算难，用数组啥的，加些判断，应该自己尝试去写。

user: user-0
content: 额，这是嵌入式老师的留堂作业。大佬能不能指点一下

user: user-2
content: 这个和嵌入式有啥关系呢？
user-0 提问: C和指针 第六章课后习题 编程题第三题 答案为什么是这样的啊

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复：[quote=引用 2 楼 IsTanbuL_Night 的回复:][quote=引用 1 楼 user-2 的回复：] for结束，last_char == '\0 ' last_char--，指向最后一个字符。哦哦 因为for 循环后面有个分号 所以 直接执行完这个语句 对吧[/quote] for后面是有分号的，last_char--不是循环体内的语句[/quote]好的 谢谢

user: user-1
content: 引用 2 楼 IsTanbuL_Night 的回复:[quote=引用 1 楼 user-2 的回复：] for结束，last_char == '\0 ' last_char--，指向最后一个字符。哦哦 因为for 循环后面有个分号 所以 直接执行完这个语句 对吧[/quote] for后面是有分号的，last_char--不是循环体内的语句

user: user-0
content: 引用 1 楼 user-2 的回复：for结束，last_char == '\0 ' last_char--，指向最后一个字符。哦哦 因为for 循环后面有个分号 所以 直接执行完这个语句 对吧

user: user-2
content: for结束，last_char == '\0 ' last_char--，指向最后一个字符。
user-0 提问: 设计函数，根据ASCII码求二维字符数组的最大值和最小值。 要求：用全局变量Max和Min来存储要求的最大值和最小值

回复:
user: user-1
content: 确实不难，这个可以自己做做看

user: user-2
content: 你好懒哦。。这也没难度，都不想动手？？？
user-0 提问: 求大佬帮忙修改一下

回复:
user: user-1
content: 要弄清左值和右值的区别， 左值代表一个变量，右值一般是一个表达式。表达式是不能进行赋值的，要想弄请结构体指针和结构体变量的区别，先弄请什么是指针，结构体指针就是使用一个变量去指向一个结构体的指针，就像放风筝一样，内存比喻为整个天空，风筝就是你那个结构体，指针就是风筝线，我们要控制风筝，使用风筝线就能控制结构体的各种变量。加油，c的路程还有很远

user: user-1
content: user[i].balance = user[i].balance+ l;   你干什么呢  不是你那么赋值呀 ，你差点把我弄糊涂了

user: user-2
content: 一个是结构体变量，一个是结构体指针。区别就是一个变量名，一个是变量地址。

user: user-3
content: struct users *user是结构体指针

user: user-0
content: 还有为什么左值显示无法修改，谢谢各位大佬
user-0 提问: 为什么同样的代码  在vc一直显示错误  换到DC就没有问题呢  这个代码也没有错误的吧

回复:
user: user-0
content: 引用 4 楼 赵4老师 的回复:换这个VC6 VC6EN https://pan.baidu.com/s/1_t4HPLJZCdiIaJKecguK_A好的谢谢

user: user-1
content: 换这个VC6 VC6EN https://pan.baidu.com/s/1_t4HPLJZCdiIaJKecguK_A

user: user-0
content: vc++6.0的

user: user-2
content: 确认一下环境问题，包括编译器版本等

user: user-3
content: 没问题，代码符合C最新标准。
user-0 提问: 报错

回复:
user: user-1
content: 文件名和路径别带空格。

user: user-2
content: 文件名不要有空格

user: user-3
content: hello world中间加个下划线都不至于会报错。。。

user: user-0
content: 我又懂了

user: user-4
content: 文件名不能有空格吧，否则认为是两个文件
user-0 提问: 求大佬帮忙

回复:
user: user-0
content: 这样有啥问题吗

user: user-0
content: int input(char ar2[][21]) { int i; for(i=0;i<10;i++) { scanf("%s",&ar2[i]); if(strcmp(ar2[i],"*END*")==0) {break;} } return i; }  void paixu(char ar2[][21], int n) { int i; char ch[40]; if(n==0) {printf("NO WORD");} for(i=0;i<n-1;i++) { strcmp(ar2[i],ar2[i+1]); if(strcmp(ar2[i],ar2[i+1])>=0) { strcpy(ch,ar2[i]); strcpy(ar2[i],ar2[i+1]); strcpy(ar2[i+1],ch); } }  } void printArr(char ar2[][21], int n) { char ch=' '; int i; for(i=0;i<n;i++) { if(i==n-1) { 	ch='\n'; } printf("%s%c",ar2[i],ch); } }

user: user-0
content: int input(char ar2[][21]) { int i; for(i=0;i<10;i++) { scanf("%c",&ar2[i]); if(strcmp(ar2[i],"*END*")==0) {break;} } return i; } 这样输入有问题吗

user: user-1
content: 抱歉。上面基本实现功能。但不符合楼主要求。忽略吧。。

user: user-1
content: 仅供参考： #include <stdio.h> #include <string.h> #include <stdlib.h>  int my_cmp(const void *a, const void *b) { 	char *p = *(char **)a; 	char *q = *(char **)b; 	return strcmp(p, q); }  int main(void) { 	char word[21], *arr[10]; 	int i, size = 0; 	 	while(1) 	{ 		scanf("%s", word); 		if(strcmp(word, "END") == 0) break; 		arr[size] = malloc(strlen(word) + 1); 		strcpy(arr[size], word); 		size++; 		if(size == 10) break; 	} 	 	qsort(arr, size, sizeof(char *), my_cmp); 	 	for(i=0; i<size; i++) 	{ 		printf("%s\t", arr[i]); 		free(arr[i]); 	} 	 	return 0; }

user: user-2
content: 排序和输出都是有问题的。自己先调试一下吧

user: user-2
content: #define MAX_COL_SIZE        21 int input(char ar2[][MAX_COL_SIZE]) {     int i=0;     //while(i<10&&ar2!='*END*')     while(i<10&&strcmp(ar2[i], "END"))     {         //gets(ar2);         fgets(ar2[i], MAX_COL_SIZE, stdin);         i++;     }      return i; } 字符串比较要用库函数，否则就是用循环，一个字符一个字符的比较。

user: user-0
content: int input(char ar2[][21]) { int i=0; while(i<10&&ar2!='*END*') { gets(ar2); i++; } return i; }  void paixu(char ar2[][21], int n) { int i,j,t; for(i=0;i<n-1;i++) { for(j=i+1;j<n-1;j++) { if(ar2[j+1][0]<=ar2[j][0]) { t=ar2[j][0]; ar2[j][0]=ar2[j+1][0]; ar2[j+1][0]=t; }  }	 }  }   void printArr(char ar2[][21], int n) { int i; char ch=' '; for(i=0;i<n;i++) { 	if(i==(n-1)) 	{ch='\n';} 	printf("%d%c",ar2[i][21],ch); } return ar2; } 错了

user: user-2
content: 自己先写写，用scanf %s或fgets，要不就是getchar()循环
user-0 提问: 为什么我的代码在vs和devc++的运行结果不一致？

回复:
user: user-1
content: 上面漏了对1排除，重新修改：int isPrime( int n) {      if(n<2) return 0;      for(int div = 2;div <= sqrt(n);div++)         if( n%div == 0)           return 0 ;      return 1 ; }

user: user-1
content: 楼主素数判断函数有问题引用int isPrime(int n) { int i,div; for(div = 2;div <= sqrt(n);div++){ if(n%div == 0){ break; return 0; } if(div == n) return 1; } 修改如下，供参考：int isPrime( int n) {      for(int div = 2;div <= sqrt(n);div++)         if( n%div == 0)           return 0 ;      return 1 ; }

user: user-2
content: 结果不一样，说明你代码有歧义，必须修改。。。
user-0 提问: 关于C语言的字符串常量的问题

回复:
user: user-1
content: 可以访问。  如果想修改pStr，可以这样定义，char pStr[] =｛"Hello World"｝；

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

user: user-3
content: 字符串常量是可以读的，但只是只读，不能写。 即pStr[1] = '1';这样是不可以的。 所以，访问每个字符都是没问题的
user-0 提问: 大一新生小白求助

回复:
user: user-1
content: 引用 12 楼 qq_51774708的回复:[quote=引用 10 楼 5250的回复:][quote=引用 9 楼 qq_51774708 的回复:][quote=引用 6 楼 5250的回复:][quote=引用 4 楼 qq_51774708 的回复:][quote=引用 2 楼 5250的回复:]大一就要做这个嘛？这个用到的其实就是结构体/数组  以及查找/排序这些 你可以先写一些  有不懂的再问  效果好 感觉丝毫没有头绪[/quote]  啥时候要 我看有空帮你写一下吧[/quote] 下周一[/quote]  留一个邮箱吧[/quote] 135083159@qq.com[/quote] 代码发给你了哦  昨天加你qq的那个

user: user-0
content: 我再去琢磨琢磨书

user: user-0
content: 引用 10 楼 5250的回复:[quote=引用 9 楼 qq_51774708 的回复:][quote=引用 6 楼 5250的回复:][quote=引用 4 楼 qq_51774708 的回复:][quote=引用 2 楼 5250的回复:]大一就要做这个嘛？这个用到的其实就是结构体/数组  以及查找/排序这些 你可以先写一些  有不懂的再问  效果好 感觉丝毫没有头绪[/quote]  啥时候要 我看有空帮你写一下吧[/quote] 下周一[/quote]  留一个邮箱吧[/quote] 135083159@qq.com

user: user-2
content: 用c++语言写的话应该不难，不过主要是增删查改四个功能，对着课程设计模仿下。

user: user-1
content: 引用 9 楼 qq_51774708 的回复:[quote=引用 6 楼 5250的回复:][quote=引用 4 楼 qq_51774708 的回复:][quote=引用 2 楼 5250的回复:]大一就要做这个嘛？这个用到的其实就是结构体/数组  以及查找/排序这些 你可以先写一些  有不懂的再问  效果好 感觉丝毫没有头绪[/quote]  啥时候要 我看有空帮你写一下吧[/quote] 下周一[/quote]  留一个邮箱吧

user: user-0
content: 引用 6 楼 5250的回复:[quote=引用 4 楼 qq_51774708 的回复:][quote=引用 2 楼 5250的回复:]大一就要做这个嘛？这个用到的其实就是结构体/数组  以及查找/排序这些 你可以先写一些  有不懂的再问  效果好 感觉丝毫没有头绪[/quote]  啥时候要 我看有空帮你写一下吧[/quote] 下周一

user: user-0
content: 引用 5 楼 limeilu110的回复:恩！这个题目我收了！回去练练手！ hhhh好的

user: user-0
content: 引用 6 楼 5250的回复:[quote=引用 4 楼 qq_51774708 的回复:][quote=引用 2 楼 5250的回复:]大一就要做这个嘛？这个用到的其实就是结构体/数组  以及查找/排序这些 你可以先写一些  有不懂的再问  效果好 感觉丝毫没有头绪[/quote]  啥时候要 我看有空帮你写一下吧[/quote] 太感谢了，下周一交大概

user: user-1
content: 引用 4 楼 qq_51774708 的回复:[quote=引用 2 楼 5250的回复:]大一就要做这个嘛？这个用到的其实就是结构体/数组  以及查找/排序这些 你可以先写一些  有不懂的再问  效果好 感觉丝毫没有头绪[/quote]  啥时候要 我看有空帮你写一下吧

user: user-3
content: 恩！这个题目我收了！回去练练手！

user: user-1
content: 大一就要做这个嘛？这个用到的其实就是结构体/数组  以及查找/排序这些 你可以先写一些  有不懂的再问  效果好

user: user-4
content: 练手的好机会啊。。 数据存在文件里，读写文件即可。 数据存在数据库里，访问数据库即可。

user: user-0
content: 引用 2 楼 5250的回复:大一就要做这个嘛？这个用到的其实就是结构体/数组  以及查找/排序这些 你可以先写一些  有不懂的再问  效果好 感觉丝毫没有头绪

user: user-0
content: 引用 1 楼 user-4的回复:练手的好机会啊。。 数据存在文件里，读写文件即可。 数据存在数据库里，访问数据库即可。 啊这，完全听不懂在说什么
user-0 提问: prim算法，代码系统无纠错，但无法运行

回复:
user: user-1
content: 严重性	代码	说明	项目	文件	行	禁止显示状态  警告	C6282	运算符不正确: 在 Boolean 上下文中执行了常量赋值。应考虑改用“==”。	Project60	test\C_Prog.c	38	 警告	C6282	运算符不正确: 在 Boolean 上下文中执行了常量赋值。应考虑改用“==”。	Project60	test\C_Prog.c	40	 警告	C6001	使用未初始化的内存“G”。	Project60	test\C_Prog.c	57	    能运行才怪.
user-0 提问: 从键盘任意两个数字，计算这两个数的最大公约数和最小公倍数并输出。 求助求助

回复:
user: user-1
content: 报错的原因是在求最大公约数后，i的值变为0，之后 c=c/i； 就会报错。 修改方法 	for(i=b;i>0;i--) 	{ 		if(a%i==0&&b%i==0) 		{//-------添加-------------- 			printf("最大公约数:%d\n",i); 			break;//------在得到最大公约数后，结束for循环---------- 		}//-----------添加-------------------- 	} VC++6.0 C++环境调试  VC++6.0是我的最爱，没有之一

user: user-2
content: 修改如下，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int a,b,c,i,y;     printf("请输入两个数\n");     scanf("%d %d",&a,&b);     if(a<b)      {       c=a; //这里是";"号，不是","号       a=b;       b=c;      }    for(i=1;i<=b;i++)     {      if(a%i==0 && b%i==0) y=i;//增加一个变量y,记录公约数     }    printf("最大公约数:%d\n",y);    c=a*b;    c=c/y;    printf("最小公倍数:%d\n",c);    return 0; }
user-0 提问: String函数

回复:
user: user-0
content: 引用 1 楼 user-1的回复:a，b，\n是换行符，,\012是八进制数，是一个字符，,\\是一个字符，代表反斜杠\，\"是一个字符，代表双引号。其中\是转义字符的标志。 谢谢老哥！！

user: user-1
content: a，b，\n是换行符，,\012是八进制数，是一个字符，,\\是一个字符，代表反斜杠\，\"是一个字符，代表双引号。其中\是转义字符的标志。
user-0 提问: 大佬，给点思路

回复:
user: user-1
content: 看前面的规律是加的意思，最后一句是打错了吧，这题就是瞎搞

user: user-0
content: 引用 1 楼 user-1的回复:看前面的规律是加的意思，最后一句是打错了吧，这题就是瞎搞 相加提交不对，答案还能得出0
user-0 提问: 来个大佬帮我解释一下这个程序，我看不懂

回复:
user: user-1
content: 这个程序看起来是个最大堆排序

user: user-2
content: 引用 1 楼 user-3 的回复:引用Situation array[65536]; 这么大数组，也不怕栈溢出么？ 用malloc动态开辟堆空间，不好么？？ 你仔细看看，他定义的是全局（静态）数组，而且因为没有初始值，占用bss节，也不增加可执行文件大小。

user: user-3
content: 引用Situation array[65536]; 这么大数组，也不怕栈溢出么？ 用malloc动态开辟堆空间，不好么？？
user-0 提问: 如何通过初始载入数据的方式定义全局变量

回复:
user: user-1
content: 引用 楼主 xyj8035 的回复:目前我定义了 #define ROWS 20 int data[ROWS];  现在希望ROWS的值我在程序初始化时通过数据库载入值，这个可以实现吗，或者有什么好的办法实现类似功能？ 可以，从数据库指定和通过终端输入数组长度没什么区别。  但是，建议楼主先把数组定义成长度为0的，其实就是定义一个指针，然后从数据库里读取到值之后通过动态申请空间的方式确定内存；  动态申请空间malloc/free, new/delete

user: user-2
content: 创建数据库对象 用数据库对象建立数据库连接 创建记录集对象 在记录集对象上执行select语句提取数值对应字段的20行对应的20个值保存到data数组中 销毁记录集对象 断开数据库连接 销毁数据库对象

user: user-3
content: 那就是动态创建了int* pnArray = new int[XXXX];
user-0 提问: 输入一英文字符串(字符串长度限制在200个字符以内)，单词间仅用一个或多个空格间隔（即没有标点符号），编写程序将此字符串中第1个最长的单词输出。

回复:
user: user-0
content: 引用 1 楼 qq_1457346882的回复:len = strlen(a);     for (i = 0; i <= len;i++){         if(a[i]=='\0')             break; 已经判断了字符串长度循环就不用加判断是否结束，到了那个长度会自己结束的，只要<len就好了 if(j>maxlen){                 maxlen = j;                 maxst = i-j;                 j = 0;                 a[i] = '\0'; 这里j=0要拿出来，判断j>才执行，那如果ｊ不大于呢，执行到下一个单词继续累加嘛，那你这个j的值是不是就不准确了 j作为单词长度的计数变量，要保证每个单词开始的时候j为０才行 明白了，谢谢大佬。昨天没想到这种情况

user: user-1
content: len = strlen(a);     for (i = 0; i <= len;i++){         if(a[i]=='\0')             break; 已经判断了字符串长度循环就不用加判断是否结束，到了那个长度会自己结束的，只要<len就好了 if(j>maxlen){                 maxlen = j;                 maxst = i-j;                 j = 0;                 a[i] = '\0'; 这里j=0要拿出来，判断j>才执行，那如果ｊ不大于呢，执行到下一个单词继续累加嘛，那你这个j的值是不是就不准确了 j作为单词长度的计数变量，要保证每个单词开始的时候j为０才行

user: user-2
content: 楼主，发现一个漏洞，当字符串中最后一个单词组最长时，上面的算法统计有问题，修改如下，供参考：#include <stdio.h> #include <string.h> int main(int argc, char* argv[]) {     char a[200];     int i=0, j=0, len, maxlen =-1, maxst;     gets(a);     len = strlen(a);     for (i=0;i<len;i++)     {        while(a[i]!=' ' && a[i] != '\0')//当最后一个单词串最长。           {             j++;             i++;           }        if(j>maxlen)            {               maxlen = j;               maxst = i-j;               a[i] = '\0';            }        j = 0;     }     puts(&a[maxst]);     printf("%d\n", maxlen);     return 0; }
user-0 提问: 约瑟夫算法问题，请教一下大佬们该怎么解决

回复:
user: user-0
content: 谢谢两位大佬的回答！

user: user-1
content: 引用 8 楼 mll97 的回复:[quote=引用 6 楼 自信男孩 的回复:][quote=引用 5 楼 mll97 的回复:][quote=引用 3 楼 user-2 的回复:][quote=引用 1 楼 mll97 的回复:]整了一下午也没整明白，感觉整不出来饭都不香了  把你这个函数贴出来看看 ds_traverse(C);[/quote]谢谢大佬，已经解决了，就是有无哨兵的问题，但是不知道为什么有哨兵会导致程序报错。[/quote] 因为哨兵可能也被计算（数数的时候）[/quote]上午下午一直在上课，没能及时查看信息，不好意思啊。请问哨兵是不是不能被删，我调试的时候发现是数了一阵，哨兵被删除了之后，再次经过哨兵原有的位置的时候就报错了，是指针找不到链表的起始地址然后就报错了吗？[/quote] 不把哨兵算进来，那么遇到哨兵不计算，那么就不会删除，最后应该剩两个节点才对，一个哨兵，一个最后一个节点；  为了简单，这个题目不要用哨兵了，反而用了会更麻烦，效率更低。  哨兵的作用是找头结点方便，但是对于这个问题不需要找头结点，因为是一个循环的链表

user: user-1
content: 引用 5 楼 mll97 的回复:[quote=引用 3 楼 user-2 的回复:][quote=引用 1 楼 mll97 的回复:]整了一下午也没整明白，感觉整不出来饭都不香了  把你这个函数贴出来看看 ds_traverse(C);[/quote]谢谢大佬，已经解决了，就是有无哨兵的问题，但是不知道为什么有哨兵会导致程序报错。[/quote] 因为哨兵可能也被计算（数数的时候）

user: user-0
content: 引用 3 楼 user-2 的回复:[quote=引用 1 楼 mll97 的回复:]整了一下午也没整明白，感觉整不出来饭都不香了  把你这个函数贴出来看看 ds_traverse(C);[/quote]谢谢大佬，已经解决了，就是有无哨兵的问题，但是不知道为什么有哨兵会导致程序报错。

user: user-0
content: 引用 2 楼 自信男孩 的回复:[quote=引用 1 楼 mll97 的回复:]整了一下午也没整明白，感觉整不出来饭都不香了 链表不要用带哨兵的单向循环链表了，直接用无哨兵的 [/quote]你好，请问下为什么用了有哨兵的就会报错，能解释一下吗？谢谢

user: user-2
content: 引用 1 楼 mll97 的回复:整了一下午也没整明白，感觉整不出来饭都不香了  把你这个函数贴出来看看 ds_traverse(C);

user: user-0
content: 引用 6 楼 自信男孩 的回复:[quote=引用 5 楼 mll97 的回复:][quote=引用 3 楼 user-2 的回复:][quote=引用 1 楼 mll97 的回复:]整了一下午也没整明白，感觉整不出来饭都不香了  把你这个函数贴出来看看 ds_traverse(C);[/quote]谢谢大佬，已经解决了，就是有无哨兵的问题，但是不知道为什么有哨兵会导致程序报错。[/quote] 因为哨兵可能也被计算（数数的时候）[/quote]上午下午一直在上课，没能及时查看信息，不好意思啊。请问哨兵是不是不能被删，我调试的时候发现是数了一阵，哨兵被删除了之后，再次经过哨兵原有的位置的时候就报错了，是指针找不到链表的起始地址然后就报错了吗？

user: user-1
content: 引用 1 楼 mll97 的回复:整了一下午也没整明白，感觉整不出来饭都不香了 链表不要用带哨兵的单向循环链表了，直接用无哨兵的

user: user-0
content: 整了一下午也没整明白，感觉整不出来饭都不香了
user-0 提问: ASCII码大于128的字节，怎么发送到串口中

回复:
user: user-1
content: 0101010101101001010100101101010001 内存中内容如上,你用cha*来翻译是一种结果,你用ascII来翻译是另一个结果,但内存数据就是这个东西,不多也不少

user: user-0
content: 引用 3 楼 赵4老师的回复:强转为char* 类型的，这些ASCII码大于128的字节,不会变值。  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 但是在qt里，它提示我不能这样赋值，我用char类型的变量接一个0xf1，提示类型不匹配

user: user-2
content: 强转为char* 类型的，这些ASCII码大于128的字节,不会变值。  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-3
content: 引用 4 楼 遥_望 的回复:[quote=引用 3 楼 赵4老师的回复:]强转为char* 类型的，这些ASCII码大于128的字节,不会变值。  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 但是在qt里，它提示我不能这样赋值，我用char类型的变量接一个0xf1，提示类型不匹配[/quote] qt里面可以直接赋值的，不过需要做一个强制类型转换 unsigned char ch=(char)0xf1;

user: user-2
content: char c=(char)0xf1;

user: user-4
content: 一个字节有8位，可以存0-255，大于128没关系，直接发送即可。 如果大于255，就要发多个字节，需要考虑大小端问题。

user: user-5
content: 直接把大于128的小于255的放到buf里就可以了，虽然buf是char *类型，但是赋值给buf之后，其值是不变的，不会把大于128的值戒掉。  内存里的空间是不分char 还是unsigned char，甚至是int, long, double的。内存只是存放0101的内容，只有输出时按照对应的格式输出。

user: user-6
content: 你发送什么就会接收到什么，跟大于不大于128没关系。大于128只是不是可显示字符而已。
user-0 提问: 顺序查找，折半查找

回复:
user: user-0
content: l.length=length是什么意思啊

user: user-1
content: #include<stdio.h>  #define list_size 20 typedef int keytype; typedef int othertype;  typedef struct {     othertype key;     keytype other_data; }recordtype; typedef struct {     recordtype r[list_size+1];     int length; }recordlist; //顺序查找，设监视哨 int seqsearch(recordlist l,keytype k) {     int i;     l.r[0].key=k;     i=l.length;     while(i > 0 && l.r[i].key!=k)         i--;     return i; } //顺序查找，不设监视哨 int SeqSearch(recordlist l,keytype k) {     int i;     i=l.length;     while(i>=1&&l.r[i].key!=k)         i--;     if(i>=1)         return i;     else         return 0; } //折半查找 int rinsrch(recordlist l,keytype k) {     int mid;     int low=0;     int high=l.length;     while(low<=high)     {         mid=(low+high)/2;         if(k==l.r[mid].key)             return mid;         else if(k<l.r[mid].key)             high=mid-1;         else             low=mid+1;     }     return 0; } int main() {     recordlist l;     int q,p,t,loc,len,i,length;     //创建     printf("请输入表中元素个数：");     scanf("%d",&len);     if (len < list_size)         length=len;     else         length = list_size;     printf("输入顺序表的元素：");     for(i=1;i<=length;i++)     {         scanf("%d", &l.r[i].key);     }     l.length = length;     //查找     printf("请输入要查找的元素：");      scanf("%d",&loc);       q=seqsearch(l,loc);     //if (p!= 0)     if (q != 0)         printf("元素下标1为：%d\n", q);     else         printf("该元素不存在！\n");     p=SeqSearch(l,loc);     if (p!= 0)         printf("元素下标2为：%d\n", q);     else         printf("该元素不存在！\n");     t=rinsrch(l,loc);     if (t!=0)         printf("元素下标3为：%d\n",t);     else         printf("该元素不存在！\n");      return 0; }  供参考～  错误的地方不少，l的length没有赋值，scanf对谁赋值？数组越界访问等等 建议对比代码找一下自己的问题～
user-0 提问: 数据结构课程设计

回复:
user: user-1
content: 仅供参考： #include <stdio.h>  struct data{ 	int a; 	int b; 	int v; };  int main(void) { 	int i, j, k, value, c=0; 	struct data d[100], t; 	 	for(i=0; i<10; i++) 	{ 		for(j=0; j<20; j++) 		{ 			value = 2 * i * i + j * j;	 			t.a = i; 			t.b = j; 			t.v = value; 			 			if(c < 100) 			{ 				d[c] = t; 				c++; 			} 			else if(d[99].v < value) break; 			else d[99] = t; 			for(k=c-2; k>=0 && d[k].v>value; k--) 			{ 				d[k+1] = d[k]; 			} 			 			d[k+1] = t; 		} 	} 	 	for(c=0; c<100; c++) 	{ 		printf("%d:\t%d\t%d\t%d\n", c, d[c].a, d[c].b, d[c].v); 	} 	 	return 0; }

user: user-2
content: 可以用插入排序的方法一边遍历a，b递增的 f 的结果，一边保存最小的100个值 int main( ) {     int a, b, f[3][100], t, i, j;     for (i=0; i<100; i++) f[2][i]=3*100*100;     for (a=0; a<10; a++) {         for (b=0; b<15; b++) {             t = 2*a*a+b*b;             for (i=0; t>f[2][i]&&i<100; i++); //插入排序查找插入位置             if (i<100) {                 for (j=99; j>i; j--) {                     f[0][j]=f[0][j-1];                     f[1][j]=f[1][j-1];                     f[2][j]=f[2][j-1];                 }                 f[0][i] = a;                 f[1][i] = b;                 f[2][i] = t;             }         }     }     for (i=0; i<100; i++) {         printf("f(%d,%d)=%d\n", f[0][i], f[1][i], f[2][i]);     }          return 0; }
user-0 提问: 为什么输出值为35.00000不是35

回复:
user: user-0
content: 谢谢，试了一下是对的

user: user-1
content: 你这是打印浮点数，默认打印小数点后6位 如果不想打印小数，改成 printf("the converted value is %.0f", d); //打印0位小数点

user: user-2
content: 因为楼主用的是%f输出，所以会有有效位数。 可以用%.0f输出试试，应该就是35了。
user-0 提问: 如何辨别逻辑结构和物理结构

回复:
user: user-1
content: 听说话物理地址和逻辑地址，数据结构还分物理结构和逻辑结构?

user: user-0
content: 我个人认为逻辑结构是抽象的，例如树，图，链表。而没有具体到什么什么链表，什么什么树。 而物理结构则是具体到一种结构，犹如单链表，二叉树
user-0 提问: 关于结构指针做实参的问题

回复:
user: user-1
content: 引用 3 楼 我保证不学啦 的回复:[quote=引用 1 楼 自信男孩的回复:]因为这个参数是要求一个传入传出参数，如果仅仅是一个传入参数，是不需要传其地址的。如果想把P申请的空间链到rear之后，就需要传rear的地址，这样能把对rear的修改带出Attach函数，就是为了保证Attach修改的是调用函数里的rear，而不是Attach函数里的形参。 如果传的是结构指针，就只能把改这一块链表区域的值传出去。如果传结构指针的地址，就可以改指链表头结点的指针使它指向别的任意地址这个操作给传递出去 请问是这个意思吗？[/quote] 不论是什么样的指针，不论这个结构体有多大，传结构体指针只会传sizeof(long)指针大小的给形参，形参也只能接收这么大小。 所以，指针大小是固定的。sizeof(long)大小

user: user-0
content: 引用 1 楼 自信男孩的回复:因为这个参数是要求一个传入传出参数，如果仅仅是一个传入参数，是不需要传其地址的。如果想把P申请的空间链到rear之后，就需要传rear的地址，这样能把对rear的修改带出Attach函数，就是为了保证Attach修改的是调用函数里的rear，而不是Attach函数里的形参。 如果传的是结构指针，就只能把改这一块链表区域的值传出去。如果传结构指针的地址，就可以改指链表头结点的指针使它指向别的任意地址这个操作给传递出去 请问是这个意思吗？

user: user-2
content: 这种属于常见问题。lz只要明白传实参的值（结构体普通参数）和传实参的地址（指针参数）的区别，那应该就能理解。 如果是传值，函数内修改参数是不影响函数外的实参的（因为形參是实参的拷贝，属于不同的函数栈的内存空间，二者除了值相同没有任何联系），这应该是最基本的基础知识了吧？那么要修改函数外的实参怎么办？那就是用指针传实参的地址（这样形參和实参指向的地址相同，存在联系，就可以改变其中一个影响另一个）。 所以，你要在Attach里修改pRear使得函数外rear实参也受影响，那就要传rear的地址（也就是要用指针类型或者用引用类型）

user: user-1
content: 因为这个参数是要求一个传入传出参数，如果仅仅是一个传入参数，是不需要传其地址的。如果想把P申请的空间链到rear之后，就需要传rear的地址，这样能把对rear的修改带出Attach函数，就是为了保证Attach修改的是调用函数里的rear，而不是Attach函数里的形参。
user-0 提问: 新手求各位大佬教我实现这个程序

回复:
user: user-1
content: 思路明了： 直接while(true)来读取，if判断读入数字是否符合要求，符合要求就调用sqrt函数，不符合要求就显示错误信息然后直接continue语句。 读取Y/y那里的话，如果读入的是Y或y就直接break语句就好。

user: user-2
content: 谭浩强老先生的书，看一下吧，效果不错的。
user-0 提问: 关于选择排序

回复:
user: user-1
content: 按地址传递的话，这个了解不是很深入 不过我看着最后一张图的swap应该是没问题的（自己上机试了一下用地址传递参数交换数组元素） 目前觉得如果真的是按最后一张图的做法做也没结果的话…… 你看看关于函数selection_sort的调用有没有问题？

user: user-1
content: 别的暂且不说，你swap函数是按值传递，执行了以后是没效果的。 swap得按地址传递或者按引用传递（推荐）。 把第二行改成  void swap(int &a,int &b) 试试？

user: user-2
content: 第一张swap是参数值传递的方式，最后一张是传地址的方式，值传递和传地址的不同，翻书了解一下
user-0 提问: 【求助】C语言小白因为网课要求要编写2个小程序

回复:
user: user-1
content: int n = 0, d = INT_MIN, x = INT_MAX, j = 0, g = 0; 	while (g++<20)cin >> n, (n>d ? d = n : 0), (x > n ? x = n : 0), j += n; 	cout << d << "大" << x << "小" << j / 20 << "均";  	cin >> x; n = x; j = g = 0; 	while (n) 	{ 		while (j++<n)cout << ends; --n, j = 0; 		while (g++ < x)cout << "*"; cout << endl; g = 0; 	}

user: user-2
content: 楼上的答案对于新手来说太复杂，还是简单地用个数组来计算吧

user: user-1
content: int n=0,d=INT_MIN,x=INT_MIX,j=0,g=0; while(g++<20)cin>>n,(n>d?d=n:0),(x>n?x=n:0)j+=n: cout<<d<<"大"<<x<<"小"<<j/20<<"均";

user: user-3
content: 第一题：#include<stdio.h> int main() {     int a,d;     int i[20]={22,2,3,4,99,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};     int xiao=i[0],da=i[0];     for(a=1;a<=19;a++)      {        if(xiao>i[a])           xiao=i[a];            }     for(a=1;a<=19;a++)     {        if(da<i[a])        da=i[a];     }          printf("最大值为:%d,最小值:%d\n",da,xiao);           return 0; } 第二题： #include<stdio.h> int main() {     int h=4;     for(int i=0;i<4;i++)     {        for(int j=i;j<4;j++)        {           printf(" ");                   }        printf("****\n");     }                return 0; }

user: user-3
content: #include<stdio.h> int main() {     int a,d;     int i[20]={22,2,3,4,99,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};     int xiao=i[0],da=i[0];     for(a=1;a<=19;a++)      {        if(xiao>i[a])           xiao=i[a];            }     for(a=1;a<=19;a++)     {        if(da<i[a])        da=i[a];     }          printf("最大值为:%d,最小值:%d\n",da,xiao);           return 0; }
user-0 提问: 使用if else输出结果不对。

回复:
user: user-0
content: 引用 9 楼 qzjhjxj的回复:修改如下，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int s[10] = {8,10,23,37,41,55,68,72,89,95};     int i,n,t=0;     scanf("%d",&n);     if(n == s[4])              t = 4+1;     if(n < s[4])        for(i = 3;i >= 0;i--)           if(n == s[i])              t=i+1;     if(n > s[4])        for(i = 5;i < 10;i++)           if(n == s[i])              t=i+1;     if(t != 0)        printf("sta=%3d\n",t);     else        printf("No such number!\n");     return 0; } 谢谢谢谢！！

user: user-0
content: 引用 9 楼 qzjhjxj的回复:修改如下，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int s[10] = {8,10,23,37,41,55,68,72,89,95};     int i,n,t=0;     scanf("%d",&n);     if(n == s[4])              t = 4+1;     if(n < s[4])        for(i = 3;i >= 0;i--)           if(n == s[i])              t=i+1;     if(n > s[4])        for(i = 5;i < 10;i++)           if(n == s[i])              t=i+1;     if(t != 0)        printf("sta=%3d\n",t);     else        printf("No such number!\n");     return 0; } 谢谢谢谢！！

user: user-1
content: 修改如下，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int s[10] = {8,10,23,37,41,55,68,72,89,95};     int i,n,t=0;     scanf("%d",&n);     if(n == s[4])              t = 4+1;     if(n < s[4])        for(i = 3;i >= 0;i--)           if(n == s[i])              t=i+1;     if(n > s[4])        for(i = 5;i < 10;i++)           if(n == s[i])              t=i+1;     if(t != 0)        printf("sta=%3d\n",t);     else        printf("No such number!\n");     return 0; }

user: user-0
content: 引用 3 楼 qzjhjxj的回复:s[4]=41,当n=65 时，从第7行的if 语句开始判断，执行到第18行的if 语句才是满足条件的，就开始执行第19行的for 语句的内容，那里打印输出的条件是n =s[i],显然是没有满足条件的，所以程序就什么都不干就return 0了。最后那个else 是和第18行if 是一对的，当18行的if 条件不满足的时候，24行的else 才会执行到。再多一句，第13行的if 里，i<4的条件是多余的，因为是i- -。 怎么修改呢那应该怎么修改呢

user: user-0
content: 引用 3 楼 qzjhjxj的回复:s[4]=41,当n=65 时，从第7行的if 语句开始判断，执行到第18行的if 语句才是满足条件的，就开始执行第19行的for 语句的内容，那里打印输出的条件是n =s[i],显然是没有满足条件的，所以程序就什么都不干就return 0了。最后那个else 是和第18行if 是一对的，当18行的if 条件不满足的时候，24行的else 才会执行到。再多一句，第13行的if 里，i<4的条件是多余的，因为是i- -。 那怎么解决呀

user: user-2
content: 输入65的时候走到了18行的分支中 和for循环中条件不满足 不输出数字  24行的else分支只有再18行不满足时进入  18行满足了  自然不会输出no such number了

user: user-3
content: else if(n<s[4]) {       for(i=3;k<4 && i>=0;i--)           {                    ...           }  }

user: user-1
content: s[4]=41,当n=65 时，从第7行的if 语句开始判断，执行到第18行的if 语句才是满足条件的，就开始执行第19行的for 语句的内容，那里打印输出的条件是n =s[i],显然是没有满足条件的，所以程序就什么都不干就return 0了。最后那个else 是和第18行if 是一对的，当18行的if 条件不满足的时候，24行的else 才会执行到。再多一句，第13行的if 里，i<4的条件是多余的，因为是i- -。

user: user-4
content: 括号使用不规范

user: user-5
content: s[4]=41 输入65会进入else if(n>s[4])这个分支 在这个分支里，满足if(n==s[i])的数据不存在，所以没有任何输出
user-0 提问: 小白求问表达式的问题

回复:
user: user-1
content: int (*run)(struct A*) = 0; 去看一下函数指针相关的语法吧  函数名也可以当作指针来看  这句话其实就是一个（函数）指针的初始化而已 和普通的int *p=null 同意义

user: user-0
content: 引用 1 楼 user-3 的回复:run是个函数指针，函数的参数是A结构体指针，返回是为int。run指针初始化为指向0地址  知道了，谢谢啊

user: user-2
content: 楼上正解。不过int (*run)(struct A*) = NULL貌似更好。

user: user-3
content: run是个函数指针，函数的参数是A结构体指针，返回是为int。run指针初始化为指向0地址
user-0 提问: 小白问大神们关于结构体嵌套的问题

回复:
user: user-0
content: 引用 3 楼 qybao 的回复:p=(struct A*)malloc(sizeof(struct A)); 这样分配的内存，B也分配了。因为B不是指针，不用单独分配 另，结构体嵌套结构体，如果想自己分配内存，最好不要匿名结构体。可以用typedef声明结构体类型，再在结构体内部使用该声明好的类型 这是别人C语言编写的源码里的内容，不知道怎么改成C++的。  decoder->sync = malloc(sizeof(*decoder->sync));

user: user-0
content: 引用 2 楼 ctrigger 的回复:直接用struct A* p = (struct A*)malloc(sizeof(struct A));就可以了。不过你定义的结构体有点问题，需要修改一下，仅供参考：  #include <stdio.h> #include <stdlib.h>  struct A {     int x, y, z;      struct B     {         int w;         char c;     } b; };  int main(void) {     struct A* p = (struct A*)malloc(sizeof(struct A));     p->x = p->y = p->z = 1000;     p->b.w = 2000;     p->b.c = 'A';     return 0; }   我是在别人的源码里看到的，但源码是C语言的，我想改成C++就必须要我指定类型，否则通不过。我试了好多种办法都不行 decoder->sync = malloc(sizeof(*decoder->sync));

user: user-1
content: struct A *p = (struct A*)malloc(sizeof(struct A))

user: user-2
content: p=(struct A*)malloc(sizeof(struct A)); 这样分配的内存，B也分配了。因为B不是指针，不用单独分配 另，结构体嵌套结构体，如果想自己分配内存，最好不要匿名结构体。可以用typedef声明结构体类型，再在结构体内部使用该声明好的类型

user: user-3
content: 直接用struct A* p = (struct A*)malloc(sizeof(struct A));就可以了。不过你定义的结构体有点问题，需要修改一下，仅供参考：  #include <stdio.h> #include <stdlib.h>  struct A {     int x, y, z;      struct B     {         int w;         char c;     } b; };  int main(void) {     struct A* p = (struct A*)malloc(sizeof(struct A));     p->x = p->y = p->z = 1000;     p->b.w = 2000;     p->b.c = 'A';     return 0; }

user: user-4
content: typedef struct {}A; A *p;
user-0 提问: 为啥我的链表输出不对啊

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  typedef struct _node{     int value;     struct _node *previous;     struct _node *next; }Node;  int main(void) {     Node *head=NULL;     Node *tail=NULL;     int j=1;     for(int number;scanf("%d",&number)==1&&number!=-1;){         Node *Last=head;         if(j==1){             head=(Node *)malloc(sizeof (Node));             head->value=number;             head->next=NULL;             head->previous=NULL;             j++;             //break;             continue;         }         else{             //for(;Last;Last=Last->next);             for(;Last->next;Last=Last->next)                 ;             Node *p=(Node *)malloc(sizeof (Node));             Last->next=p;             p->value=number;             p->next=NULL;             p->previous=Last;             tail=p;         }     }     for(Node *i=head;i;i=i->next){         printf( "%d\t", i->value );     }     for(Node *k=tail;k;k=k->previous){         printf( "%d\t", k->value );     }     return 0; }   供参考～

user: user-2
content: 20行的break删除。 23行的 for(;Last;Last=Last->next); ===> for(;Last->next;Last=Last->next);
user-0 提问: 求大佬解答

回复:
user: user-1
content: 因为p1和p2都是指针，返回的是指针变量的值，指针变量的值就是它指向的字符串的地址（首地址）； 如果加上&，那就是返回指针变量的地址，因为p1, p2都是局部变量，函数调用结束就会被释放，因此返回指针变量的地址没有意义。

user: user-2
content: 1。因为p1,p2就是地址呀   为什么要用&p1  这个是地址的地址了   你对指针这一块儿可能还没搞懂 int a = 0; a是变量 &a是a的地址，int *p=a  p就是a的地址了  等同于p = &a。所以p1，p2直接返回即可  2。printf输出字符串 直接写变量名就行 *p1是字符串的地址了  你要输出的只是字符串而已

user: user-3
content: char *p1   ---------- p1指针变量，里面存储的就是地址值。那个函数返回指针变量值（地址值），所以写的是指针变量名
user-0 提问: C语言删除二叉树子树代码。是哪里有问题啊？哭了

回复:
user: user-0
content: 引用 2 楼 ctrigger的回复:逻辑有问题。应该分成2个函数递归。。一个函数是递归查找，找到符合条件结点。一个函数是递归删除。 感谢感谢感谢

user: user-0
content: 引用 5 楼 真相重于对错的回复:如果用c写的话 大概如下 void del(int** x) {    free(*x);    *x=NULL; } int* p=(int*)malloc... del(&p)； 感谢感谢感谢

user: user-1
content: 如果用c写的话 大概如下 void del(int** x) {    free(*x);    *x=NULL; } int* p=(int*)malloc... del(&p)；

user: user-1
content: 而且你只是把那个变量赋值为NULL，它所指向的内存依然被使用着，所以是错误的 应该 void del(int* &x) {    delete x;    x=NULL; } int* p=new int(10); del(p)；

user: user-1
content: 理解一下 void del(int *x) {    x=NULL; } int* p=new int(10); del(p)； 之后这个p变没变成NULL????

user: user-2
content: 逻辑有问题。应该分成2个函数递归。。一个函数是递归查找，找到符合条件结点。一个函数是递归删除。

user: user-3
content: delete函数中t->name那里，这里需要个循环去找到d吧，直接t->name是不是有点问题，
user-0 提问: 求解答

回复:
user: user-1
content: 先运行a[i] = i,之后运行i++

user: user-2
content: i先赋值再自增，数组中分别为0123

user: user-3

user: user-4
content: 答案不应该为2应该为3

user: user-3

user: user-5

user: user-5
content: 2楼和3楼说的都没问题，就是没有回答楼主的问题

user: user-3
content: 太牛叉了。你能写这种代码玩编译器，当心编译器把你玩死了。
user-0 提问: win32 MCI播放音视频格式问题

回复:
user: user-0
content: 引用 6 楼 赵4老师 的回复:安装“QQ影音” 我用的potplayer不行吗 是因为QQ影音安装驱动还是？

user: user-1
content: 安装“QQ影音”

user: user-2
content: 引用 3 楼 六道佩恩 的回复:[quote=引用 1 楼 Intel0011 的回复:]mid、wav、avi 你可以试试装个全一点的音频解码器，看看能播放吗 感觉有库的支持应该可以 你的环境里，MCI支持多少格式？ 都是open然后play就能正常播放的吗？[/quote] 我的环境里也不是什么格式都能播放，没装解码器

user: user-2
content: 引用 3 楼 六道佩恩 的回复:[quote=引用 1 楼 Intel0011 的回复:]mid、wav、avi 你可以试试装个全一点的音频解码器，看看能播放吗 感觉有库的支持应该可以 你的环境里，MCI支持多少格式？ 都是open然后play就能正常播放的吗？[/quote] 我的环境里也不是什么格式都能播放，没装解码器

user: user-0
content: 引用 1 楼 Intel0011 的回复:mid、wav、avi 你可以试试装个全一点的音频解码器，看看能播放吗 感觉有库的支持应该可以 你的环境里，MCI支持多少格式？ 都是open然后play就能正常播放的吗？

user: user-3
content: 下载编解码器：http://www.mediaplayercodecpack.com/

user: user-2
content: mid、wav、avi 你可以试试装个全一点的音频解码器，看看能播放吗 感觉有库的支持应该可以
user-0 提问: 关于C语言realloc函数

回复:
user: user-0
content: 引用 2 楼 西门炊雪的回复:都可以，习惯问题 好的，明白了，谢谢

user: user-0
content: 引用 1 楼 user-3的回复:不需要，malloc/realloc，调用成功，返回有效指针；调用失败返回NULL。前面再加上=NULL，没实际意义。 好的，明白了，谢谢

user: user-1
content: 这是按照变量先声明，后定义的顺序；其实也可以声明的时候就定义。

user: user-2
content: 都可以，习惯问题

user: user-3
content: 不需要，malloc/realloc，调用成功，返回有效指针；调用失败返回NULL。前面再加上=NULL，没实际意义。
user-0 提问: 用C语言编写“有这样的日期吗”，麻烦各位大佬帮我看看哪里错了

回复:
user: user-1
content: 楼主的代码可以编译呀。只不过我将第一个输入变量值写固定了；        int y,m,d,i,n=2;     //scanf("%d",&n);     for(i=0;i<n;i++)     {         printf("input:y,m,d\n");         scanf("%d %d %d",&y,&m,&d);        //.........     }  //以下为运行结果 input:y,m,d 2000 2 29 yes input:y,m,d 2001 2 29 no

user: user-2
content: //#include<stdio.h>; #include<stdio.h>  int main() {     int y,m,d,i,n;      scanf("%d",&n);     for(i=0;i<n;i++) {         scanf("%d %d %d",&y,&m,&d);         if(m==2){             if((y%4==0&&y%100!=0)||y%400==0) {                 if(d<=29)                     printf("yes\n");                 else                     printf("no\n");             }             else {                 if(d<=28)                     printf("yes");                 else                     printf("no\n");             }         }         else if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) {             if(d<=31)                 printf("yes\n");             else                 printf("no\n");         }         else if(((m==4||m==6||m==9||m==11))&&d<=30)             printf("yes\n");         else printf("no\n");     }     return 0; } 供参考～  楼主的问题是？

user: user-1
content: 第1行后面的分号，没必要；   程序不能编译？还是运行结果有误？

user: user-3
content: if((y%4==0&&y%100!=0)||y%400==0)中!=不对吧，这应该是==吧  else if(((m==4||m==6||m==9||m==11))&&d<=30)      printf("yes\n");       else printf("no\n");     } 这里有|m==11))&&d<=30)这样的表达吗? else if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){ if(d<=31) printf("yes\n"); else printf("no\n"); 你像这处写也许会好点 我也是初学者，说的不一定对啊

user: user-4
content: 这是我之前写的一个求某个日期是某年的第几天的代码，里面就有判断日期是否存在，你可以借鉴一下； #include<stdio.h> int b[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int f(int x,int y,int z) { 	if(x%4==0||y>2) 		if(x%100!=0||x%400==0) 			z+=1; 		for(;y>1;) 		{ 			y-=1; 			z+=b[y]; 		} 		return z; }; int main() { 	int x,y,z,n=0; 	for(;n==0;) 	{ 		n=1; 		printf("请输入你要计算的日期:(例如 2020 11 02)\n"); 		scanf("%d%d%d",&x,&y,&z); 		if(y==2) 		{ 			if((x%4!=0||x%100==0) && (z<1 || z>28) ) 		    n=0;} 		else 		{ 			if(z<1 || z>b[y]) 				n=0; 		} 		if(n==0) 			printf("输入的日期有误。\n\n"); 	} 	printf("%d年%d月%d日是今年的第%d天。\n",x,y,z,f(x,y,z));  	return 0; }
user-0 提问: c语言选择排序的问题

回复:
user: user-1
content: 仅供参考： #include <stdio.h> int main(void) {     int j, i, tmp;     int a[5] = { 5,4,7,1,8 };     for (j = 0; j < 4; j++)     {         int min = j;         for (i = j + 1; i < 4; i++)         {             if (a[i] < a[min]) min = i;         }         if(min != j)         {             tmp = a[min];             a[min] = a[j];             a[j] = tmp;         }     }     for (j = 0; j < 4; j++)     {         printf("%d ", a[j]);     } }
user-0 提问: C语言的题目

回复:
user: user-1
content: 仅供参考： #include <stdio.h> #include <ctype.h> #include <stdlib.h>  #define LEN 10001  int main(void) { 	char buf[LEN], *p; 	 	fgets(buf, LEN, stdin); 	p = buf; 	 	while(*p) 	{ 		if(isalpha(*p)) printf("%c", 'A'+'z'-*p); 		else printf("%c", *p); 		p++; 	}      	return 0; }
user-0 提问: 求大佬帮忙修改一下

回复:
user: user-1
content: 要用数组的话，第9行}后面得写成users[10];这样

user: user-2
content: user 只是定义为结构体变量，程序里user[i]是哪来的?

user: user-2
content: 第9行，};user ; 这句，｝和user 之间多了“；”号
user-0 提问: c语言问题求解: 过滤数组里三的倍数

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:void filter(int* a, int* n, bool(*f)(int)) { 	for (int i = 0; i < *n; ++i) 	{ 		if (!f(a[i])) 		{ 			if ((i + 1) >= *n) { break; }  			memmove_s(&a[i], (*n - i) * sizeof(int), &a[i + 1], (*n - i - 1) * sizeof(int));  			--i; 			*n -= 1; 		} 	} } 请问如果不用memmove_s用malloc之类的话可以吗

user: user-0
content: 谢谢谢谢谢谢🙏

user: user-1
content: void filter(int* a, int* n, bool(*f)(int)) { 	for (int i = 0; i < *n; ++i) 	{ 		if (!f(a[i])) 		{ 			if ((i + 1) >= *n) { break; }  			memmove_s(&a[i], (*n - i) * sizeof(int), &a[i + 1], (*n - i - 1) * sizeof(int));  			--i; 			*n -= 1; 		} 	} }

user: user-0
content: 太感谢了！我还想问一下这样print出来的话是0 63 42 21，如果想从小到大顺序排列该怎么办呢？

user: user-1
content: void filter(int* a, int* n, bool (*f)(int)) { 	for (int i = 0; i < *n; ++i) 	{ 		if (!f(a[i])) 		{ 			a[i] = a[i] ^ a[*n - 1]; 			a[*n - 1] = a[i] ^ a[*n - 1]; 			a[i] = a[i] ^ a[*n - 1];  			--i; 			*n -= 1; 		} 	} }
user-0 提问: 普通的二维数组，输入与输出不符，求助！

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  int main(void) {     int N,M,i,j,k,q,z;     int *a;// 每个区域容纳人数     int **p;// 每个人对每个区域的满意     int s=0,max;//  s是满意度和,max是满意度最大值     scanf("%d%d",&N,&M);//N是区域数 M是人数      a = (int *)malloc(sizeof(int) * N);     if (!a)         return -1;      p = (int **)malloc(sizeof(int *)* M);     if (!p)         return -1;      for (i = 0; i < M; i++) {         p[i] = (int *)malloc(sizeof(int) * N);         if (!p[i])             return -1;     }     for(i=0; i<M; i++)         for(j=0;j<N;j++)             //scanf("%d",(*p+i)+j);             scanf("%d", *(p+i)+j);      for(i=0;i<M;i++)         for(j=0;j<N;j++)             //printf("%d ",*((*p+i)+j));             printf("%d ",*(*(p+i)+j));     /*     a=(int *)malloc(sizeof(int)*N);     p=(int **)malloc(sizeof(int)*M);     p[0]=(int *)malloc(sizeof(int)*N*M);     for(i=0;i<M;i++)         for(j=0;j<N;j++)             scanf("%d",(*p+i)+j);     for(i=0;i<M;i++)         for(j=0;j<N;j++)             printf("%d ",*((*p+i)+j));     */     free(a);     for (i = 0; i < M; i++)         free(p[i]);     free(p);     //free(p[0]);     return 0; } 供参考～

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

user: user-2
content: 仅供参考： #include <stdio.h>   #include <stdlib.h>    int main(void) {     int **p, m, n, i, j;          /* 输入二维数组行与列 */     scanf("%d%d", &m, &n);          /* 开辟二维数组空间 */     p = malloc(sizeof(int *) * m);     for (i = 0; i < m; i++)         p[i] = malloc(sizeof(int) * n);      /* 输入二维数组，初始化 */     for (i = 0; i < m; i++)     {         for (j = 0; j < n; j++)         {             scanf("%d", &p[i][j]);         }     }      /* 打印二维数组 */     for (i = 0; i < m; i++)     {         for (j = 0; j < n; j++)         {             printf("%d ", p[i][j]);         }     }     printf("\n");      /* 释放二维数组空间 */     for (i = 0; i < m; i++)         free(p[i]);     free(p);          return 0; }   运行结果： E:\Workspace>tcc -run demo.c 3 3 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9

user: user-3
content: p=(int **)malloc(sizeof(int)*M); 这里是不是应该是  p=(int **)malloc(sizeof(int *)*M);
user-0 提问: 字符串处理相关问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:C标准库中有：strncat，头文件：string.h谢谢啊，这个函数不太符合我的要求，因为没办法摘取中间的某个片段，最后还是自己写函数实现的

user: user-1
content: C标准库中有：strncat，头文件：string.h
user-0 提问: 求解

回复:
user: user-1
content: 把你的需求再详细一些吧

user: user-2
content: int a, b, c; scanf("[%d:%d:%d]",  &a, &b, &c);

user: user-0
content: 这是一个题目的一部分，你运行一下，输完n之后就直接输出了一大堆乱的数字

user: user-1
content: [%d:%d:%d] 注意输入的格式是需要有[]还需要在[]中有:冒号，也要注意冒号的中英文。即scanf中的冒号是中文，输入的内容用的冒号也需要是中文的，反之用是英文就应该输入英文的。  scanf("%s",s); 输入这个是干什么的？下面没有对s使用呢？  引用 3 楼 Aa_1z 的回复:[quote=引用 2 楼 自信男孩的回复:]把你的需求再详细一些吧 #include<stdio.h>  int main() {     int t;     scanf("%d",&t);     for(int i=0; i<t; i++)     {         int n;char s[100];         scanf("%s",s);         scanf("%d",&n);         for(int p=0; p<n; p++)         {             int a,b,c;             scanf("[%d:%d:%d]",&a,&b,&c);             printf("%d %d %d",a,b,c);         }     }     return 0; } 这样就不行，输出的a,b,c不对[/quote]

user: user-0
content: 引用 2 楼 自信男孩的回复:把你的需求再详细一些吧 #include<stdio.h>  int main() {     int t;     scanf("%d",&t);     for(int i=0; i<t; i++)     {         int n;char s[100];         scanf("%s",s);         scanf("%d",&n);         for(int p=0; p<n; p++)         {             int a,b,c;             scanf("[%d:%d:%d]",&a,&b,&c);             printf("%d %d %d",a,b,c);         }     }     return 0; } 这样就不行，输出的a,b,c不对
user-0 提问: 文件流写字符进去txt文件，只有一个字符但是读出来有4095个？为什么

回复:
user: user-1
content: 就像楼上朋友说的，写文件就用“w”读文件就用“r”，这样应该就没问题了。

user: user-2
content: fputc 是把内容写入缓存区，并不是一定写入文件，fseek后才会真正写入文件。

user: user-3
content: 其实，楼主只要把代码中的fputc('z', fp)，改成：fputs("z", fp)，再调用fseek(stream, 0, SEEK_SET); 指针复位，count就是1了。 C标准库实现，捉摸不透。

user: user-2
content: FILE* fp = NULL;     fp = fopen("d:\\aaa.txt", "w+");     int a = 0;     int count = 0;     fputc('z', fp);     fclose(fp);     fp = fopen("d:\\aaa.txt", "r+");     while ((a = fgetc(fp)) != EOF)         count++;     fclose(fp);     printf("%d", count);这样就变成1了

user: user-3
content: 应该是4k个。你写要给字符'z'，当前指针后移了一位。后面给你填充了4k-1个空占位字符。 如果在用while循环前面调用：fseek(stream, 0, SEEK_SET); 指针复位，count就是4k了。  感觉这就是c标准库无比恶心的地方。还是直接用open read write好，简单，直接，粗暴。。。