Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 为什么有一个是错的，大佬帮帮忙

回复:
user: user-1
content: if(pattern[n]=='\0') { flag_1=1; index=k;//这里加一句 break; }  printf("%s",string+(index+1));这一句把index+1改成index 试试看对不对

user: user-2
content: #include<stdio.h>  char string[1000000],pattern[1000000];  int main() {     int n;     int i, j, k;  #if  1     scanf("%s",string);     scanf("%d",&n);      i = 0;     while (i < n) {          scanf("%s", pattern);          j = 0;         while (string[j]) {             if (string[j] == pattern[0]) {                 for (k = 0; string[j+k] && pattern[k]; k++)                     if (string[j+k] != pattern[k])                         break;                 if (pattern[k] == 0 && string[j+k] != 0) {                     puts(string+j);                     break;                 }                 if (string[j+k] == 0) {                     printf("Not found!\n");                     break;                 }             }             j++;         }         if (string[j] == 0)             printf("Not found!\n");         i++;     } #else     char string[1000000],pattern[1000000];     int n;     scanf("%s",string);     scanf("%d",&n);     for(int i=0; i<n; i++)     {         int m=0,n=0,index=0,flag=0,flag_1=0;         scanf("%s",pattern);         while(string[m]!='\0')         {             if(string[m]==pattern[0])             {                 for(int k=m+1,n=1;; k++,n++)                 {                     if(string[k]=='\0'&&pattern[n]!='\0')                     {                         flag=1;                         break;                     }                     if(pattern[n]=='\0')                     {                         flag_1=1;                         break;                     }                     if(string[k]==pattern[n])                         index=k;                     else                         break;                 }             }             m++;             if(flag||flag_1)                 break;         }         if(flag_1)         {             printf("%s",pattern);             printf("%s",string+(index+1));             printf("\n");         }         else             printf("Not Found\n");     } #endif     return 0; }  供参考～
user-0 提问: 请问字符串数组用scanf写入时提示访问冲突是什么原因？

回复:
user: user-0
content: 引用 4 楼 自信男孩 的回复: scanf_s("%s", str, 6);  scanf_s和scanf的区别建议楼主搜一下，然后学习一下吧 haode!!

user: user-1
content: scanf_s("%s", str, 6);  scanf_s和scanf的区别建议楼主搜一下，然后学习一下吧

user: user-2
content: 引用printf("%s", str[cnt]);这句输出因改为： printf("%c", str[cnt]);

user: user-0
content: 引用 1 楼 赵4老师 的回复:scanf_s("%5s",str,6); https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=msvc-160&viewFallbackFrom=vs-2019 非常感谢！

user: user-3
content: scanf_s("%5s",str,6); https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=msvc-160&viewFallbackFrom=vs-2019
user-0 提问: 为什么输出结果第一个不可以是1，2，3

回复:
user: user-1
content: 1,2,3 1,2,4 1,2,5 1,3,2 1,3,4 1,3,5 1,4,2 1,4,3 1,4,5 1,5,2 1,5,3 1,5,4 2,3,4 2,3,5 2,4,3 2,4,5 2,5,3 2,5,4 3,2,4 3,2,5 3,4,2 3,4,5 3,5,2 3,5,4 4,2,3 4,2,5 4,3,2 4,3,5 4,5,2 4,5,3  这是输出结果～

user: user-2
content: 虽然你的代码不太规范，但第一个肯定是1，2，3。。
user-0 提问: "POINTF*"类型的实参与“IB_POINT*”的形参不兼容

回复:
user: user-0
content: 同样的MFC工程，在自己电脑上编译运行都是ok的。换了台电脑，就显示很多未定义标识符，而且错误大多都是来自系统头文件。这台电脑一开始没装C++，难道是我没装完整?稍微对比了一下，也没发现那个是缺少的啊。电脑重启了一遍，也还是这样。    能不能帮帮忙，顺带也把这个问题也解决了啊。感谢各位了。

user: user-1
content: 类型不匹配，传递指针，如果类型不一样，那么这个指针控制的内存区域是不一样的。

user: user-0
content: 引用 1 楼 赵4老师 的回复:IB_POINT ibps1[9],ibps2[9]; for (int i=0;i<9;i++) {  ibps1[i].dX=pDlg->PixlPoint[i].x;  ibps1[i].dY=pDlg->PixlPoint[i].y;  ibps2[i].dX=pDlg->PhyPoint[i].x;  ibps2[i].dY=pDlg->PhyPoint[i].y; } 将第哦啊用函数中的参数 pDlg->PixlPoint替换为ibps1， pDlg->PhyPoint替换为ibps2     谢谢，我刚刚自己解决了。方法差不多就是您这样的。直接将一开始定义的POINTF修改为IB_POINT。就直接可以了。   后续稍做修改就跑通了。打断点也确实看到数据流通也没有问题。  不过还是谢谢你了哈。

user: user-2
content: IB_POINT ibps1[9],ibps2[9]; for (int i=0;i<9;i++) {  ibps1[i].dX=pDlg->PixlPoint[i].x;  ibps1[i].dY=pDlg->PixlPoint[i].y;  ibps2[i].dX=pDlg->PhyPoint[i].x;  ibps2[i].dY=pDlg->PhyPoint[i].y; } 将第哦啊用函数中的参数 pDlg->PixlPoint替换为ibps1， pDlg->PhyPoint替换为ibps2
user-0 提问: 字符转换

回复:
user: user-1
content: 这一句 for(m=0;m<l;m++) { if(a[m]==a[i]) break;} 和这一句 if(a[i]!=a[m]) break; 有冲突，前一句a[m]==a[i]后跳出执行第二句，a[m]==a[i]，也就是第二句条件始终不会成立; 所以a[i]=97+k会一直循环到最后，也就是'z'。

user: user-2
content: 你的代码要干什么？

user: user-0
content: 引用 2 楼 自信男孩的回复:因为在第二个for循环里，一直在97+k，最后把97+25赋值给了a[i]。相当于执行了a[i] = 97+k;26次，a[i]只保存最后一次的修改，最后一次的修改就是97+25  这句下面的代码都是冗余的，没有意义的；  如果将第三个for循环外的 if (a[m] != a[i])     break; 改成： f (a[m] == a[i])     break; 还能提前退出第二个for的循环，而a[i] = 97+k;这个k可能是0~25之间的某个数； 我知道问题了，for语句的m是局部变量 怎么把它变成全局啊

user: user-0
content: 我的想法是如果第一个break执行，第二个break就不会执行；如果第一个break不执行，第二个break就执行。感觉没毛病诶

user: user-3
content: 因为在第二个for循环里，一直在97+k，最后把97+25赋值给了a[i]。相当于执行了a[i] = 97+k;26次，a[i]只保存最后一次的修改，最后一次的修改就是97+25  这句下面的代码都是冗余的，没有意义的；  如果将第三个for循环外的 if (a[m] != a[i])     break; 改成： f (a[m] == a[i])     break; 还能提前退出第二个for的循环，而a[i] = 97+k;这个k可能是0~25之间的某个数；

user: user-3
content: 引用 9 楼  的回复:[quote=引用 8 楼 的回复:]问一下for语句用了break后它的变量会怎么样？ 比如for(i=0;i<100;i++)  中途用了break 跳出循环后i是多少 #include<stdio.h> #include<string.h> int main() {     char english[2][20]={"red","white"};     char chinese[2][20]={"红色","白色"};     char a[20];     int i;     scanf("%s",a);     for(i=0;i<2;i++)     {         if(strcmp(a,english[i])==0)         break;         if(strcmp(a,chinese[i])==0)         break;            }     if(i<2)     {     printf("%s   ",english[i]);     printf("%s\n",chinese[i]);     }     if(i=2)     printf("not found"); }  为什么无论如何都会输出not found[/quote]   if(i=2) 这样的表达式怎么都会输出if后面的语句。因为这个是恒成立的。i=2，2是真。应该是i == 2吧，要细心一些哦～

user: user-1
content: if(i=2) 改成if(i==2)

user: user-1
content: 引用 8 楼 的回复:问一下for语句用了break后它的变量会怎么样？ 比如for(i=0;i<100;i++)  中途用了break 跳出循环后i是多少 break之前的值，不会再自增

user: user-0
content: 引用 8 楼 的回复:问一下for语句用了break后它的变量会怎么样？ 比如for(i=0;i<100;i++)  中途用了break 跳出循环后i是多少 #include<stdio.h> #include<string.h> int main() {     char english[2][20]={"red","white"};     char chinese[2][20]={"红色","白色"};     char a[20];     int i;     scanf("%s",a);     for(i=0;i<2;i++)     {         if(strcmp(a,english[i])==0)         break;         if(strcmp(a,chinese[i])==0)         break;            }     if(i<2)     {     printf("%s   ",english[i]);     printf("%s\n",chinese[i]);     }     if(i=2)     printf("not found"); }  为什么无论如何都会输出not found

user: user-0
content: 问一下for语句用了break后它的变量会怎么样？ 比如for(i=0;i<100;i++)  中途用了break 跳出循环后i是多少

user: user-1
content: 没明白想要把‘?’换成什么， 试试把这一句 if(a[m]==a[i]) break; 改成 if((a[m]==a[i])&&(m!=i)) break; 你想要的结果是不是这个样子

user: user-3
content: 引用 3 楼  的回复:我的想法是如果第一个break执行，第二个break就不会执行；如果第一个break不执行，第二个break就执行。感觉没毛病诶 外面再用m可能已经越界了。f (m < l && a[m] == a[i])     break;  确保m小于l，否则越界～
user-0 提问: 如何定义一个函数指针数组

回复:
user: user-1
content: 你再想想函数指针怎么定义的？ int func(int,int); int (*ptr//函数指针名)(int,int); ptr=&func; 所以[] 必须放到ptr后面

user: user-1
content: (int (*)(int,int)) a[10] 这个为什么错的，因为 (int (*)(int,int))  他不是类型而是一个定义一个类型的指针

user: user-1
content: C++11 方便多了 int func(int ,int); decltype(func)* a[1]{func};

user: user-2
content: 引用 1 楼 自信男孩 的回复:typedef int (*pfunc)(int, int); pfunc a[10]; 这样试试；  或者  int (*a[10])(int, int); 这样定义也是可以的。  以上都是定义指针数组。 定义函数指针数组～

user: user-2
content: typedef int (*pfunc)(int, int); pfunc a[10]; 这样试试；  或者  int (*a[10])(int, int); 这样定义也是可以的。  以上都是定义指针数组。
user-0 提问: 求大佬帮忙

回复:
user: user-0
content: 引用 2 楼 qybao的回复:动态申请内存 for example  int main( ) {     int n, i, *a;     printf("请输入n:");     scanf("%d", &n);     a = (int*)malloc(sizeof(int)*n);     printf("请输入n个变量的值:");     for (i=0; i<n; i++) {         scanf("%d", &a[i]);     }     //计算处理，LZ自己加吧          //打印结果     for (i=0; i<n; i++) {         printf("a[%d]=%d ", i, a[i]);     }          free(a);     return 0; } 多谢大佬！

user: user-0
content: 引用 1 楼 自信男孩的回复:做什么计算？ 就是四则运算那种

user: user-1
content: 动态申请内存 for example  int main( ) {     int n, i, *a;     printf("请输入n:");     scanf("%d", &n);     a = (int*)malloc(sizeof(int)*n);     printf("请输入n个变量的值:");     for (i=0; i<n; i++) {         scanf("%d", &a[i]);     }     //计算处理，LZ自己加吧          //打印结果     for (i=0; i<n; i++) {         printf("a[%d]=%d ", i, a[i]);     }          free(a);     return 0; }

user: user-2
content: 做什么计算？
user-0 提问: 为什么我的电脑上system函数用不了

回复:
user: user-0
content: 引用 4 楼 赵4老师的回复:现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！ 能详细点吗，管理员窗口我只用过cd改mysql目录进行登录≥﹏≤

user: user-1
content: 现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！

user: user-0
content: 引用 1 楼 自信男孩的回复:确定跟system有关吗？注释掉试试？ 没看出跟system这句有关系呢，不是有提示"按任意键关闭此窗口..."这句吗？这句不是针对system的吗？ 我在学校机房是没问题的，自己电脑就不行了

user: user-0
content: 引用 1 楼 自信男孩的回复:确定跟system有关吗？注释掉试试？ 没看出跟system这句有关系呢，不是有提示"按任意键关闭此窗口..."这句吗？这句不是针对system的吗？ 首先第一个system是修改背景板和字体颜色，就已经没有生效了，其次第二个system是冻结屏幕，出现的提示是“请按任意键继续”也没有出现

user: user-2
content: mysql也有system命令

user: user-3
content: 确定跟system有关吗？注释掉试试？ 没看出跟system这句有关系呢，不是有提示"按任意键关闭此窗口..."这句吗？这句不是针对system的吗？
user-0 提问: c语言小白问题

回复:
user: user-1
content: #include <stdio.h>  int main(void) {     int x, y;     int a=2,b=4,c=6;     y= ((x=a+b), (b+c));     printf("y=%d，x=%d\n",y, x) ;      return 0; } 楼主这个值是y=10，但是对比一下你的表达式有什么不一样？  举个例子：  int x = 5, y; 请问x？y?  这样的表达式你可能比较理解，因为是对x初始化为5，y没有初始化；  你可能是理解为逗号表达式，但是楼主的y = (x=a+b), (b+c);y后面的表达式是一个整体吗？和上面的代码是不是相差一个()呢？
user-0 提问: 求指点顺序栈的出栈入栈操作

回复:
user: user-1
content: #include <stdio.h> #include <malloc.h>  #define maxsize 100  typedef struct node {     int stack[maxsize];     int top; }Seqstack;  Seqstack *initstack(Seqstack *s) {     s=(Seqstack *)malloc(sizeof(Seqstack));     if(!s) {         printf("空间不足\n");         return NULL;     }     else {    s->top=-1;         return s;     } } Seqstack *push(Seqstack *s,int x) {     if(s->top==maxsize-1)     {         printf("栈已满\n");         return NULL;   }     else   {         s->top++;         s->stack[s->top]=x;         return s;     } }  int pop(Seqstack *s) {   if(s->top==-1)     {         printf("栈空\n");         //return NULL;    //为啥要返回NULL？         return -1;     }     else         s->top--;     return s->stack[s->top+1]; } void display(Seqstack *s) {     int i = 0;      if(s->top==-1)     {         printf("栈空\n");     }     else {         while(i < s->top)         {             //s->top--;             printf("%d->",s->stack[i]);             i++;         }     } }  //void main() int main() {   Seqstack *s,*p;     int i;     int a[6]={3,5,7,2,9,16};     s=initstack(s);     printf("入栈:");     for(i=0;i<6;i++)         s = push(s,a[i]);     display(s);     printf("\n出栈:");     while(s->top!=-1)         printf("%4d", pop(s));     printf("\n"); } 供参考～  原因是在display函数，这个函数已经修改了top值，导致在出栈时top已经是-1了，所以没有出栈的数据了。 所以，在display函数里不要修改top的值，只是做一下遍历即可～
user-0 提问: ip address类型怎么定义?

回复:
user: user-1
content: u32（unsigned int）也可以存放IP地址。

user: user-2
content: socket.h里面不是有吗？直接用啊 如果不用socket，ipv4，不过是32位整形，直接unsigned int 就可以啊

user: user-3
content: 看你的需要了，可以是字符串，也可以用无符号整数，也可以用结构
user-0 提问: 新手求助 数据结构 二叉树

回复:
user: user-0
content: 已自行修改，成功运行👌

user: user-1
content: C与C++大杂烩，乱成一锅粥，谁看谁难受。

user: user-2
content: 你这叫新手，你好像在侮辱人
user-0 提问: PTA入门练习请教  整除光棍 /shuffling machine/黑洞数

回复:
user: user-0
content: 大家可以不要管那个完数 今晚我脑子太乱了 明早起来再看一下 谢谢啦  然后里面肯定有很多错误 各位就不要客气  就直接指出吧  ，， （已经被小伙伴打击习惯了 哈哈哈 多么辛酸）   谢谢啦 各位晚安 （睡不了美容觉 保命觉也得睡啊，避免英年早逝）
user-0 提问: #C语言基础

回复:
user: user-1
content: if(a[i]=='?') {    a[i]='!'; }

user: user-0
content: 引用 1 楼 阿麦的回复:不能。strcmp(const char*, const char*)，参数是字符指针  a[i]类型不对  如果要这样判断，可以用  a[i] == '?' 那怎么把a[i]替换成别的字符呢？

user: user-2
content: 不能。strcmp(const char*, const char*)，参数是字符指针  a[i]类型不对  如果要这样判断，可以用  a[i] == '?'

user: user-0
content: 我傻了，用了双引号

user: user-0
content: cannot convert from 'char[2]' to 'char' 不行啊

user: user-0
content: 引用 3 楼 棉猴的回复: if(a[i]=='?') {    a[i]='!'; }  cannot convert from 'char[2]' to 'char' 不行啊
user-0 提问: c语言vc2010可以运行的程序为什么Dev不可以运行

回复:
user: user-0
content: 引用 2 楼 轻语2000的回复:你看你的报错提示啊“bianli” was not declared bianli那是之前的一个函数，我把他给删掉了，没删之前就有错误，说要return int

user: user-1
content: 建议楼主把代码贴全，并把问题的内容贴全。

user: user-2
content: 小错误要注意

user: user-2
content: 你看你的报错提示啊“bianli” was not declared

user: user-3
content: 因为你这代码不规范，vc2010太老了，新标准支持不到位。 最好用vs2019，或者Embarcadero_Dev-Cpp_6.1（gcc9.2）

user: user-4
content: 原因很清楚了，严格来说， int func() {} 必须返回一个 int。如果没有返回值，定义成 void func() {}  引用 5 楼 m0_51316636 的回复:[quote=引用 2 楼 轻语2000的回复:]你看你的报错提示啊“bianli” was not declared bianli那是之前的一个函数，我把他给删掉了，没删之前就有错误，说要return int[/quote]

user: user-2
content: 引用 5 楼 m0_51316636的回复:[quote=引用 2 楼 轻语2000的回复:]你看你的报错提示啊“bianli” was not declared bianli那是之前的一个函数，我把他给删掉了，没删之前就有错误，说要return int[/quote] 所以说嘛，应该把代码贴完整，不然要误会
user-0 提问: 小白在c语言中遇到的问题

回复:
user: user-1
content: 1.0/3首先结果是一个浮点数(double），如果用%d输出，由于浮点数和整型数在内存里的表示是不一样的。同样是1和1.0f对于不同的类型（浮点数和整型数），虽然都是4字节，但是可以看一下对应的16进制是不一样的。      printf("%x\n", 1.0f);     printf("%x\n", 1); 这是结果： cff6c8 1

user: user-2
content: /是整数除，以%d输出，浮点除还是用%f吧

user: user-3
content: 1.0/3是double类型，在内存中的值是  转换成int是1431655765 double类型的格式，请参考《C++浮点型变量的存储方式》 希望能够帮到您！

user: user-4
content: 有趣。不知道是不是所有编译器都是这个结果。 不过，还是按照规矩来比较好，用 %f。 有时候，不规范或错误的事做多了，会变成习惯的。
user-0 提问: 弱弱的猿C语言遇到大问题

回复:
user: user-0
content: 推荐是看书，还是按看视频，本人看书感觉有点乏味

user: user-0
content: 引用 3 楼 ctrigger 的回复:[quote=引用 2 楼 namedashadiao 的回复:]数据结构和算法有推荐的学习途径吗？ 大学不学数据结构和算法么？啥情况？？ 严蔚敏老师的数据结构不错，适合入门。[/quote] 不是不学，大二学，想提前学

user: user-1
content: 写是最好的练习

user: user-2
content: 引用 2 楼 namedashadiao 的回复:数据结构和算法有推荐的学习途径吗？ 大学不学数据结构和算法么？啥情况？？ 严蔚敏老师的数据结构不错，适合入门。

user: user-0
content: 数据结构和算法有推荐的学习途径吗？

user: user-3
content: 学完数据结构与算法再蓝桥吧
user-0 提问: 技术小白刚开始学c，能有大佬帮忙看下哪里有问题吗，谢谢大佬们了

回复:
user: user-0
content: 谢谢大佬！不过还想问问我原来的为什么运行出来的结果很奇怪

user: user-1
content: #include<stdio.h> #include<string.h>  char s1[500],s2[20]; char substr[20];  void findshort(char str[]) {     int len, i, sub_len = 0;       len = strlen(str);      for (i = 0; str[i]; i++) {         if (sub_len == 0 && (str[i] == ' ' || str[i] == '\n'))             continue;         if (str[i] == ' ' || str[i] == '\n') {             if (sub_len < len && sub_len != 0) {                 len = sub_len;                 memcpy(substr, &str[i-sub_len], sub_len);                 substr[sub_len] = 0;             }             sub_len = 0;         } else if (str[i] != '\n') {             sub_len++;         }     }  #if 0     int c,i,j,min;     c=strlen(s);     min=0;     j=0;     for(i=0;i<c;i++)     {          if (s[i]>=((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')))             j++;         else         {             if (min<j)                 for(int n=0;n<j;n++)                     s2[n]=s[i-j+n];             j=0;         }     } #endif }  int main() {     fgets(s1, 500, stdin);     findshort(s1);     printf("%s\n", substr);     return 0; } 供参考～
user-0 提问: 关于EOF

回复:
user: user-1
content: 把while(scanf("%d %d ",&a,&b)!=EOF) 改成 while(scanf("%d%d ",&a,&b)!=0) 然后输入非数字退出循环。

user: user-2
content: 不行不行，我用VC还是结束不了

user: user-3
content: linux: ctrl+d windows: ctrl+z 试试～

user: user-4
content: Linux是 ctrl + D windows 是ctrl + z
user-0 提问: 关于c语言数组的问题

回复:
user: user-1
content: 引用if(i％5=0) printf("\n");这句有误，应该为if(i％5==0)

user: user-2
content: 建议看看动态规划，你这个明显是有重叠子问题，这是状态转移方程，这个跟数组没冲突。

user: user-1
content: [i]表示的是地址门牌号为i f[i]表示的是那第i个门牌号里住了几个人

user: user-3
content: 他的地址不变，也就是存放的空间不变，而不是他里面存放的东西不能变。

user: user-4
content: 计算斐波那契数列 1,1,2,3,5,....

user: user-5
content: 不是呀  数组元素你可以修改的  f[i]=f[i-1]+f[i-2]就是从数组的第三个元素开始 元素的值是前两个元素的和

user: user-6
content: 一般来说，数组元素赋初值后是可以改变的。f［i］=f[i-2]+f［i-1］，这句话的意思就是从第三个元素开始，后面的每个元素等于前两个元素之和
user-0 提问: 这道数据结构是不是题有问题

回复:
user: user-1
content: 同问楼主解决了吗

user: user-0
content: 各位大佬写出来的把可能的中序排列写一下就行，这样比较简单，但是我觉得没有这课树我画出最接近的树前序序列为abcdfeg
user-0 提问: 波形图怎么求幅度？

回复:
user: user-1
content: 如何过滤掉毛刺和抖动？？如何判断第一个波形，第一个波形的波幅要不要纳入计算？？？最后一个波形如何判断，如何处理？？题主是这还是一个比较规则的波形，现实采样的波形必定有毛刺，有些波形比如脉搏还会有抖动（就是上升过程中到部分人的都会中途抖一下）。请不要以纯数学的角度来考虑问题。。。我抖没百度到解决方法，估计波幅算法都是属于每个公司的核心资产。。。。

user: user-1
content: 而且抖动那次有的时候比最终的那个波顶还要高，有的时候却比最终那个波顶低，而且不是每次都会抖那么一下。。请问各位怎么处理。。。。。

user: user-0
content: 感觉你说的波幅和我的不一样，不属于核心算法，只是求一个正弦波的斜率

user: user-1
content: 那就太简单了，最简单的方法就是找出最大最小值即可。复杂一点找出两个拐点就可以。。

user: user-2
content: 引用 3 楼 顾染尘 的回复:[quote=引用 2 楼 ctrigger 的回复:]扫描点，找Y最大值，最小值。 （最大值-最小值）/ 2。。。 我理解就是峰值减去谷值除以2，对的吗？（我还以为幅度是要求角度或者是斜率）感谢！[/quote]  对，就是这样的。 方程应该类似这样的：y = Asin(ωx + φ)，复制是A。

user: user-0
content: 引用 2 楼 ctrigger 的回复:扫描点，找Y最大值，最小值。 （最大值-最小值）/ 2。。。 我理解就是峰值减去谷值除以2，对的吗？（我还以为幅度是要求角度或者是斜率）感谢！

user: user-2
content: 扫描点，找Y最大值，最小值。 （最大值-最小值）/ 2。。。

user: user-3
content: 從圖形求幅度？掃描每個點的坐標不就出來了嗎
user-0 提问: 初学者关于随机数统计结果的的问题

回复:
user: user-1
content: void gen_random(int upper_bound) {         int i;          srand(time(NULL);    //生成一个种子～         for(i=0;i<N;i++)                 a[i]=rand()%upper_bound; }

user: user-0
content: 可以的，蟹蟹。

user: user-2
content: 伪随机数。设置一个seed吧。 看看这样是否可行。  #include <stdlib.h> #include <time.h> #define N 100000  int a[N]; void gen_random(int upper_bound) {         int i; 	 	srand((unsigned int)time(NULL)); 	         for(i=0;i<N;i++)                 a[i]=rand()%upper_bound; } int howmany(int value) {         int count=0,i;         for (i=0;i<N;i++)                 if(a[i]==value)                         ++count;         return count; } int main(void) {         int i;         gen_random(10);         printf("value\thow many\n");         for(i=0;i<10;i++)                 printf("%d\t%d\n",i,howmany(i));         return 0; }

user: user-0
content: https://bbs.csdn.net/topics/390659274
user-0 提问: switch语句中数值导出运用下面编程

回复:
user: user-1
content: switch(s) {       case 1:printf("d=%d\n",d=a+b-c);break;       case 2:printf("d=%d\n",d=a+c-b);break;       case 3:printf("d=%d\n",d=b+c-a);break;       case 4:printf("d=%d\n",d=0);break;       case 5:printf("d=%d\n",d=c-b+a);break;       case 6:printf("d=%d\n",d=a-b+c);break;       case 7:printf("d=%d\n",d=b-a+c);break;       case 8:printf("d=%d\n",d=a+b);break;       case 9:printf("d=%d\n",d=a+c);break;       case 10:printf("d=%d\n",d=b+c);break;   default:printf("enter data error!\n");     }

user: user-2
user-0 提问: vscode编译头文件问题“undefined reference.....”

回复:
user: user-1
content: 许多年过去了，赵4老师还是如此的独领风骚

user: user-2
content: 靠猜是猜不出来或猜不全的。建议楼主贴全代码和对应的编译提示～

user: user-3
content: 这是链接错误。  需要在链接选项中添加依赖的库文件。

user: user-3
content: 上贴中红字应改为 “/link /LIBPATH:附加依赖库.lib所在目录"， “/link 附加依赖库.lib" //zhao4zhong1添加(^_^)

user: user-3
content: https://code.visualstudio.com/docs/cpp/config-msvc From the main menu, choose Terminal > Configure Default Build Task. In the dropdown, which will display a tasks dropdown listing various predefined build tasks for C++ compilers. Choose cl.exe build active file, which will build the file that is currently displayed (active) in the editor.  Tasks C++ build dropdown  This will create a tasks.json file in a .vscode folder and open it in the editor.  Your new tasks.json file should look similar to the JSON below:  {   "version": "2.0.0",   "tasks": [     {       "type": "shell",       "label": "cl.exe build active file",       "command": "cl.exe",       "args": [         "/Zi",         "/EHsc",         "/Fe:",         "${fileDirname}\\${fileBasenameNoExtension}.exe",         "${file}",       “/link /LIBPATH:附加依赖库.lib所在目录"，       “/link /IMPLIB:附加依赖库.lib" //zhao4zhong1添加(^_^)       ],       "problemMatcher": ["$msCompile"],       "group": {         "kind": "build",         "isDefault": true       }     }   ] } The command setting specifies the program to run; in this case that is "cl.exe". The args array specifies the command-line arguments that will be passed to cl.exe. These arguments must be specified in the order expected by the compiler. This task tells the C++ compiler to take the active file (${file}), compile it, and create an executable file (/Fe: switch) in the current directory (${fileDirname}) with the same name as the active file but with the .exe extension (${fileBasenameNoExtension}.exe), resulting in helloworld.exe for our example.
user-0 提问: c语言指针问题

回复:
user: user-0
content: 他们在这两个例子中都是指针向后移一位是吗

user: user-1
content: 应该说某种情况下，p++和p+1是一样的，*(p+1)是取值

user: user-2
content: p++是指针 *(p+1)是指针指向的值 p++和p+1也要看前后文才能确定是不是一样 *(p+1)和*(p++)在不同的前后文指向的值可能一样也可能不一样

user: user-3
content: 不一样的。p++是p+1赋值给p，而*(p+1)是p+1的地址，但是不会赋值给p，即这两个的区别：p++和p+1是否修改p上是不一样的。

user: user-2
content: p++指针位置后移一位，再用*p取值取的就是下一个位置的值 （p+1）是取后一位指针，指针p指向的值*p还是原来位置的值

user: user-0
content: 我想问一下在指针里面他们有什么不同，我看例子两个作用好像都是一样的，都是指针指向的对象向又偏移一个单位
user-0 提问: 数组

回复:
user: user-1
content: 这样的题不难，最好自己写。

user: user-2
content: 写个吧，你看看行不行？ #include <stdio.h> #define LEN 10  int main(void) { 	int a[LEN], n, i; 	int maxpos, minpos, sum; 	 	/* 输入n值 */ 	printf("input n:\n"); 	scanf("%d", &n); 	 	/* 输入n个数组值 */ 	printf("input n numbers:\n"); 	for(i=0; i<n; i++) 	{ 		scanf("%d", &a[i]); 	} 	 	/* 初始化 */ 	maxpos = minpos = 0; 	sum = a[0]; 	 	/* 扫描数组，找最大值、最小值位置，并计算和 */ 	for(i=1; i<n; i++) 	{ 		sum = sum + a[i]; 		if(a[i] > a[maxpos]) maxpos = i; 		if(a[i] < a[minpos]) minpos = i; 	} 	 	/* 输出结果 */ 	printf("max_value:\t%d\tmin_value:\t%d\n", a[maxpos], a[minpos]); 	printf("max_positon:\t%d\tmin_positon:\t%d\n", maxpos, minpos); 	printf("average_value:\t%.2f\n", 1.0*sum/n);  	return 0; }
user-0 提问: accept() 报错 “bad file descriptor"， 请问是什么原因？

回复:
user: user-0
content: 引用 3 楼 user-1的回复:[quote=引用 2 楼 陳錄生 的回复:]It works, why? 我的电脑fedora 33，也正常工作。  我觉得应该是“bzero(&s_addr, sizeof(s_addr));”已经赋值0了。即使后面不执行if语句，效果是一样的。[/quote] freebsd handbook是if( INADDR_ANY),而且之前没有报错，太搞了。

user: user-1
content: 引用 2 楼 陳錄生 的回复:It works, why? 我的电脑fedora 33，也正常工作。  我觉得应该是“bzero(&s_addr, sizeof(s_addr));”已经赋值0了。即使后面不执行if语句，效果是一样的。

user: user-0
content: It works, why?

user: user-1
content: 引用if(INADDR_ANY)         s_addr.sin_addr.s_addr = htonl(INADDR_ANY);   INADDR_ANY的值就是0，是不是写反了？？？
user-0 提问: accept函数的addr参数是客户端address还是服务器的addres?

回复:
user: user-1
content: 一般来说，服务器端调用accept函数，addr就是客户端地址信息。

user: user-2
content: 这个是对端的地址，对端socket的地址：       The  argument  addr is a pointer to a sockaddr structure.  This structure is filled in with the address of the peer socket
user-0 提问: C语言数据结构问题

回复:
user: user-1
content: #define后面的分号去掉，因为define是等价替换，替换之后在malloc的括号里就会出现;分号；

user: user-2
content: #define最后的分号';'去掉试试

user: user-0
content: S.base = (StackData*)malloc(STACK_INIT_SIZE * sizeof(StackData)); 就这一句，一直报错。。。
user-0 提问: 想问一下for循环中的一些问题

回复:
user: user-1
content: 中间i，表示i==0时退出for循环。

user: user-0
content: 中间那个变量忘记删了，只看n，i就行了

user: user-2
content: for循环结构：for(初始化变量；结束条件；每次执行操作) （具体的名词忘了） 所以i/=10每次除以10，中间的i是一个逻辑运算，i==0的时候退出

user: user-0
content: 引用 2 楼 ctrigger的回复:中间i，表示i==0时退出for循环。 哦哦哦  懂了 谢谢
user-0 提问: non-class type'char[20]' 这个怎么改啊

回复:
user: user-1
content: 看你的char[20] 你是不是想定义一个字符串一维数组； 如果是你应该给你想要定义的字符串取一个名字像str；所以你可以这样写char str[20]; 如过你仅仅是想要定义一个字符的话你可以这样写char a;

user: user-2
content: char是数据类型，要这么写 char s[20]才行

user: user-0
content: 引用 1 楼 user-3的回复:贴出代码看看 谢谢你啊，我已经改好了

user: user-3
content: 贴出代码看看
user-0 提问: 为啥出错啊

回复:
user: user-1
content: 对弈变量的大小写，另外，引入头文件时也要注意大小写；从编译提示上应该没有正确引入头文件。

user: user-0
content: 引用 4 楼 棉猴的回复:不是students，是student这个结构 结构写在student.h里面，在主函数(student_system.c)里又写了#include "student.h"。

user: user-2
content: 不是students，是student这个结构

user: user-0
content: 引用 2 楼 棉猴的回复: 从出错提示上看，应该是你的结构struct student没有定义完整。也就是说，在调用average()函数时，student可能只有声明没有定义 我在主函数那里声明了struct student students[50];

user: user-2
content: 从出错提示上看，应该是你的结构struct student没有定义完整。也就是说，在调用average()函数时，student可能只有声明没有定义

user: user-0
content: Count的C是小写
user-0 提问: C++怎么输出两个个字符串相加，求解

回复:
user: user-1
content: char str[100] = { 0 }; 	char *x = "abc"; 	char *y = "def"; 	strcpy(str, x); 	strcpy(str + strlen(x), y); 	printf("z=%s", str);

user: user-2
content: 你是在用c++（而不是c），所以你的直觉是对的，我们当然可以写 z= a+b; #include <iostream> void foo()  { 	std::string a("c++:"); 	std::string b("z=a+b"); 	std::string z = a + b; 	std::cout << z.c_str() << std::endl; }

user: user-3
content: C++版： #include <iostream> using namespace std;  int main(void) { 	string x = "abc"; 	string y = "def"; 	string z; 	 	z = x + y; 	cout << "z = " << z << endl; 	 	return 0; }  C版： #include <stdio.h>  int main(void) { 	char str[100]; 	char *x = "abc"; 	char *y = "def"; 	char *z = str; 	 	while(*x) *z++ = *x++; 	while(*y) *z++ = *y++; 	 	z = str; 	printf("z = %s\n", z); 	 	return 0; }

user: user-4
content: 可以通过strlen（）函数和for循环将两个字符串数组组合起来，将组合后的字符串输出便可以实现所谓的字符串相加了

user: user-5
content: 改成 z=str; strcpy(z, a); strcat(z, b); printf(“z=%s”, z);
user-0 提问: C语言学习过程中的问题讨论

回复:
user: user-0
content: 引用 3 楼 ctrigger的回复:先看书入门，再写代码巩固和提高。别无他法。。 高手自律，自学习惯，太多人不能坚持，遇到点问题直接放弃

user: user-1
content: 先看书入门，再写代码巩固和提高。别无他法。。

user: user-0
content: 引用 1 楼 自信男孩 的回复:建议针对具体问题来讨论～ 这个论坛的主要目的是为了给初学者提供一个讨论的地方，比如来看我视频教程的同学遇到问题，就可以在这里讨论 这里是我的视频教程 欢迎大家积极参与，所以没有设置具体的讨论问题，可能做得还不够完善，谢谢您的建议！

user: user-2
content: 建议针对具体问题来讨论～
user-0 提问: 第七行的3是什么意思啊!搞不明白

回复:
user: user-1
content: 引用 2 楼 Spectre Ghost 的回复:这是位运算呀 2*1=2 3左移两位然后取反

user: user-1
content: 这是位运算呀

user: user-2
content: a&=~(3<<2*1)   a=a&(~(3<<2*1)) 3(0000 0000 0000 0011)左移两位就是12(0000 0000 0000 1100)，取反(1111 1111 1111 0011)，再按位与就是把低3、4位置0，其余保留。
user-0 提问: C语言 求大佬帮忙！！

回复:
user: user-0
content: 引用 5 楼 ctrigger 的回复:用IF语句： int hahaha(int x, int y, int a, int b) {     int result = -1;          int ad = b - a*x;     int aa = y - x;          if(ad % aa == 0) result = ad / aa;      return result;     }感谢大佬

user: user-1
content: 用IF语句： int hahaha(int x, int y, int a, int b) {     int result = -1;          int ad = b - a*x;     int aa = y - x;          if(ad % aa == 0) result = ad / aa;      return result;     }

user: user-0
content: 引用 1 楼 阿麦 的回复:这是数学题啊  int hahaha(int x, int y, int a, int b) {     int ad = b - a*x;     int aa = y - x;      return ad % aa == 0 ? ad / aa : -1; } 如果if 怎么写呢

user: user-2
content: 引用 1 楼 阿麦 的回复:这是数学题啊  int hahaha(int x, int y, int a, int b) {     int ad = b - a*x;     int aa = y - x;      return ad % aa == 0 ? ad / aa : -1; } 感觉和鸡兔同笼的问题有那么一点点相似

user: user-3
content: 这是数学题啊  int hahaha(int x, int y, int a, int b) {     int ad = b - a*x;     int aa = y - x;      return ad % aa == 0 ? ad / aa : -1; }
user-0 提问: 请问这个问题出在哪里 谢谢大佬们

回复:
user: user-0
content: 这个是题目

user: user-1
content: 引用 6 楼 自信男孩 的回复:[quote=引用 2 楼 一颗白面馒头 的回复:]n没有初始化？你输入的数都没有按照你的想法保存在a数组里 对，主要问题在这里。  下面的循环也有问题，i >= 0这不就是一个死循环了吗？ 整个程序都感觉很奇怪～ [/quote] 哈哈哈，吃了炫迈的for循环？

user: user-2
content: 引用 2 楼 一颗白面馒头 的回复:n没有初始化？你输入的数都没有按照你的想法保存在a数组里 对，主要问题在这里。  下面的循环也有问题，i >= 0这不就是一个死循环了吗？ 整个程序都感觉很奇怪～

user: user-3
content: 有人说在 "%d"前加一个空格，即 " %d"，不知道灵不灵 另外： 第一、n 没有赋初值，危险，这样 n 可能会是任何值，导致 core dump 第二、for(int i=0; i>=0; i++) 这个循环不会结束的，会运行到天荒地老

user: user-1
content: n没有初始化？你输入的数都没有按照你的想法保存在a数组里
user-0 提问: 求教，这个连等式该如何理解？

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:根据链式队列的特点：先进先出，从头出，从尾进的特点，因此入队跟队尾有关系，C和D都跟队头有关，因此不会选。  p->next  = rear->next;是把rear的next（一般是NULL）赋值给p->next；一般是NULL，但是不清楚链表创建，所以这样写p->next  = rear->next;比较保险； rear = rear->next = p;先从右向左计算，p赋值给rear->next;然后rear->next赋值给rear，因此最后是把p放到队尾，并且让rear指向p； 哇，谢谢大神，讲的非常清楚。

user: user-1
content: 根据链式队列的特点：先进先出，从头出，从尾进的特点，因此入队跟队尾有关系，C和D都跟队头有关，因此不会选。  p->next  = rear->next;是把rear的next（一般是NULL）赋值给p->next；一般是NULL，但是不清楚链表创建，所以这样写p->next  = rear->next;比较保险； rear = rear->next = p;先从右向左计算，p赋值给rear->next;然后rear->next赋值给rear，因此最后是把p放到队尾，并且让rear指向p；
user-0 提问: c语言指针与结构体

回复:
user: user-0
content: 引用 8 楼 棉猴的回复:printf()函数的%d和%s打印内容时要求的参数格式不同，%d打印时，后面直接跟变量名，而%s打印时需要跟变量地址。所以  int *a = &b; printf("%d\n", *a);//------*a是指针指向的内容------- char *pa = arr; printf("%s", pa);//---------pa是指针----------  所以您说的打印pc指向的内容时，因为pc本身就是指针，所以不需要加* 好的，明白了，非常感谢

user: user-1
content: printf()函数的%d和%s打印内容时要求的参数格式不同，%d打印时，后面直接跟变量名，而%s打印时需要跟变量地址。所以  int *a = &b; printf("%d\n", *a);//------*a是指针指向的内容------- char *pa = arr; printf("%s", pa);//---------pa是指针----------  所以您说的打印pc指向的内容时，因为pc本身就是指针，所以不需要加*

user: user-0
content: 引用 6 楼 棉猴的回复:	 printf("%s\n", t.pc);//--------打印t.pc指向的内容------------ printf("%p\n", t.pc);//--------打印t.pc本身的内容------------  VS2015 C++环境调试结果  其中，0x004ffb94就是t.pc本身的内容，0x004ffb94这个地址上的内容是"hello bit\n"  对于printf()函数的%p的详细用法，请参考 《C++中printf()函数的用法10-6》 希望能够帮到您！ 第二个打印地址懂了，但是第一个还是有点懵比如说int *a;int b=3;a=&b;打印*a就是就意味着打印b里面的值吗？相比那个题目*pc不是意味打印arr数组里面的值吗

user: user-1
content: printf("%s\n", t.pc);//--------打印t.pc指向的内容------------ printf("%p\n", t.pc);//--------打印t.pc本身的内容------------  VS2015 C++环境调试结果  其中，0x004ffb94就是t.pc本身的内容，0x004ffb94这个地址上的内容是"hello bit\n"  对于printf()函数的%p的详细用法，请参考 《C++中printf()函数的用法10-6》 希望能够帮到您！

user: user-0
content: 引用 3 楼 qybao的回复:没有t.*pc，只有*t.pc //pc才是成员，char *pc只是说成员pc是个char*类型，并不是说成员是*pc，类型是char。好好理解一下区别。 我理解的是*p解析arr首元素地址，等于arr里面存放的变量

user: user-0
content: 引用 3 楼 qybao的回复:没有t.*pc，只有*t.pc //pc才是成员，char *pc只是说成员pc是个char*类型，并不是说成员是*pc，类型是char。好好理解一下区别。 你如果是打印pc地址应该是什么呢

user: user-2
content: 没有t.*pc，只有*t.pc //pc才是成员，char *pc只是说成员pc是个char*类型，并不是说成员是*pc，类型是char。好好理解一下区别。

user: user-3
content: t. *pc要求pc是实例成员指针类型char *S::pc;参见《C++程序设计精要教程》各种指针混合的用法P131,P298: 包括C普通指针，实例成员指针，静态成员指针以及基于类模板的各种指针等。

user: user-4
content: 引用char *pc  == (char *)(pc) char *pc  !=  (char)(* pc) 括号仅用于帮助理解。
user-0 提问: 小B的任务

回复:
user: user-0
content: 去年11月21日的代码 #include<stdio.h> #include<string.h> int main() {     int T,n,s,sum=0,res=0,d;     scanf("%d%d",&T,&n);     d=n;     int a[n+5],b[n+5],i=1,j;     while(d>0)     {         scanf("%d %d",&a[i],&b[i]);         //printf("%d %d\n",a[i],b[i]);         i++;         d--;     }     for(i=1;i<n;i++)     {         for(j=i+1;j<=n;j++)         {             if(a[i]>a[j])             {                 s=a[i];                 a[i]=a[j];                 a[j]=s;                                  s=b[i];                 b[i]=b[j];                 b[j]=s;             }         }     }     for(i=1;i<=n;i++)     {         for(j=1;j<=b[i];j++)         {             sum=sum+a[i];              res++;             if(sum>=T)             {                 goto out;                              }         }     }     out:         printf("%d\n",res);     return 0; }
user-0 提问: 二进制数直接转float转不了，请问一下问题出在哪里？

回复:
user: user-1
content: 前面的回答少写了个解引用，printf("%f\n",*(float*)&f.a); 另外看了下，发现你对浮点型的结构有误解  #include "stdio.h" int main( void ) { 	int a=0x3FC00000; 	printf("%f", *(float*)&a );  	return 0; }   另外，可变参数那里，具体会因编译器而有所不同，转8字节这个，gcc是这样的

user: user-1
content: 把b的类型换成8字节的long long，然后你赋值的这个浮点二进制改为64位结构的。 原因是对于可变参数的处理，整型转8字节，浮点型转double，你这里它认为的是整型，所以按仅填了4字节，而%f要读8字节。、 第二种方法就是让编译器认为你传的是4字节float类型，帮你自动转，方法是，printf("%f\n",(float*)&f.a);

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

user: user-3
content: 1.125转换成二进制是1.001，指数是0，而而指数位的起始值是127，所以指数值是0111 1111，符号位是0，尾数位是001 0000 0000 0000 0000 0000，所以合在一起的值是0011 1111 1001 0000 0000 0000 0000 0000，而变量使用主机字节序存储（大头big-endian），即低地址保存数值的低位，高地址保存数值的高位，所以1.125对应的二进制值是0x0000903f float f1 = 0.0f; 	int i1 = 0x3f900000;//---------注意，i1是主机字节序------- 	CopyMemory(&f1, &i1, sizeof(i1));//----f1的值变为1.125----------  请参考《C++浮点型变量的存储方式》 希望能够帮到您！

user: user-4
content: 你算的不对 1.0125 ，转为2进制是1.0000001100110011...... 指数是1，尾数是0000001100110011..... 符号位0，指数是0。 16进制就是3f81999a

user: user-0
content: 我用的系统是centos7

user: user-0
content: 现在可以转了，但是问题是数据不对，  #include<stdio.h>   2 #include<stdlib.h>   3 union Ui{   4     float a;   5     int b;   6 }ui;   7    8 int main(){   9     union Ui f;  10    f.b=0x3d000009;  11     printf("%f\n",f.a);  12     return 0;  13 } ~     0x3d000009对应二进制的话 0为符号位 指数为为0x7c     表示的值应该是0x7c-0x7f=-3 尾数位为0x09 二进制为1001 二进制的小数为为三位则小数位的10进制应该为0.125其整数位的十进制为1 结果应该为 1.0125 实际给的值却是 0.031250 二进制为 00001 为什么会这样呢？

user: user-2
content: union U {  float f;  int d; } u; u.d=-0x3d800005; printf("%f\n",u.f);
user-0 提问: 为何未停在'='？

回复:
user: user-0
content: 引用 9 楼 自信男孩的回复:[quote=引用 6 楼 陳錄生 的回复:][quote=引用 4 楼 NorZ的回复:][quote=引用 3 楼 陳錄生 的回复:][quote=引用 1 楼 NorZ的回复:]你这代码我看着就很不理解，你的 buf 和pkey为什么没有分配空间也可以直接用啊？ *( pkey+pos) = *( buf+pos); 一样结果。[/quote]  ...不是这个问题，我不理解的是你的 buf 是个指针，没有分配内存，pkey 也是，为啥能跑起来，是什么编译器和运行环境啊？你执行的 cfg 这个二进制程序，是你代码编译出来的吗？[/quote] buf 在fgets函数分配了内存，pkey 和buf指向同一字符串了？[/quote] 也没看到pkey指向buf的操作呢[/quote] FREEBSD CC

user: user-1
content: 引用 6 楼 陳錄生 的回复:[quote=引用 4 楼 NorZ的回复:][quote=引用 3 楼 陳錄生 的回复:][quote=引用 1 楼 NorZ的回复:]你这代码我看着就很不理解，你的 buf 和pkey为什么没有分配空间也可以直接用啊？ *( pkey+pos) = *( buf+pos); 一样结果。[/quote]  ...不是这个问题，我不理解的是你的 buf 是个指针，没有分配内存，pkey 也是，为啥能跑起来，是什么编译器和运行环境啊？你执行的 cfg 这个二进制程序，是你代码编译出来的吗？[/quote] buf 在fgets函数分配了内存，pkey 和buf指向同一字符串了？[/quote] 也没看到pkey指向buf的操作呢

user: user-1
content: pkey是野指针，没看到它指向可以正常读写的内存区域，也没有malloc呢。怎么可以使用呢？ 即使能够用，但不能保证一直能用～  还有pkey即使指向了可以读写的内存，那么遇到'='没有加'\0'，%s输出的时候会继续向后输出，直到遇到'\0'

user: user-2
content: 引用 6 楼 陳錄生 的回复:[quote=引用 4 楼 NorZ的回复:][quote=引用 3 楼 陳錄生 的回复:][quote=引用 1 楼 NorZ的回复:]你这代码我看着就很不理解，你的 buf 和pkey为什么没有分配空间也可以直接用啊？ *( pkey+pos) = *( buf+pos); 一样结果。[/quote]  ...不是这个问题，我不理解的是你的 buf 是个指针，没有分配内存，pkey 也是，为啥能跑起来，是什么编译器和运行环境啊？你执行的 cfg 这个二进制程序，是你代码编译出来的吗？[/quote] buf 在fgets函数分配了内存，pkey 和buf指向同一字符串了？[/quote]  关键你并没有这样的赋值操作呀...你不如循环结束后给 pkey[pos] 赋值 '\0' 再打印看看，或者循环结束后打印 pos 的值，才能确定是不是没有被 != '=' 卡住

user: user-0
content: 引用 4 楼 NorZ的回复:[quote=引用 3 楼 陳錄生 的回复:][quote=引用 1 楼 NorZ的回复:]你这代码我看着就很不理解，你的 buf 和pkey为什么没有分配空间也可以直接用啊？ *( pkey+pos) = *( buf+pos); 一样结果。[/quote]  ...不是这个问题，我不理解的是你的 buf 是个指针，没有分配内存，pkey 也是，为啥能跑起来，是什么编译器和运行环境啊？你执行的 cfg 这个二进制程序，是你代码编译出来的吗？[/quote] buf 在fgets函数分配了内存，pkey 和buf指向同一字符串了？

user: user-2
content: 本身代码的逻辑上，没有什么问题，pkey多赋值了一个空格，影响不大，就是为啥能执行，我很好奇

user: user-2
content: 引用 3 楼 陳錄生 的回复:[quote=引用 1 楼 NorZ的回复:]你这代码我看着就很不理解，你的 buf 和pkey为什么没有分配空间也可以直接用啊？ *( pkey+pos) = *( buf+pos); 一样结果。[/quote]  ...不是这个问题，我不理解的是你的 buf 是个指针，没有分配内存，pkey 也是，为啥能跑起来，是什么编译器和运行环境啊？你执行的 cfg 这个二进制程序，是你代码编译出来的吗？

user: user-0
content: 引用 1 楼 NorZ的回复:你这代码我看着就很不理解，你的 buf 和pkey为什么没有分配空间也可以直接用啊？ *( pkey+pos) = *( buf+pos); 一样结果。

user: user-3
content: 你这个程序居然能跑起来。。。内存越界了啊，一个指针不能存东西的，要么定义成char数组，要么用malloc动态分配

user: user-2
content: 你这代码我看着就很不理解，你的 buf 和pkey为什么没有分配空间也可以直接用啊？
user-0 提问: 求助C语言的feof

回复:
user: user-0
content: Thanks

user: user-0
content: 引用 6 楼 赵4老师的回复:不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。  这代码看了头晕。Thanks all the same.

user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: 修改一下，这样看看行不行？  #include <stdio.h>  int main(void) { 	FILE *fp; 	char buf[BUFSIZ]; 	 	if((fp = fopen(__FILE__, "r")) == NULL) 	{ 		perror("fopen"); 		return 1; 	} 	 	while(!feof(fp) && fgets(buf, BUFSIZ, fp)) 	{ 		printf("%s", buf); 	} 	 	return 0; }

user: user-3
content: 先判断返回值再打印，再while判断 feof

user: user-4
content: 判断一下fgets返回值，读到EOF时会返回NULL，然后break出循环就好了～
user-0 提问: 求助，switch ... case 语句用法

回复:
user: user-1
content: 逗号分隔还是要写每个case的，case范围扩展可以只写区间两端，case 'a'...'z' 代表26个case，还是非常有用的

user: user-1
content: GCC的case范围扩展，从Pascal学来的，GCC和clang/llvm都支持

user: user-0
content: 引用 4 楼 赵4老师 的回复:语法糖越甜，编译调试查错越苦！ 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中，我认为不值当。说得对，算了，不纠结了

user: user-2
content: C/C++不支持switch case的这种写法。

user: user-3
content: 语法糖越甜，编译调试查错越苦！ 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中，我认为不值当。

user: user-4
content: 哎呀，我还没用过 'a'...'z' 这种写法 真的可以吗

user: user-5
content: 逗号分隔是可以的，不能用..., vs2019警告但还是可以编译的

user: user-6
content: 你选的语言不是c/c++吧？

user: user-7
content: 直接用if...else 判断ASCII码范围

user: user-8
content: 写全了吗，写全了的话就是少了个结尾的花括号
user-0 提问: 大佬们求问哪里出了问题

回复:
user: user-1
content: 看到缩进格式全无的代码，顿时毛骨悚然。。。

user: user-0
content: 引用 1 楼 user-2的回复:标点符号没有进入这个if((str[i]>='a'&&str[i]<='z') || (str[i]>='A'&&str[i]<='Z') || (str[i]>='0'&&str[i]<='9')||(str[i]==32))，所以标点符号没有被做任何处理。 应该怎么修改呢

user: user-2
content: 标点符号没有进入这个if((str[i]>='a'&&str[i]<='z') || (str[i]>='A'&&str[i]<='Z') || (str[i]>='0'&&str[i]<='9')||(str[i]==32))，所以标点符号没有被做任何处理。
user-0 提问: 这个该怎么改啊，求大佬带

回复:
user: user-1
content: scanf("%s %d", &str[10], &a); 改成 scanf("%s %d", str, &a); //str数组名就是字符串首地址， &str[10]是下标为10的元素的地址，数组越界（数组下标只到9） strcmp(str[10], "triange") 改成 strcmp(str, "triange"); //str[10]是一个元素（只有1个字符，不是字符串，字符串用数组名就可以了）

user: user-0
content: 引用 1 楼 自信男孩的回复:scanf中对于str有问题  scanf("%s%d", str, &a);  strcmp的第一个参数应该是str而不是str[10]  楼主需要复习一下数组，数组名，数组首地址等等，已经函数调用的参数的类型 现在通过啦，太感谢了*⸜( •ᴗ• )⸝*❤️

user: user-2
content: scanf中对于str有问题  scanf("%s%d", str, &a);  strcmp的第一个参数应该是str而不是str[10]  楼主需要复习一下数组，数组名，数组首地址等等，已经函数调用的参数的类型
user-0 提问: 求助again  

回复:
user: user-1
content: #include<stdio.h> #include <math.h>  #define N 10 #define M 10   int is_prime(int n) {     int i, tm;      if (n < 2)         return 0;      tm = sqrt(n);     for (i = 2; i <= tm; i++)         if (n % i == 0)             return 0;      return 1; }  void sort(int *arr, int size) {     int i, j;     int tmp;      for (i = 0; i < size; i++)         for (j = 0; j < size - i -1; j++)             if (arr[j] > arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } }  void show(int *arr, int size) {     int i;      for (i = 0; i < size; i++)         printf("%d ", arr[i]);     putchar(10); }  int main () {     int cnt, len, tmp;     int array[N];     int i, j, k;       scanf("%d", &cnt);      for (i = 0; i < cnt; i++) {         scanf("%d", &len);         if (len > N)             len = N;         k = 0;         for (j = 0; j < len; j++) {             scanf("%d", &tmp);             if (is_prime(tmp))                 array[k++] = tmp;         }         sort(array, k);         show(array, k);     }  #if 0     int a[M][N],b[M][N],s[M],n,i,j;     int c=0;     scanf("%d",&n);     for(i=0;i<n;i++)       {scanf("%d",&a[i][0]);         for(j=1;j<=a[i][0];j++)             {scanf("%d",&a[i][j]);              if (prime(a[i][j]))                  {b[i][c]=a[i][j];                  c++;                  }             }          s[i]=c;          c=0;       }     for(i=0;i<n;i++)         px(b[i],s[i]);     for(i=0;i<n;i++)         {for(j=0;j<s[i];j++)             printf("%-2d",b[i][j]);         printf("\n");} #endif     return 0; }  #if  0 int prime( int p ) {     int i,f;     if(p<=1)         f=0;     else        {f=1;       for(i=2;i<p;i++){          if(p%i==0)             f=0;}        }     return f; } void px(int a[],int n) {     int i,j,k,t;     for(i=0;i<n-1;i++)          for(j=0;j<n-i-1;j++)             if(a[j]>a[j+1])             {               t=a[j];               a[j]=a[j+1];               a[j+1]=t;             }  } #endif 供参考～  题目要求是输入的整数是<= 10，没说是输入的n（楼主定义的）也是10，如果n是大于10的，会出现数组越界，出现段错误；
user-0 提问: VS2019中数据结构线性表status未定义标识符应该怎么解决？求大神指点

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:注意单词的大小写，status确实没有定义，楼主应该用Status？  从代码上看，完全可以typedef int Status; 试试，主要看一下OK是什么？ 解决了，三克油

user: user-0
content: 解决了，三克油

user: user-1
content: 注意单词的大小写，status确实没有定义，楼主应该用Status？  从代码上看，完全可以typedef int Status; 试试，主要看一下OK是什么？
user-0 提问: C语言一道题没报错为啥运行不出结果？？？

回复:
user: user-1
content: 我直接打印一下a，你看这样觉得合理嘛，0*0*0

user: user-2
content: 引用 2 楼 limeilu110的回复:如果！整段程序运行下来没有跟预期要输出的值相匹配的结果！！！那这段程序什么都不做也可以理解啊！       建议跟踪一下个个环节的变量值变化！！！看程序有没有按设计的运行！！ 我刚运行了下，也追踪了其中两个变量～～i,a的变化！运行过程中变量在按程序的设计走！但是没有匹配的结果！所以程序感觉上什么都没有做！！！！没有匹配的结果！！

user: user-2
content: 如果！整段程序运行下来没有跟预期要输出的值相匹配的结果！！！那这段程序什么都不做也可以理解啊！       建议跟踪一下个个环节的变量值变化！！！看程序有没有按设计的运行！！

user: user-3
content: 那是因为printf所在if判断条件不满足，建议楼主把i++到if (i == xxx) {}之后，即while循环内的最后位置。  改一下位置再试试。
user-0 提问: 如何将此小程序从递归改成循环?

回复:
user: user-1
content: float proc(float f1, float f2, char m) {	 	switch (m) 	{ 	case '+': 		return f1 + f2; 		break; 	case '-': 		return f1 - f2; 		break; 	case '*': 		return f1 * f2; 		break; 	case '/': 		return f1 / f2; 		break;  	default: 		abort(); 		break; 	} }  float fun2(const char ch[100]) { 	float f[100];		// 参数 	int ifCnt = 0;		// 参数个数  	char m[100] = { 0 }; // 方法 	int imCnt = 0;  	char ch2[100]; 	if (!ch || !ch[0]) 		abort();	 	strncpy_s(ch2, 100, ch, 100);  	int iBegin = 0, iEnd = 0; 	int i = 0; 	for (; (i < 100) && (ch2[i] != '\0'); ++i) 	{ 		switch (ch2[i]) 		{ 		case '*': 		case '/': 		case '+': 		case '-': 			if (i == 0) 				abort();  			iEnd = i;	 			m[imCnt++] = ch2[iEnd]; 			ch2[iEnd] = '\0'; 			f[ifCnt++] = atof(&ch2[iBegin]); 			iBegin = iEnd + 1; 			break;  		case '0': 		case '1': 		case '2': 		case '3': 		case '4': 		case '5': 		case '6': 		case '7': 		case '8': 		case '9': 		case '.': 			break;  		default: 			abort(); 		} 	}  	f[ifCnt++] = atof(&ch2[iBegin]);  	{ 		float fResult = f[0]; 		int ifCur = 1; 		for (i = 0; i < imCnt; ++ifCur) 		{ 			fResult = proc(fResult, f[ifCur], m[i++]); 		}  		return fResult; 	} }

user: user-1
content: float proc(float f1, float f2, char m) {	 	switch (m) 	{ 	case '+': 		return f1 + f2; 		break; 	case '-': 		return f1 - f2; 		break; 	case '*': 		return f1 * f2; 		break; 	case '/': 		return f1 / f2; 		break;  	default: 		abort(); 		break; 	} }  float fun2(const char ch[100]) { 	float f[100];		// 参数 	int ifCnt = 0;		// 参数个数  	char m[100] = { 0 }; // 方法 	int imCnt = 0;  	char ch2[100]; 	if (!ch || !ch[0]) 		abort();	 	strncpy_s(ch2, 100, ch, 100);  	int iBegin = 0, iEnd = 0; 	int i = 0; 	for (; (i < 100) && (ch2[i] != '\0'); ++i) 	{ 		switch (ch2[i]) 		{ 		case '*': 		case '/': 		case '+': 		case '-': 			if (i == 0) 				abort();  			iEnd = i;	 			m[imCnt++] = ch2[iEnd]; 			ch2[iEnd] = '\0'; 			f[ifCnt++] = atof(&ch2[iBegin]); 			iBegin = iEnd + 1; 			break;  		case '0': 		case '1': 		case '2': 		case '3': 		case '4': 		case '5': 		case '6': 		case '7': 		case '8': 		case '9': 		case '.': 			break;  		default: 			abort(); 		} 	}  	f[ifCnt++] = atof(&ch2[iBegin]);  	{ 		float fResult = f[0]; 		int ifCur = 1; 		for (i = 0; i < imCnt; ++ifCur) 		{ 			fResult = proc(fResult, f[ifCur], m[i++]); 		}  		return fResult; 	} }
user-0 提问: 有大佬知道为什么do while循环里重复定义结构指针是可以的呢，还有给结构指正赋NUll是怎么回事，有啥好处

回复:
user: user-0
content: 感谢，我另写了一个循环，还真是这样

user: user-1
content: 在循环结构里虽然看着是循环定义，其实编译器只会定义一次，因为在do ... while是一个代码块，这部分的last只会定义一次。后面的直接使用上次定义的。  用NULL的好处是，作为链表结束的标记，因为链表是next指向下一个，什么时候到达末尾了?NULL是一种方法。  楼主的代码少一个大括号，匹配if (number != -1)的   #include<stdio.h> #include<stdlib.h>  typedef struct _node{     int value;     struct _node *next; }Node;  int main(int argc,char const *argv[]) {     Node *head=NULL;     int number;     do {         scanf("%d",&number);         if(number!=-1){             Node *p=(Node *)malloc(sizeof(Node));             p->value=number;             p->next=NULL;             Node *last=head;             if(last){                 while(last->next){                     last=last->next                 }                 last->next=p;             }             else {                 head=p;             }         }     }while(number!=-1);      return 0; } 供参考～

user: user-0
content: 那为什么 int *p=a； int *p=b； 不行呢

user: user-2
content: 在循环里不断给新结点分配内存，指针p是移动的，不存在重复定义。给指针赋值NULL是初始化，不然可能变成野指针，不知道指向哪儿了。
user-0 提问: 初学乍练，这几句程序什么意思？

回复:
user: user-0
content: 好的，多谢提示。

user: user-1
content: 建议楼主找一下你的代码工程，应该有地方用typedef了V_U32和V_UCHAR  其实可以这么理解：V_U32就是unsigned int，V_UCHAR是unsigned char。  最好找一下定义的地方。

user: user-0
content: 请帮忙解释一下，V_U32  blockse;   V_UCHAR *ramaddr 这两句的V_U32和V_UCHAR是什么东西，为什么这么用？
user-0 提问: win10系统 c-free5.0无法运行  怎么都不行 是路径出问题了吗

回复:
user: user-1
content: 现在的电脑配置都无比强悍，建议用最大众化的IDE。比如 VISUAL STUDIO 2019，号称宇宙第一IDE，编程和调试都很方便。

user: user-2
content: 建议dev-c++：https://sourceforge.net/projects/embarcadero-devcpp/ 或者：https://www.filehorse.com/download-dev-c/

user: user-3
content: 没使用过这个工具 建议不如换一个啊 VS只用序列号就可以激活 如果想要占用空间少的 可以CodeBlocks 或CodeLite 这两款我试过 确定没问题的
user-0 提问: 大佬们萌新实在整不明白这俩个咋打了

回复:
user: user-0
content: 感谢大佬。。。。

user: user-1
content: 改成 scanf(“%s”, s); for(i=0; i<80&&s[i]!=‘\0’; i++) {//要用循环     if((s[i]>=‘a’&&s[i]<=‘z’) || (s[i]>=‘A’&&s[i]<=‘Z’) || (s[i]>=‘0’&&s[i]<=‘9’))         printf(“%c”, s[i]); }
user-0 提问: 指向指针的指针问题，在线等，问题见二楼

回复:
user: user-1
content: 你要想想，进入for(; *last; last=&(*last)->next); 退出循环的条件是什么？是*last不成立，也就是*last==null，那么*last什么时候会==null？那不就是*last=Node1.next才是null吗（因为Node1不是null）？所以(*last->next)=malloc是错的，因为*last已经是null了，*last->next本身就是错的（相当于null->next），所以，*last=malloc才是正确的。

user: user-2
content: 不明白为啥要用二级指针，只有一个主函数完全没有必要这样。

user: user-0
content: 第一次进入for( ; *last; last=&(*last)->next );由于last指向head，head指向NULL，所以不执行for循环，后面的语句让head指向了第一个节点Node1；第二次进入for( ; *last; last=&(*last)->next )循环时*last也就是head是指向Node1的，所以会让last指向最新一节Node1。下面把Node2联接到Node1上，不应该是 (*last-next） = (Node *)malloc( sizeof(Node) )吗?
user-0 提问: VS2019使用strlen()函数时，为啥后面多了乱码

回复:
user: user-1
content: 引用 2 楼 user-2 的回复:字符串要有结束符'\0'，否则就会一直输入内存信息直到遇到字符串结束符 所以 puts(flag); outflag[strlen(flag)] = '\0'; //这里追加设定字符串结束符 puts(outflag);  另外，flag[i] ^ 1 有可能导致运算结果是非显示字符，这样outflag显示的内容也不一定能看得到  楼主申请的空间少一个'\0'的位置，所以，outflag[strlen(flag)] = '\0';这样操作会导致内存越界操作～

user: user-2
content: 字符串要有结束符'\0'，否则就会一直输入内存信息直到遇到字符串结束符 所以 puts(flag); outflag[strlen(flag)] = '\0'; //这里追加设定字符串结束符 puts(outflag);  另外，flag[i] ^ 1 有可能导致运算结果是非显示字符，这样outflag显示的内容也不一定能看得到

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  int main() {     /*const char* flag;       char* outflag;       flag = "ZmxhZ3tzaG91a2FrdX0=";       outflag = (char*)malloc(BASE64_DECODE_OUT_SIZE(strlen(flag)));       base64_decode(flag, strlen(flag), outflag);       puts(outflag);       free(outflag);       return 0;*/     int i;     char* flag;     flag = "ZmxhZ3t9CgoK";     char* outflag = (char*)malloc(strlen(flag) + 1);     for (i = 0; i < strlen(flag); i++)     {         outflag[i] = flag[i] ^ 1;     }     outflag[i] = 0;   //add '\0'     puts(flag);     puts(outflag);     free(outflag);     return 0; }  供参考～  注意'\0'，出现乱码，对于字符串而言，大部分都是因为'\0'导致（没在对应的字符串结尾加上'\0'导致）
user-0 提问: 求解

回复:
user: user-1
content: scanf_s替换scanf，注意这两者的区别，详细的请查阅scanf_s的使用

user: user-2
content: 也可以输入# pragma warning (disable : 4996)消除此类警告

user: user-3
content: Embarcadero Dev-Cpp比较友好，使用更方便。 最新版：Embarcadero_Dev-Cpp_6.1_TDM-GCC_9.2_Setup.exe

user: user-4
content: 请看提示  大概的意思是“scanf函数已经不安全了，请使用scanf_s()函数代替scanf()函数” 如果您觉得使用scanf_s()函数不方便，还是习惯使用scanf()函数，请参考 《VS2015中使用scanf()不报错的设置方法》 希望能够帮到您！

user: user-5
content: 提示你scanf函数不安全，改为用 scanf_s函数