Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 看过来

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

user: user-2
content: 加入输入的数字是6，在for循环中，i取0、1、2都不会触发 if(b<a[i]) 当i取3时，a[i]的值是7，此时会触发 if(b<a[i]) 将b和a[i]的值互换，此时b的值变为7，而a[i]的值变为6，输出a[i]此时输入的是6。 继续for循环，当i的值是4，a[i]的值是9，此时会触发 if(b<a[i]) 将b和a[i]的值互换，此时b的值变为9，而a[i]的值变为7，输出a[i]此时输入的是7。 最后  printf("%3d",b); 输出9. VS2015 C++调试结果为

user: user-3
content: 寻找比b大的数，然后交换，应该是从小到大排序，然后挤掉最后一个
user-0 提问: 请问怎样出结果（N皇后问题）

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 哪位大神能看一看我错在哪些地方？

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

user: user-2
content: 可以去搜最基本的冒泡排序
user-0 提问: 一个32位的数据，其实占用29bit,怎么从高位取4个字节位的数据呢？

回复:
user: user-1
content: 移位操作～然后&0x0f。

user: user-0
content: 好的，看明白了，也就是说不管32bit里面的数据占有多少位，按照这个逻辑就可以了，对吗

user: user-2
content: b=((x&0x00FF0000)>>(32-16)) c=((x&0x0000FF00)>>(32-24)) d=(x&0x000000FF)  引用 3 楼 user-2 的回复:假定是个32bit的uint x a=((x&0xFF000000)>>(32-8))

user: user-2
content: 假定是个32bit的uint x a=((x&0xFF000000)>>(32-8))

user: user-2
content: 1110_1111_0001_1110_1010_1100_1110_1 &1111  1111 0000  0000 0000  0000 0000 结果位移

user: user-0
content: 简单的几位我还知道，数据多了，有些晕
user-0 提问: st[i]怎么像数组的用法？是怎么回事

回复:
user: user-1
content: 没毛病 指针和数组往往都是结合使用的  数组名字很多时候是可以作为一个指针来使用的 反过来， 指针也可以当作数组来使用

user: user-2
content: 函数写的要求就是传入一个student[100]的数组头地址，本来他就是个数组
user-0 提问: 新手向大佬求救！

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

user: user-0
content: 咦，我已经找出错误来了
user-0 提问: java中有ArrayList这些官方写好了数据结构用，c语言没有吗？

回复:
user: user-0
content: 常用的数据结构，比如类似java集合中的那些 ArrayList  map  set 这些，应该有第三方高效率的实现文件吧，每次使用前复制到自己的项目中吗？

user: user-1
content: C没有，C偏向于底层，底层的函数或数据结构需要自己定义

user: user-2
content: c++标准库里面有的， 也就是stl vector queue stack 等

user: user-3
content: 内置的肯定没有，要么自己写要么用别人的

user: user-4
content: c++有stl.  array 可以用list或vector.

user: user-5
content: 之所以java等语言简便就在于把很多东西都封装成了固定的模板，可以直接调用，c本来就是用来写底层比较多，没有那么多封装的，如果要用建议学下c++，相对而言封装了很多东西可以直接调用。而且c的形式在c++中也可以通用

user: user-6
content: C++就有模板
user-0 提问: 结构问题

回复:
user: user-1
content: 对于文件这种操作，如果掌握的还不是很熟的时候建议先按部就班的来，打开一个文件写，写完关闭再打开读。后面的权限也要注意不能用错

user: user-1
content: 因为你没有读取到东西，你rewind是把位置设到开头，但是在这里有问题，你文件是只写创建的，也没有关闭生成文件，读不出来 fp = fopen("fl.txt","w");   if(!fp)   {    printf("can not open this file\n");    exit(-1);   }    fwrite(&stu[0],sizeof(stu[0]),1,fp);    fclose(fp); fp = fopen("fl.txt","r");   if(!fp)   {    printf("can not open this file\n");    exit(-1);   }    fread(&stu[1],sizeof(stu[1]),1,fp); 这样就可以读出来了：
user-0 提问: 在vs2017中，为什么在两个.c文件中都定义同同一个变量，不会报错呢？

回复:
user: user-1
content: 楼主描述的有问题呢，要看定义的变量在哪？是都在函数里定义的，还是一个在函数外定义，一个在函数内定义呢？  a.c  中 int n ; n =8; int n = 7; 这种情况，如果都在函数外或都在函数内定义都是有问题的，这叫重复定义。  如果int n = 7;定义在函数外，int n; n = 8;定义在函数内，这是没问题的。因为一个是全局变量，一个是局部变量。在内存中的位置是不一样的～

user: user-2
content: 理论是是不能重复定义的，但是不同的编译器在编译阶段可能对规则检测的没有那么严格所以编译会通过。而且VS这方面是可以设置的。

user: user-3
content: 不可重复定义，这是C/C++的规定。前面的能编译，说明VS2017 比较友好、宽松，你用gcc试试，一定全部报错的。
user-0 提问: char **solution = malloc(n*sizeof(char *));   error C2440: 'initializing' : can

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

user: user-2
content: char **solution = (char **)malloc(n*sizeof(char *));

user: user-3
content: 能说一下这句代码是想做什么嘛？指针在有的64位系统是8字节

user: user-0
content: 引用 1 楼 user-3的回复:你这是要申请多少字节？sizeof（）只看类型，没有放过这样的参数，你要是指针的字节直接换int就好了，sizeof指针都是四字节，不管指针是什么类型的  报错是error C2440: 'initializing' : cannot convert from 'void *' to 'char ** ' 那应该怎样改呢，

user: user-3
content: 你这是要申请多少字节？sizeof（）只看类型，没有放过这样的参数，你要是指针的字节直接换int就好了，sizeof指针都是四字节，不管指针是什么类型的
user-0 提问: 求解

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

user: user-2
content: int *a[10]; int (*a)[10]; int (*a)(int a); int (*a[10])(int a);
user-0 提问: C语言问题

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

user: user-2
content: 请参考《C++中二维数组的使用》 《C++二维数组》 《C++中二维数组与指针》 希望能够帮到你！

user: user-3
content: 用循环，一个控制行一个控制列（输入输出差不多） 初始化的话，例如int a[2][3]={{1,2,3},{2,3,4}};或者直接这样int a[2][3]={1,2,3,2,3,4};方法很多种，直接查一下应该有很多
user-0 提问: 一个c文件中同时声明和定义一个变量是可以的？

回复:
user: user-1
content: 可以，如果是是这样的就可以 extern int n; main() {      n=5; }   int n;

user: user-2
content: 可以的话那么你调用的是哪个呢？

user: user-3
content: 可以，但你的描述不准确，详见 https://zh.cppreference.com/w/c/language/extern
user-0 提问: 计算机能解决的问题分类

回复:
user: user-0
content: 引用 1 楼 user-1的回复:那楼主说一下车牌识别是哪一类的？ 没有属于哪一类，车牌识别本来不是一种应用吗？这些都用用到的。分而治之，把车牌识别中的问题归类能划分开。

user: user-1
content: 那楼主说一下车牌识别是哪一类的？
user-0 提问: C语言随机抽数

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

user: user-2
content: rand（）产生的随机数都是由种子通过算法得出来的，要使每次程序运行得到的数真的“随机”，可以改变“种子”， srand（（unsigned）time（NULL））这句代码以时间为种子，一般都会加上这句。  [code=c]  #include <stdio.h> #include <time.h> int main() { 	int a[10]; 	srand((unsigned)time(NULL));	         //以时间做种 	for (int i = 0; i < 10; i++) 	{ 		a[i] = rand() % 10 + 1;		//产生1~10之间的随机数 	}  	for (int i = 0; i < 10; i++) 	{ 		printf("%d ", a[i]); 	} 	return 0; }

user: user-3
content: 这个是按顺序使用之前写好的，你加上time.h头文件，然后srand(time(NULL));加到随机数使用前。这个的作用是根据系统的时间来选择里面的数，就伪随机了，然后rand（）%x就可以生成0-x的随机数，不懂可以私信

user: user-4
content: rand之前使用seed生成种子，这样就可以，而且应该没有绝对没有规律的随机数，因为随机数也都是通过某种方式计算出来的
user-0 提问: 请问遇到undefined reference to '_imp_mcisendstring
这种错误该怎么办？

回复:
user: user-0
content: 请问怎么加动态库？我是新手只学了基础，不太懂

user: user-1
content: 未定义对'_imp_mcisendstring '的引用，说明你虽然加了头文件但是没有找到函数的实现定义，看看是不是没加动态库啥的
user-0 提问: 为什么我写入数据文件没有用啊

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 用vs2010出现问题，求大神指教

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

user: user-2
content: 在引用这几个函数的文件里没有这几个函数的声明导致的，原因要么引用相应的头文件，要么在文件开头用 "extern" 声明这几个函数

user: user-3
content: 又是中文，又是拼音的。劝楼主放弃苦海吧

user: user-0
content: 引用 1 楼 自信男孩 的回复：代码呢？看一堆错误内容看不出什么错误位置～//2.输出办理业务的顾客数组  void print1();                                    //输出数组，源代码参见：详细设计  //3.输出办理业务排队顾客队列  void print2();                                   //输出队列，源代码参见：详细设计  //4.顾客到达事件算法  void daoda(int x);                              //顾客到达处理事件，源代码参见：详细设计  //5.顾客离开事件算法  void likai(int x);                               //顾客离开处理事件，源代码参见：详细设计

user: user-0
content: 引用 1 楼 自信男孩 的回复：代码呢？看一堆错误内容看不出什么错误位置～就是这几个出的错

user: user-0
content: 引用 1 楼 自信男孩 的回复：代码呢？看一堆错误内容看不出什么错误位置～void print1（） void daoda(int x) void likai(int x)

user: user-4
content: 代码呢？看一堆错误内容看不出什么错误位置～
user-0 提问: 头文件这么写O不OK?

回复:
user: user-0
content: 引用 2 楼 lin5161678 的回复:不OK  需要加一个条件编译 处理重复包含的问题  我上面那个a.h头文件  如果被包含在另外几个.c文件中也不会出现变量和结构体重复定义啊，你可以试一下

user: user-1
content: 引用 3 楼 wow334的回复:[quote=引用 2 楼 lin5161678 的回复:] 不OK  需要加一个条件编译 处理重复包含的问题  我上面那个a.h头文件  如果被包含在另外几个.c文件中也不会出现变量和结构体重复定义啊，你可以试一下[/quote] 不用试就知道有毛病啦

user: user-1
content: 不OK  需要加一个条件编译 处理重复包含的问题

user: user-2
content: 是这么做的，你说的很ok
user-0 提问: 以前觉得0个error就万幸，现在就算0warning也只能是弟弟

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

user: user-2
content: #include<stdio.h>  void reverse(int x[],int n);//形参是数组名//  int main() {     int i,a[10]={2,3,4,5,6,7,8,9,45,33};      printf("原数组为：\n");     for(i=0;i<10;i++)         printf("%d\t",a[i]);     reverse(a,10);     printf("改变后数组为：\n");     for(i=0;i<10;i++)         printf("%d\t",a[i]);       return 0; } void reverse(int x[],int n) { #if 0     int temp,i,j,m;     m=(n-1)/2;     for(i = 0, j = n-1; i <= m; i++, j--)     {          temp=x[i];         x[i]=x[j];         x[j]=temp;      } #endif     int i, j;     int tmp;      for (i = 0, j = n-1; i < j; i++, j--) {         tmp=x[i];         x[i]=x[j];         x[j]=tmp;     } }  供参考～

user: user-0
content: 总结:如果0个error又0个warning，那么很有可能是逻辑错误而导致无法运行。欢迎大佬指点请教

user: user-0
content: 解决了，我漏了一条语句哎呀 j=n-1-i
user-0 提问: C语言中可以使用UML图吗？

回复:
user: user-1
content: 标准的没有 可以让那个大四就发明文言文编程的牛蛙给写一个   这个应该是工具的事儿， 像 powerdesigner 那样可以通过uml图生成数据之类， 应该有这种工具 不过c太灵活了，完全支持恐怕做不到  VS里面的界面相关的哪一套所见即所得的界面设计和代码链接本身也可以认为是一种从图到代码的转译过程 没有它，要是自己从头写界面哪些c/c++代码要写好多好多。  无代码编程的工具，等着未来普及再说吧
user-0 提问: c语言中函数没被调用

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

user: user-2
content: 楼主的问题可以描述的更清晰一些，另外，把代码贴的更全一些。谁不能调用谁？
user-0 提问: 链表问题 向大佬提问

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

user: user-2
content: /*插入链表*/ STUDENT *insertnode(STUDENT *head,STUDENT *p) {     STUDENT *be,*ne;     if(head==0)                        /*第一种情况，链表为空时插入结点*/     {         head=p;         p->next=0;         return(head);     }     if(strcmp(head->num,p->num)>=0)    /*第二种情况，新新结点插入在头结点的前面*/     {         p->next=head;         head=p;         return(head);     }     be=ne=head;                        /*第三种情况，在链表中插入新结点*/     while(ne!=0&&strcmp(ne->num,p->num)<0)                /*查找插入新结点的位置*/     {         be=ne;         ne=ne->next;     }     p->next=ne;                        /*将新结点链接到链表中*/     be->next=p;     return(head); } /*删除链表*/ STUDENT *deletenode(STUDENT *head,char *num) {     STUDENT *be, *p;     if(head==NULL)                    /*第一种情况，链表为空，无结点可删*/     {         printf("No node to delete!\n");         return(head);     }     if(strcmp(head->num,num)==0)    /*第二种情况，需删除的结点是链表的头结点*/     {         p=head;         head=head->next;         free(p);     }     else                            /*第三种情况，删除的是链表中除头结点外的结点*/     {         be=p=head;         while(strcmp(p->num,num)!=0&&p->next!=NULL)        /*查找被删除结点的位置*/         {             be=p;                    /*be始终指向被删除结点的前一个结点*/             p=p->next;         }         if(strcmp(p->num,num)==0)    /*查找到p所指向的结点就是要删除的结点*/         {             be->next=p->next;             free(p);             printf("Delete one node!\n");         }         else                        /*在链表中没有所要删除的结点*/             printf("Not Found!\n");     }     return(head); } int main(void) {     char insert_n[10];                    /*定义要插入的结点号*/     char delete_n[10];                    /*定义要删除的结点号*/     STUDENT *head;     head=create();     travel(head);     printf("请输入要插入的结点号：");     scanf("%s", insert_n);     STUDENT* pNode = (STUDENT*) malloc(sizeof(STUDENT));     strcpy(pNode->num, insert_n);     pNode->next = NULL;     /*      这里还缺少，score的输入      */     head = insertnode(head,pNode);    /*将指针head和要插入的结点数传递给插入函数*/     travel(head);                    /*将指针head传入输出函数遍历输出*/     printf("请输入要删除的结点号：");     scanf("%s", delete_n);     head = deletenode(head, delete_n);        /*将指针head和要删除的结点数传递给删除函数*/     travel(head);                    /*将指针head传入输出函数遍历输出*/     return 0; }  帮你让编译器能过去， 逻辑是否正确自己检测
user-0 提问: 求大佬教一教c语言逆矩阵求法。

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

user: user-2
content: 补充一句：没有扎实的数学基础和逻辑思维能力是做不好软件的

user: user-2
content: 矩阵求逆，还是多看看《线性代数》

user: user-3
content: 不打算自己写的，就自己百度吧，可以快速找到答案 自己写的，无论多少问题都是可以提问的
user-0 提问: switch语句

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

user: user-0
content: 本以为switch语句只能判断字符呢，学到了 感谢各位

user: user-2
content: #include<stdio.h>  void shanchu(int a) {     switch(a)     {         case 1:printf("信工学院，计科最棒！\n"); break;//return 0;         case 2:printf("信工学院，软工最棒！\n"); break;//return 0;         case 3:printf("信工学院，电信最棒！\n"); break;         case 4:printf("信工学院，物联网最棒！\n"); break;         case 5:printf("信工学院，大数据最棒！\n"); break;         case 6:printf("信工学院，自动化最棒！\n"); break;     } } int main () {     int m,n;     scanf("%d", &n);     for(int i=0;i<n;i++)     {         scanf("%d", &m);         //m=shanchu(m);         shanchu(m);     }     return 0;  } 供参考～

user: user-3
content: int shanchu(char a) { switch(a) { case'1':printf("信工学院，计科最棒！\n"); break;//return 0; case'2':printf("信工学院，软工最棒！\n"); break;//return 0; case'3':printf("信工学院，电信最棒！\n"); break; case'4':printf("信工学院，物联网最棒！\n"); return 0; case'5':printf("信工学院，大数据最棒！\n"); return 0; case'6':printf("信工学院，自动化最棒！\n"); return 0;     default:         printf("Error char, code is %d\n", a);         break;  }     return 0;  }; 这样改一下，你就能看到每次输入一个数字，再回车的时候，就会跟随一个错误输出 原因就是%c获取了字母后，再次循环进来获得了一个回车符号， ascii就是10  你可以在scanf后面根一个 getchar函数过滤它，就不用2*n次循环输入了
user-0 提问: c语言求助

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

user: user-2
content: #include<stdio.h> /*编写函数实现如下功能   2维数组每行的最大元素放置该行的首位   如   8 41 73   34 15 85   77 74 55    73 41 8   85 15 34   77 74 55*/ //令每行最大值提前 #define N 3 #define M 3  void swap(int *a, int *b) {     int tmp;      tmp = *a;     *a  = *b;     *b  = tmp; }  void fun(int (*a)[M], int row, int col) {     int i, j, max_idx;      for (i = 0; i < row; i++) {         max_idx = 0;         for (j = 1; j < col; j++)             if (a[i][max_idx] < a[i][j])                 max_idx = j;         if (max_idx != 0) {             swap(&a[i][0], &a[i][max_idx]);         }     }     /*     int max[3]={0,0,0};//用来存储每一行的最大值     int temp;//temp作为交换的中间值     int i,j,k=0;     int m[3];//m记录每一行最大值的坐标     //先找到每一行的最大值及坐标     for(i=0; i<M; i++){         for(j=0; j<M; j++){             if (max[k]<a[i][j]) max[k]=a[i][j],m[k]=j ;         }k++;     }     // 进行交换     for(i=0; i<N; i++){         temp=a[i][0];         a[i][0]=a[i][m[i]];         a[i][m[i]]=temp;     }     */ }  int main() {     int a[N][M];     int i,j;     for(i=0; i<N; i++){         for(j=0 ;j<M; j++)             scanf("%d",&a[i][j]);     }     fun(a, N, M);     for(i=0; i<N; i++){         for(j=0; j<M; j++) {             printf("%d", a[i][j]);             if ((j+1) % M)                 printf(" ");             else                 printf("\n");         }             //printf("%d",a[i][j]),j!=2?printf(" "):printf("\n");     }     return 0; }  供参考～
user-0 提问: 递归问题

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

user: user-2
content: 你自己在f函数里面，第一行增加一个printf（“m=%d， n=%d\n”, m, n）;  这样的语句跟踪一下输出就知道了调用的过程 把return 语句改一下 int result = f(m-1, n) + f(m, n-1); printf("m=%d  n=%d result=%d\n", m, n, result); return result; 这样你就能看到每次调用的返回结果了  学会调试跟踪， 很多事儿就可以自己搞定了

user: user-3
content: 这个输出的是f这个函数，在输出的时候会调用f这个函数，在f函数内如果不满足条件会一直调用f（m-1，n）+f(m，n-1)
user-0 提问: 链表错误

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node {     int data;     struct node *next; } linklist;  void link(linklist *head); void create_link(linklist *head); void printfList(linklist *head);  int main(void) {     //int i,n;     int n;      linklist *head;     head = (linklist*)malloc(sizeof(linklist));     head->next = NULL;     while(1)     {         printf("输入1：建立链表：\n");         printf("输入2：除去链表中的相同元素：\n");         printf("输入3：退出：\n");         printf("输入4：输出链表：\n");         scanf("%d",&n);         switch(n)         {             case 1:printf("当输入-1时结束建立链表\n");                    create_link(head);                    break;             case 2:link(head);                    break;             case 3:exit(0);                    printf("已退出\n");                    break;             case 4:printf("正在输出，请稍等。。。。。\n");                    printfList(head);                    break;         }     }     return 0; } void link(linklist *head) {     linklist *p, *q, *prev;     q = head->next;      if (q == NULL)         return; #if 1     while (q) {         p = q->next;         prev = q;         while (p) {             if (p->data != q->data) {                 p = p->next;                 prev = prev->next;                 continue;             }             prev->next = p->next;             free(p);             p = prev->next;         }         q = q->next;     }  #else     p  = q->next;     while(p != NULL)     {         if(p->data == q->data)         {             q->next = p->next;             free(p);             p = q->next;         }         else         {             //q = p;//这里有点疑惑，个人感觉把这一行去掉才对 。             p = p->next;         }     } #endif     printf("已除去\n"); }  void create_link(linklist *head) {     int data1;     linklist *r;      //r = (linklist*)malloc(sizeof(linklist));     //while(scanf("%d",&data1),data1 != -1)     while(scanf("%d",&data1) && data1 != -1) {         r = (linklist*)malloc(sizeof(linklist));         r->data = data1;         r->next = head->next;         head->next = r;     } } void printfList(linklist *head) {     linklist *p = head->next;     while(p != NULL)     {         printf("%d\n",p->data);         p = p->next;     } } 供参考～  两个地方有逻辑错误，创建链表时，除了第一个节点申请了空间，后面的节点没有申请空间呢 第二个错误，是删除相同的，楼主应该用二层循环吧，若用一层循环只能将与第一个节点相同的data去掉。另外，删除节点的地方有也有问题。  建议对比找出自己的问题～
user-0 提问: 求教，c语言统计单词频率，这个问题困扰我好几个星期了，初学者。

回复:
user: user-0
content: 第一次发帖，好像分都给了一个人，没给到分的抱歉哈

user: user-0
content: 牛，给力，谢了，兄弟。

user: user-1
content: #include <stdio.h> #include <string.h>  void count_words() {     char text[8][15] = { "on","the","desk","on","frank","the","hello" };      char buf[8][15];     int nword[8] = {0}, total_cnt = 0;     int i, j;       strcpy(buf[0], text[0]);     total_cnt = 1;     nword[0]++;      for (i = 1; i < 8; i++) {         if (strlen(text[i]) <= 0)             continue;         for (j = 0; j < total_cnt; j++) {             if (strcmp(buf[j], text[i]) == 0) {                nword[j]++;                break;             }         }         if (j >= total_cnt) {             puts(text[i]);             strcpy(buf[total_cnt], text[i]);             nword[total_cnt]++;             total_cnt++;         }     }      printf("%d\n", total_cnt);     for (i = 0; i < total_cnt; i++) {         printf("%s %d \n", buf[i], nword[i]);     }     /*     char buf[8][15] = { "" };     char* ptr = NULL;     int nword[15] = { 0 };     int i, j, k;     int word_cout = 0;     bool new_word = true;      for (i = 0; i < 8; i++) {         ptr = text[i];         for (j = 0; j < i; j++) {             if (strcmp(buf[j], ptr) == 0) {                 new_word = false;                  ++nword[j];             }         }         if (new_word) {             strcpy(buf[i], ptr);             ++nword[j];             word_cout++;         }         else {             strcpy(buf[i], ptr);         }     }     printf("%d\n", word_cout);     for (k = 0; k < word_cout; k++) {         printf("%s %d ", buf[k], nword[k]);     }     */ }  int main(void) {     count_words();     return 0; } 供参考～

user: user-2
content: void count_words() {     char text[8][15] = { "on","the","desk","on","frank","the","hello" };     char buf [8][15] = { "" };     char* ptr = NULL;     int nword[8] = { 0 };     int i, j, k;     int word_count = 0;      for (i = 0; i < 8; i++) {         ptr = text[i];         if ( strlen(ptr)==0) continue; // 空串跳过         nword[word_count] = 1; // 找到第一个不重复的串，重复都被后面的for循环替换了 	strcpy(buf[word_count++], ptr) ; // 不重复的放到buf里面去         for (j = i+1; j <8; j++) {  // 删除后面重复存在的串             if (strcmp(text[j], ptr) == 0) { //   找到了重复的串                 nword[word_count-1]++; // 计数器自增                 text[j][0]= '\0'; // 删除             }         }     }     printf("%d\n", word_count);     for (k = 0; k < word_count; k++) {         printf("%s %d ", buf[k], nword[k]);     }  }
user-0 提问: 结构指针能不能相互赋值呢?

回复:
user: user-0
content: 引用 1 楼 寻开心 的回复:类型不一样啊，  错误提示那里说的很清楚 stud_note 和 stud_node 这不一样啊。 谢谢 !  被自己蠢哭了 哈哈哈

user: user-1
content: 类型不一样啊，  错误提示那里说的很清楚 stud_note 和 stud_node 这不一样啊。
user-0 提问: 虽然warning不影响运行，但有没有办法去掉warning

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

user: user-0
content: 引用 2 楼 寻开心的回复:const  int storeArrey[10] = {1,2,3,4,5,6,7,8,9,10};  这里把const 去掉，是第二种改法  前面的增加cosnt的地方要改造多处 Thanks.😁😁😁

user: user-2
content: const  int storeArrey[10] = {1,2,3,4,5,6,7,8,9,10};  这里把const 去掉，是第二种改法  前面的增加cosnt的地方要改造多处

user: user-2
content: int * maxfinder(const  int To_be_fouded_arrey[10]);  这样就好
user-0 提问: c语言链表

回复:
user: user-1
content: 建议简单的链表用递归的方法建立和遍历： https://gitee.com/shallwing/C-3P/blob/master/DataStructure-OS/DataStructure/linearList/list.cpp

user: user-2
content: 建议楼主对比代码找出自己逻辑上问题～

user: user-2
content: #include<stdio.h> #include<stdlib.h>  #define LEN sizeof(struct Node) //int n;  struct Node {     int x;     struct Node *next; };  struct Node *CreateLList(); struct Node *SortLList(struct Node *head); void PrintLList(struct Node *head); //void main() int main() {     struct Node *h1,*h2;     h1=CreateLList();     PrintLList(h1);     h2=CreateLList();     PrintLList(h2); }  void PrintLList(struct Node *head) {     struct Node *p;     p = head;     printf("the new records are:\n");     //if(head!=NULL)     if(!head)         return;     do {         printf("%d ", p->x);         p = p->next;         //} while(p->next!=NULL);     } while(p!=NULL);     putchar(10); }  struct Node *CreateLList() {     struct Node *head,*p;     int n=0;     head = p = (struct Node*)malloc(LEN);     if (!p)         exit(0);     scanf("%d", &p->x);     //head=NULL;     while(p->x != 0)     {         ++n;         if(n==1)         {             head = p;             head->next = NULL;         }         else         {             p->next = head->next;             head->next = p;         }         p = (struct Node*)malloc(LEN);         if (!p)             exit(0);         scanf("%d", &p->x);     }     free(p);      return head; }   供参考～

user: user-3
content: 循环条件不太对叭……
user-0 提问: 有没有高手使用C语言编写与AB PLC以太网通讯的程序。型号：Compacllogix

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 问题

回复:
user: user-1
content: 不难，建议自己写写～

user: user-2
content: 就是把赋值和输出封装成两个函数进行调用就好了一个函数放赋值语句，一个放输出，main函数里就创建数组，然后调用，是这意思吧
user-0 提问: 链栈逆置链表，大佬们帮我看看哪里错了，自己学了几天啥都不懂！！！

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  typedef struct node             //定义链表// {      int data;     node *next; }Lnode,*Linklist;  typedef struct  stack           //定义链栈// {      int data;     stack *snext; } stack,*linkstack;  void init(linkstack snext)               //初始化栈// {     snext = NULL;  } int empty(stack *s)      //判断是否空栈// {      if(s->snext==NULL)         return 1;     else         return 0;  } Linklist creat(int num)          //输入数据创建含头结点的单链表// {      Lnode *s,*r;     int x;     int cout=0;     Linklist L;     L=(Lnode *)malloc(sizeof(Lnode));           //需开辟空间否则无法使数据存入进去，初始化链表//     L->next=NULL;     r=L;     printf("请输入数据:");     while(cout<num)     {          scanf("%d",&x);         s = (Linklist)malloc(sizeof(Lnode));         if (!s)             exit(0);         s->data = x;         s->next = NULL;         r->next = s;         r = s;         cout++;      }     return L;  } void push(stack** s, Lnode *x)      //入栈// {     //{     stack* p=(stack *)malloc(sizeof(stack));     if (!p)         exit(0);     p->data = x->data;     p->snext = (*s);     (*s) = p;      //} } //int pop(stack* s,int *x)               //出栈// int pop(stack** s,int *x)               //出栈// {     stack *p = *s;     if(empty((*s)))         return 0;     //else     //{     *x = (*s)->data;     (*s) = (*s)->snext;     free(p); #if 0     stack * p=(stack *)malloc(sizeof(stack));     p->snext=s;     s=s->snext;     *x=p->data;     free(p); #endif     //}     return *x; }  void result(Linklist L) {      Lnode *p;//,*l;     int x;     stack *s=(stack *)malloc(sizeof(stack));     p = L->next;          //指向第一个结点     //l = L;     //L->next=NULL;     while(p)         //将链表结点数据入栈     {          push(&s,p);         p = p->next;     }     while(!empty(s))     {          x = pop(&s,&x);         printf("%d ",x);     } }    int main() {     //Lnode * head;     int num;     Linklist L;     printf("请输入个数:");     scanf("%d",&num);     L=creat(num);     result(L);          /*链栈逆置*/      return 0; }  供参考～  注意建议加上把L链表释放，free
user-0 提问: C语言在vs2019中复数的定义与使用方法，跪求大佬！

回复:
user: user-1
content: 你看_C_double_complex的定义吧  typedef struct _C_double_complex     {         double _Val[2];     } _C_double_complex; 是一个结构体，该结构体中包含一个double数组，该数组中有2个元素。 以下定义方法在VS2015 C++环境下不报错 _C_double_complex c = { 1.0, 3.0 };

user: user-2
content: 现在的C++标准已经提供了复数类模板complex，但也不可能有 std::complex<float> c=1.0+3.0*i; 的形式。而应该是 std::complex<float> c(1.0, 3.0);
user-0 提问: 求大神指教

回复:
user: user-1
content: 查一下'1'，'4'，'7'对应的10进制是是多少 '0'对应的是0x30,即48.以此向后计算就知道答案了。

user: user-2
content: 因为你用了''符号，int类型的数组初始化直接给值就好了，字符类型的在加''符号，你加了这个符号进去，他会认为你是字符，然后去找到对应的ascii码解析，把对应的数字替换你这里的整数，所以你这个初始化结果不是表面的0-8，而是48-56 https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81&fromid=99077&fr=aladdin 这里有ASCII码，你可以看一下

user: user-3
content: 因为你大括号里面写的是字符而不是数字，但是输出的是按数字输出的，实际输出的是1，4，7这几个字符的ASCII码。
user-0 提问: C语言编写的计算长方体体积程序，和书上写得一样，但就是不能运行，初学编程，求大神指教

回复:
user: user-1
content: 重新建一个控制台程序，把下面的代码全部拷贝进去，再试试 #include "stdafx.h" #include<stdio.h>  #define Height 10  int calculate(int Long,int Width); int main(int argc, char* argv[]) { 	int m_Long; 	 	int m_Width; 	 	int result; 	 	 	printf("长方形的高度为：%d\n",Height); 	 	 	printf("请输入长度\n"); 	 	scanf("%d",&m_Long); 	 	 	printf("请输入宽度\n"); 	 	scanf("%d",&m_Width); 	 	 	result=calculate(m_Long,m_Width); 	 	printf("长方体的体积是："); 	 	printf("%d\n",result); 	return 1;  } int calculate(int Long,int Width)  { 	int result=Long*Width*Height; 	 	return result; }

user: user-2
content: 跟我的一样还是不行，就是输入完三边摁下回车就结束了，没有计算出结果

user: user-0
content: 改完以后报这个错误是什么情况

user: user-0

user: user-0
content: 引用 6 楼 棉猴的回复:VC++6.0我的最爱，没有之一 int calculate(int Long,int Width)//-------去掉分号   {      int result=Long*Width*Height;   return result;//---------把中文字符的逗号改成英文字符的逗号--------- } VC++6.0 C++调试结果  按照你说的改了，还是不能运行鸭，我后来还重新编了一次，就是不能运行，是不是我这软件有问题呀？但是“Hello world”那个简单的c程序又可以运行

user: user-1
content: VC++6.0我的最爱，没有之一 int calculate(int Long,int Width)//-------去掉分号   {      int result=Long*Width*Height;   return result;//---------把中文字符的逗号改成英文字符的逗号--------- } VC++6.0 C++调试结果

user: user-0
content: 引用 4 楼 Nonoas的回复:把报错截图发上来看看 好像没有报错，点击运行程序的时候就响了一声（警告提示音），程序运行的画面都没有出来

user: user-3
content: 把报错截图发上来看看

user: user-4
content: #include<stdio.h>  #define Height 10  int calculate(int Long,int Width);  int main() {     int m_Long;     int m_Width;     int result;      printf("长方形的高度为：%d\n",Height);       printf("请输入长度\n");     scanf("%d", &m_Long);      printf("请输入宽度\n");     scanf("%d",&m_Width);       result = calculate(m_Long,m_Width);      printf("长方体的体积是：");      printf("%d\n",result);      return 0;  }   //int calculate(int Long,int Width); int calculate(int Long,int Width) {     int result=Long*Width*Height;      //return result；     return result; } 供参考～

user: user-0
content: 我把函数定义的分号删掉了，还是不行呀，我用的是Visual6.0软件

user: user-5
content: int calculate(int Long,int Width);函数声明结尾用分号，函数定义是不能用分号的，而是括号后直接接大括号，应该删除分号，这样： int calculate(int Long,int Width)  {      int result=Long*Width*Height;   return result； }
user-0 提问: 萌新求1简单俄罗斯方块代码

回复:
user: user-0
content: 引用 1 楼 @矛盾综合体 的回复：在csdn博文上搜索应该有很多，里面的博主应该有解释或者思路设计谢谢！

user: user-0
content: 引用 1 楼 @矛盾综合体 的回复：在csdn博文上搜索应该有很多，里面的博主应该有解释或者思路设计谢谢！

user: user-1
content: 如果是电脑上的论坛，可以看到右边和下边好多的，自己找一个合适的吧（手机上不知道什么效果）

user: user-2
content: 在csdn博文上搜索应该有很多，里面的博主应该有解释或者思路设计
user-0 提问: #软件工程大一新生的期末爆炸#

回复:
user: user-1
content: &按位与运算。 && 布尔运算 真真为真；真假，假假都为假

user: user-2
content: &&就是看真假的，也就是是否成立或者是否等于0之类的，且&&的优先级比||高，前面d=a/2是赋值表达式且有值，必定为真，后面b==c是判断，结果显然为假，则式子变成    真&&假||！a，a有值，！a为假（非零即为真）式子：真&&假||假  &&优先级高先运算，结果为假。式子：假||假   ||是两边有一个为真即为真，否则为假，故结果为0，也就是假  &&是两边有一个为假结果就是假
user-0 提问: c语言求教  50分

回复:
user: user-1
content: 找到了，话说那个博主现在都没有给我结贴。。。。 链接：https://bbs.csdn.net/topics/395359290#post-410107541

user: user-1
content: 这个题我回答过，几乎差不多吧，就是没有准确率之类的，是三次错误就显示答案，让我找找，看还找不找得到
user-0 提问: 这种方式的结构体全部都在栈内存中吗？

回复:
user: user-1
content: 栈内存的变量定义需要是在函数内定义的，即是局部变量，局部变量是在栈上申请～

user: user-2
content: 是的。。。。。。。。。
user-0 提问: 结构体复制现象求解释

回复:
user: user-1
content: *book2 = *book1 确实是把所有的元素复制了一份儿给了*book2  这也就是为什么说struct也是值类型的原因  赋值操作，会把结构体里面的所有元素，一摸一样的复制一份儿给到另外一个结构体。
user-0 提问: 二维数组引用

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

user: user-2
content: *(a+n)是第n行第0个元素的地址 *(a+n)+m是第n行第m个元素的地址 *(*(a+n)+m)是第n行第m个元素

user: user-3

user: user-4
content: 二维数组  a[x][y] *(a+n) 是一个地址啊，谁说不是地址的啊  *(a+n) 的 值 和  &a[n][0]是相等的   *(a+n)+m 是 &a[n][m] , 不是值，还是地址
user-0 提问: C语言函数部分  先说一下，我的技术比较low，不要见笑

回复:
user: user-0
content: 引用 8 楼 遇见女神的回复:按照题目，有F(1)=2，F(2)=3，F(3)=5，F(4)=F(3)+F(2)-F(1)，也就是F(4)=5+3-2=6，F(5)=F(4)+F(3)-F(2)，也就是F(5)=6+5-3=8； 你代码却定义是f3=2，f2=3，f1=5，且f4=f3+f2-f1，也就是f4=2+3-5=0，错误了。 哦，明白了，我太粗心了，谢谢

user: user-1
content: 按照题目，有F(1)=2，F(2)=3，F(3)=5，F(4)=F(3)+F(2)-F(1)，也就是F(4)=5+3-2=6，F(5)=F(4)+F(3)-F(2)，也就是F(5)=6+5-3=8； 你代码却定义是f3=2，f2=3，f1=5，且f4=f3+f2-f1，也就是f4=2+3-5=0，错误了。

user: user-2
content: 链接给我吧我跑一遍

user: user-0
content: 引用 5 楼 Chris Brown的回复:[quote=引用 4 楼 weixin_45746353的回复:][quote=引用 3 楼 Chris Brown的回复:]答案错误应该也有对应的输入输出提示吧 没有呢，可是题目中说n是大于四的[/quote] 试着return f3呗不从标准输出输出[/quote] #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int f(int n) {     int f1,f2,f3,f4,i;     f1=2;     f2=3;     f3=5;     for(i=1;i<=n-3;i++)     {         f4=f1+f2-f3;         f1=f2;         f2=f3;         f3=f4;     }     printf("%d",f3); } int main() {     int n;     scanf("%d",&n);     f(n);      } 是这样改么？ 可还是不对

user: user-2
content: 引用 4 楼 weixin_45746353的回复:[quote=引用 3 楼 Chris Brown的回复:]答案错误应该也有对应的输入输出提示吧 没有呢，可是题目中说n是大于四的[/quote] 试着return f3呗不从标准输出输出

user: user-0
content: 引用 3 楼 Chris Brown的回复:答案错误应该也有对应的输入输出提示吧 没有呢，可是题目中说n是大于四的

user: user-2
content: 答案错误应该也有对应的输入输出提示吧

user: user-2
content: 是不是因为没考虑n小于1的情况

user: user-3
content: 他是叫你用递归做吧？
user-0 提问: π_π小白求教

回复:
user: user-1
content: 引用 2 楼 寻开心 的回复:借助第二个临时栈，要删除的时候，从栈弹出内容，push到另外一个临时栈里面，直到弹出要删除的之后，吧临时栈的内容再弹出放回原来的栈里面。 当然，这只的是只利用标准的栈的操作 如果你用数组来实现的话，完全可以删除中间的，然后移动数据后修改栈指针来实现。 +1

user: user-2
content: 借助第二个临时栈，要删除的时候，从栈弹出内容，push到另外一个临时栈里面，直到弹出要删除的之后，吧临时栈的内容再弹出放回原来的栈里面。 当然，这只的是只利用标准的栈的操作 如果你用数组来实现的话，完全可以删除中间的，然后移动数据后修改栈指针来实现。

user: user-1
content: 用两个或三个栈
user-0 提问: 数组问题求助，删除一个字符串中某个字符

回复:
user: user-0
content: 引用 9 楼 棉猴的回复:[quote=引用 8 楼 weixin_45880956 的回复:] [quote=引用 7 楼 棉猴的回复:]VC++6.0是我的最爱，没有之一，握个抓 把str和str1进行初始化即可。 	char str[100] = {0}, str1[100] = {0}, p; VC++6.0调试结果  的确好了，为啥呢，初始化起什么作用[/quote] 初始化相当于把数组str1和str都填充了'\0'，即字符串结束符，所以printf()函数遇到'\0'就会停止输出，不会再输出其他的内容了。[/quote] 🤝(୨୧•͈ᴗ•͈)◞︎谢谢

user: user-1
content: 引用 8 楼 weixin_45880956 的回复:[quote=引用 7 楼 棉猴的回复:]VC++6.0是我的最爱，没有之一，握个抓 把str和str1进行初始化即可。 	char str[100] = {0}, str1[100] = {0}, p; VC++6.0调试结果  的确好了，为啥呢，初始化起什么作用[/quote] 初始化相当于把数组str1和str都填充了'\0'，即字符串结束符，所以printf()函数遇到'\0'就会停止输出，不会再输出其他的内容了。

user: user-0
content: 引用 7 楼 棉猴的回复:VC++6.0是我的最爱，没有之一，握个抓 把str和str1进行初始化即可。 	char str[100] = {0}, str1[100] = {0}, p; VC++6.0调试结果  的确好了，为啥呢，初始化起什么作用

user: user-1
content: VC++6.0是我的最爱，没有之一，握个抓 把str和str1进行初始化即可。 	char str[100] = {0}, str1[100] = {0}, p; VC++6.0调试结果

user: user-0
content: 引用 5 楼 Chris Brown的回复:[quote=引用 2 楼 weixin_45880956的回复:][quote=引用 1 楼 Chris Brown的回复:]如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0[/quote] 你可以试着最后一位赋值为结束符\0试试[/quote] 好得，我去试试，谢谢啦

user: user-2
content: 引用 2 楼 weixin_45880956的回复:[quote=引用 1 楼 Chris Brown的回复:]如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0[/quote] 你可以试着最后一位赋值为结束符\0试试

user: user-2
content: 引用 2 楼 weixin_45880956的回复:[quote=引用 1 楼 Chris Brown的回复:]如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0[/quote] 我用的就不是VC所以跑你的程序就正常

user: user-2
content: 引用 2 楼 weixin_45880956的回复:[quote=引用 1 楼 Chris Brown的回复:]如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0[/quote] 你的程序没啥问题，主要是初始化数组

user: user-0
content: 引用 1 楼 Chris Brown的回复:如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0

user: user-2
content: 如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。

user: user-3
content: 这是字符串没有结束标志‘\0’导致的，你在便利完字符串退出循环的时候加一句： str1[j] = '\0'; 试试

user: user-3
content: 这是字符串没有结束标志‘\0’导致的，你在便利完字符串退出循环的时候加一句：

user: user-4
content: scanf("%c", &p);  //把%s改成%c
user-0 提问: 新手学编程，帮我看看这两个程序有什么区别，输出的结果为什么不一样？

回复:
user: user-1
content: 一个是sum=sum+1 ，每次只加1 另一个是sum=sum+i，每次加的i值，下次都递增了

user: user-0
content: 多谢大家啊，我当时对着一句句的看，都没发现i和1不一样，老了眼花了

user: user-2
content: 上面已经说了原因了，+1意思可以理解为有多少个数是符合条件的，+i才是总值，这边就不说了，提个建议，for循环语句的{} 不要省略，我知道它可以省略，但是我们默认的格式是不省略符号的，现在程序短看着没影响，但是以后多了如果出错不好调试找错，要养成良好的编码风格哦

user: user-3
content: sum = sum + i;和sum = sum + 1;注意sum加的值是不一样的～

user: user-4
content: 第一个程序是 sum=sum+1 ;第二个程序是   sum=sum+i; 当然不同了.

user: user-0
user-0 提问: 关于指针数组的问题,指针数组中存放的是指针(地址)吗?

回复:
user: user-0
content: 引用 1 楼 自信男孩 的回复:因为%s对应的就应该是char *类型，而color[i]就是char *。如果color+i是不对的，因为color是char **，color+i也是char ** 好的  谢谢

user: user-1
content: 因为%s对应的就应该是char *类型，而color[i]就是char *。如果color+i是不对的，因为color是char **，color+i也是char **
user-0 提问: 急求大佬，c语言课设

回复:
user: user-1
content: 这个问题表明你新建的是一个main类型函数（控制台程序），而你的程序中有窗口程序，显然是个win32函数，解决方法： 项目－属性－链接器－系统－子系统－把控制台该为windows
user-0 提问: 求问！！！

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

user: user-2
content: 引用 2 楼 weixin_45798902 的回复:[quote=引用 1 楼 寻开心的回复:]除了基础的数字类型（int，float，double这些）以及char类型，和对应的指针类型 剩下都是构造类型吧。 数组，结构， 联合，枚举， typedef定义出来的也算是吧 导出类型是个什么鬼？ 没有注意这个概念 我也不知道，书上的，哭了[/quote] 导出类型是返回值类型嘛？返回值类型的话就多了阿，前面的那些，指针（地址），结构体，引用，包括容器都可以返回

user: user-3
content: 这个问题好像除了考试考一个选择题意外没啥用

user: user-0
content: 引用 1 楼 寻开心的回复:除了基础的数字类型（int，float，double这些）以及char类型，和对应的指针类型 剩下都是构造类型吧。 数组，结构， 联合，枚举， typedef定义出来的也算是吧 导出类型是个什么鬼？ 没有注意这个概念 我也不知道，书上的，哭了

user: user-3
content: 除了基础的数字类型（int，float，double这些）以及char类型，和对应的指针类型 剩下都是构造类型吧。 数组，结构， 联合，枚举， typedef定义出来的也算是吧 导出类型是个什么鬼？ 没有注意这个概念
user-0 提问: 链表求救

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

user: user-2
content: 只从代码上看ElementType还没有定义呢   看书不能断章取义， 这种代码往往都是前后关联的，前面有过类似的定义才这样的 更不能完全照搬， 要先明白它的意思再去复制 就如同在这个论坛里面，不写自己的代码，上来要别人原码一样。  自己不理解没有想法，要来了代码就更看不懂 从来都是看别人的代码比自己写还难 工作了，也是都不愿意接受别人的代码继续写，而是宁愿自己重新来 原因就是理解他人的想法比自己做一遍更难  回到这个问题上 ElementType表示链表包含的数据的类型，比如，你可以在顶部增加一一个 typedef int ElementType； 来解决这个定义缺失的问题
user-0 提问: 明天课设答辩急需大佬！！！！麻烦大佬讲一下这个程序我看不懂了！！！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 请问这个警告是什么意思，要怎么处理

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

user: user-2
content: VC++6.0，我最喜欢，没有之一。 不过在VS2015中你可能会理解的更为深刻 int main() { 	int i; 	return 0; } 此时，编译器的警告信息是  解决的方法是 1 注释掉该行代码 2 定义额外的宏 #define UNUSED_VARIANT(x) ((void)(x)) int main() { 	int i; 	UNUSED_VARIANT(i); 	return 0; }
user-0 提问: 这是什么原因引起的

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

user: user-2
content: 30行的函数，返回的是一个指针类型p，函数名里面是返回类型是stu，不一致。  30行里的*靠着stu，写成stu*,不要和函数名写在一起。  stu* find(stu* head, int s)

user: user-3
content: 函数声明别写在main里，别写在任何函数里。而且你这也不需要单独声明啊

user: user-4
content: 函数名冲突了
user-0 提问: 为什么运行不对，小白跪求大佬。

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

user: user-0
content: 引用 3 楼 user-2的回复:说一下你的逻辑，也可以把运行情况发出来看看 我输入abcd输出是abcd****

user: user-2
content: 说一下你的逻辑，也可以把运行情况发出来看看

user: user-0
content: 引用 1 楼 user-2的回复:s的长度不足，要定的大一点 不对，改了运行结果一样错的

user: user-2
content: s的长度不足，要定的大一点
user-0 提问: 哪位大佬帮看看代码哪里有错

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

user: user-2
content: 引用 5 楼 weixin_45798902的回复:[quote=引用 楼主 qq_46052581的回复:] #include<stdio.h> int main() {     int i,j,n;     scanf("%d",&n);     for(j=2;j<=n;j++){         for(i=2;i<=j/2;i++)           if(j%i==0)               break;           if(i>j/2)                 printf("%d ",j);}     return 0; }[/quote] 不过，我这个是输入2到n的素数

user: user-2
content: 引用 楼主 qq_46052581的回复: #include<stdio.h> int main() {     int i,j,n;     scanf("%d",&n);     for(j=2;j<=n;j++){         for(i=2;i<=j/2;i++)           if(j%i==0)               break;           if(i>j/2)                 printf("%d ",j);}     return 0; }

user: user-2
content: 引用 楼主 qq_46052581的回复: 我刚做的，等等发给你

user: user-3
content: 另外，另个printf也有问题，你应该加上%d，这样才能和后面的变量匹配。即使是输出也应该输出a，而不是b吧。

user: user-3
content: 定义了两个b，而循环中的b作用范围是for循环，所以if (b > a)这里的b不是循环里的b，但是楼主应该用循环里的b才对。  所以，去掉for循环里int b = 0；的int，这样for循环里的b就是上面定义的b，因此循环之后用的b就是对的。  另外，scanf之后，需要对a进行判断，if (a < 2) return -1;直接返回就好了，或者打印一条提示，然后再返回～

user: user-4
content: 首先有点不严谨，如果是1呢？b=2>a。而且b是一直加到等于a的，所有a%b最后肯定可以break，怎么超过a？
user-0 提问: 错在哪里？

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

user: user-0
content: 引用 2 楼 自信男孩的回复:两处问题，scanf改成scanf_s，对于%d这样改是可以的。 第二处是printf的双引号注意下不能全放在双引号里。想一下原因～ scanf改成scanf_s就能运行了

user: user-0
content: 引用 3 楼 csucxy的回复:1楼指出错误是肯定的，不过你的error C4996错误是新版VS认为scanf不安全引起的，解决办法：在程序的最开始加入如下一行： #define _CRT_SECURE_NO_WARNINGS 它的作用就是取消VS对这种“错误”的报错。 当然，也可以遵循VS的建议，用scanf_s替换scanf。 总之，VS反馈的提示信息应该仔细看看，其实人家已经提示得相当明显了。 自学，很多东西都是听免费课程，靠自己反应

user: user-2
content: 1楼指出错误是肯定的，不过你的error C4996错误是新版VS认为scanf不安全引起的，解决办法：在程序的最开始加入如下一行： #define _CRT_SECURE_NO_WARNINGS 它的作用就是取消VS对这种“错误”的报错。 当然，也可以遵循VS的建议，用scanf_s替换scanf。 总之，VS反馈的提示信息应该仔细看看，其实人家已经提示得相当明显了。

user: user-3
content: 两处问题，scanf改成scanf_s，对于%d这样改是可以的。 第二处是printf的双引号注意下不能全放在双引号里。想一下原因～

user: user-4
content: printf 那里错了。
user-0 提问: 急急急！C语言题

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

user: user-2
content: 先吧思路写下来。再转换成语言描述，再调试。

user: user-3
content: 建议自己动手试一下哦，编程还是要自己写了才会，这个不难，要是不会可以私信教你，但是还是要自己先想一下

user: user-4
content: #include<stdio.h> int main(void) {     float sum,weight,price;     sum=0;     scanf("%f",&weight);     while(weight<0){     printf("重量不能为负数！请重新输入！\n");     scanf("%f",&weight); }     if(weight<=10&&weight>=0){         price=5; }     if(weight>10){         price=4.5; }     sum=weight*price;     printf("总价\t%f",sum);     return 0; }  手机不易，给个采纳谢谢

user: user-5
content: 起码自己先动手试试，简单的几条语句，定义几个变量的问题～

user: user-6
content: 用if   else语句啊，判断是10斤内还是超过10斤，然后分别计算优惠值
user-0 提问: C语言方面的问题 按要求编程的 求解

回复:
user: user-1
content: pow（double x， double n）函数，了解一下 #include 《math.h》  整数的话，你自己做乘法吧。  0.5次方，对应的是sqrt（x）函数 绝对值 是 fabs函数

user: user-0
content: 刚学c语言不知道怎么表示n次方
user-0 提问: C语言求一数三平方

回复:
user: user-1
content: //#include"stdio.h" //#include"math.h" #include <stdio.h> #include <math.h>  void f(void) {     int i,n0,n1,n2;     for(i=100000;i<999999;i++)     {         n0 = sqrt(i);         n1 = sqrt(i/1000);         n2 = sqrt(i%1000);         if(n0*n0 == i && n1 * n1 == i/1000 && n2 * n2 == i%1000)             printf("%d\n",i);     } }  int main() {     //int y;     //y=f();     f();     //printf("%d",y);     //     return 0; } 供参考～  f定义了返回值，但是f函数里有return语句吗？  从功能上看，无需返回值，因此定义为void f即可～

user: user-2
content: 引用 1 楼 喜欢做我自己的回复:函数原型为double sqrt(double); 将变量设为double类型，不要用int 型 他是要取整，并没有问题呀 楼主，f没有return，所以y没有意义

user: user-2
content: 引用 1 楼 喜欢做我自己的回复:函数原型为double sqrt(double); 将变量设为double类型，不要用int 型 他是要取整，并没有问题呀 楼主，f没有return，所以y没有意义

user: user-0
content: 可以运行，结果正确，感谢🙏

user: user-3
content: 函数原型为double sqrt(double); 将变量设为double类型，不要用int 型
user-0 提问: 这个小白有问题

回复:
user: user-1
content: 急功近利，误人子弟

user: user-2
content: 不用换来换去的   一点儿错误没有的书太罕见了。改了，继续看就是了 这种最基础的， 都差不多

user: user-0
content: 😂😂😂大佬们有没有推荐的教材啊。

user: user-3
content: 错误的教材，扔了得了。

user: user-2
content: 应该是 %= 还差不多， 没有～= 这个运算啊

user: user-2
content: ～  是单目运算符 ， 位运算，逐个位取反  ～= 是个神马东西啊 ？！
user-0 提问: C语音作业，求大佬指教

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

user: user-2
content: 这不是C语言的语法，是C++的语法

user: user-2
content: cin >> a; 表示输入一个值到变量a的内存空间

user: user-2
content: m = (m/i)

user: user-0
content: 引用 1 楼 喜欢做我自己的回复:cin >> a; 表示输入一个值到变量a的内存空间 能再请教你一个问题吗？ m/=i什么意思
user-0 提问: c语言编程

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

user: user-2
content: 这个就是改变了这个数组的值，k=3,s[k-1+i]的意思就是s数组的2+i下标的这个地址的值，也就是s[2],因为数组下标从0开始是第一个，所以s[2]是s数组这个字符串的第三个字符，也就是C的值改为c[i]的值。

user: user-3
content: 看不明你要做什么，函数写成什么样子出什么结果 为什么是AB12345CD才是正确的， 题目的要求给出来
user-0 提问: c语言

回复:
user: user-1
content: 你这个是c语言吗？！赶脚是C++呢 c里面，Student只能是一个struct结构， 但是struct是默认支持=的啊

user: user-1
content: Student类没有定义赋值操作符，自己重载一个 Student& operator = （const Student& s) {      hour = s.hour;     ....     return * this; }
user-0 提问: 大神 刚入门C的小白 求助课设作业

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: C语言程序运行出现the value of ESP was not properly saved across a function call

回复:
user: user-1
content: 引用 3 楼 amstelang 的回复:厉害哦！！！大佬，成功了，咋回事 你需要的元素个数是10个，int count[] 定义的时候括号里面的代表个数，当然需要10了

user: user-0
content: 厉害哦！！！大佬，成功了，咋回事

user: user-0
content: 0-9，应该没问题的

user: user-1
content: int count[radix]; 不是int count[radix - 1];
user-0 提问: 有一字符串，输入一个字符，若字符串包涵此字符，则删去。

回复:
user: user-1
content: for循环出来的时候i是反斜杠0的下标，对应的j也应该是i-1

user: user-1
content: 因为for循环循环体中只有if语句，最后一句str[j]=‘\o’是在循环体外的

user: user-0
content: 理解了，谢谢!。。。。。

user: user-2
content: 引用 2 楼 林涅槃 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]图片看上去有点。。。。。。。。。。。 整理一下，如果是printf打印%s，遇到\0结束是没错的 是没错，如上图删除字符c，将字符c的位置str[j]赋予'\0'，那么读取字符串时读到c位置就应该结束了，不应该还存在后面的字符串program不是吗[/quote] 单纯看这一个函数，确实没错，但是想要继续打印到后面的字符，办法很多种，至于有没有其他处理，你的图片看不出来。

user: user-0
content: 引用 1 楼 @矛盾综合体的回复:图片看上去有点。。。。。。。。。。。 整理一下，如果是printf打印%s，遇到\0结束是没错的 是没错，如上图删除字符c，将字符c的位置str[j]赋予'\0'，那么读取字符串时读到c位置就应该结束了，不应该还存在后面的字符串program不是吗

user: user-2
content: 图片看上去有点。。。。。。。。。。。 整理一下，如果是printf打印%s，遇到\0结束是没错的
user-0 提问: 萌新问题求解答 c

回复:
user: user-1
content: 代码仅供参考（仅两个，其他参照写就可以写出来）  #include<stdio.h> void init_Num(int *a,int len) { 	int i; 	for(i=0;i<len;i++) 	{ 		scanf("%d",a+i); 	} } int Max_Num(int *a,int len) { 	int max,i; 	max=0; 	for(i=1;i<len;i++) 	{ 		if(a[i]>a[max]) 		{ 			max=i; 		} 	} 	return a[max]; } int main() { 	int a[10]; 	init_Num(a,10); 	printf("max=%d\n",Max_Num(a,10)); 	return 0; }   结果 运行环境：gcc 编辑环境：sources insight  如有不懂，或者其他，请私信，谢谢！
user-0 提问: C程序

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

user: user-2
content: 这个题目的意思是要你自己写一个函数来调用不是调用库函数吧？

user: user-3
content: 引用 2 楼 qq_46065658 的回复:[quote=引用 1 楼 壹抹尘埃的回复:]字符串分割？比较字符串长度，输出长度最大的字符串 怎么把字符串分割成几个小字符串？[/quote] char *strtok(char *s, const char *delim);  分解字符串为一组字符串。s为要分解的字符串，delim为分隔符字符串。  从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。

user: user-0
content: 引用 1 楼 壹抹尘埃的回复:字符串分割？比较字符串长度，输出长度最大的字符串 怎么把字符串分割成几个小字符串？

user: user-3
content: 字符串分割？比较字符串长度，输出长度最大的字符串
user-0 提问: C语言中struct问题

回复:
user: user-1
content: 引用 楼主 wy_9434 的回复:问题描述：     本人在pid.h中定义了一个结构体，如下： 			struct     {   	float PID_Target;    	  float PID_Measure;   	  float PID_Kp;      	  float PID_Ki;        	  float PID_Kd;       	float Error;         	  float Last_Error;    	  float Prev_Error;    	  float Sum_Error;        }PIDStruct;    在源文件pid.c和main.c中均包括使用pid.h,即#include “pid.h”，这样做编译后报错：L6200E: Symbol PIDStruct multiply defined (by pid.o and main.o). 	 但是将上述结构体只定义在源文件pid.c中的相关函数中，编译通过。 	 本人接触C语言不久，请问这是为什么？谢谢。  struct     {   	float PID_Target;      float PID_Measure;     float PID_Kp;        float PID_Ki;          float PID_Kd;       	float Error;           float Last_Error;      float Prev_Error;      float Sum_Error;        }PIDStruct; 你这样定义了一个结构体变量，PIDStruct，如果多个文件包含你的这个头文件，那么每个包含的文件都会定义一次，不就重定义了嘛。不要在头文件中定义变量，只定义类型

user: user-2
content: struct pid    {    float PID_Target;      float PID_Measure;     float PID_Kp;        float PID_Ki;          float PID_Kd;        float Error;           float Last_Error;      float Prev_Error;      float Sum_Error;        }; 供参考～ 去掉PIDStruct，因为这是定义了一个变量，如果在两个源文件里定义了相同的结构体变量，就会薄这个错误。  或者按照楼上的建议，加一个typedef，这样PIDStruct就是一个类型别名，不是全局变量了，也是可以的。但是你的程序里需要注意下，这个不是一个变量，而是一个结构体类型别名，即可以简单认为是一个类型关键字

user: user-0
content: 引用 1 楼 user-3 的回复:#pragma once typedef struct     {   	float PID_Target;      float PID_Measure;     float PID_Kp;        float PID_Ki;          float PID_Kd;       	float Error;           float Last_Error;      float Prev_Error;      float Sum_Error;        }PIDStruct;  你好，用这种方法编译后，仍然不能解决

user: user-3
content: #pragma once typedef struct     {   	float PID_Target;      float PID_Measure;     float PID_Kp;        float PID_Ki;          float PID_Kd;       	float Error;           float Last_Error;      float Prev_Error;      float Sum_Error;        }PIDStruct;
user-0 提问: C++

回复:
user: user-1
content: 顺便说一下这是c语言板块，应该有c++板块，尽管两个语言大相径庭

user: user-1
content: 代码仅供参考，这是一行一个的  #include<iostream> using namespace std; void pr(int x) { 	int i,j; 	for(i=0;i<4*x+2;i++) 	{ 		if(x==i) 		{ 			cout<<">"; 		} 		else if(i==3*x+1) 		{ 			cout<<"<"; 		} 		else 		{ 			cout<<"-"; 		} 	} 	cout<<endl; } int main() { 	int x=0; 	while(x<=1||x>=100) 	cin>>x; 	pr(x); 	return 0; }  结果 运行环境：g++ 编辑环境：sources insight
user-0 提问: 卫星定位差分定位数据处理软件开发

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 关于PTA中用C语言编写“出生年”这个题目，为何有两个测试点不能通过

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

user: user-0
user-0 提问: 求教！

回复:
user: user-1
content: 如果是--a那就是你想要的10了。但是这个是a--;所以输出的是a--的值。

user: user-2
content: 引用 楼主 DONOT_LAUGH的回复:#include<stdio.h> int main() { 	int a; 	scanf("%d",&a); 	if(a++>10) 		printf("%d\n",++a); 	else  		printf("%d\n",a--); 		return 0;     return 0; } 运行程序时从键盘输入10，输出为什么是11不是10？a++>10的意思不是先用a=10和10比较吗？ 这里拐了几个弯，区别a++,++a，a++是先输出，后相加，而++a是先相加，后输出。首先，10不大于10，条件不满足 ，但a后加1了，就是11了。然后再输出a--，根据之前说的，先输出后运算。所以是11

user: user-3
content: if (a++ > 10)  a++的返回值是a原本的值，所以是10，所以这个if不成立，会执行else语句，但是a实际上已经变成了11，else中a--的返回值也是a原本的值，所以是11； 记住一点，a++返回a原本的值，++a返回a加1后的值