Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求助，如何使用C语言分割MP3文件，并还原

回复:
user: user-1
content: https://jingyan.baidu.com/article/922554468eea6a851748f447.html?st=&net_type=&bd_page_type=1&os=&rst=

user: user-2
content: 方法一：mp3容错性比较高的，你直接将mp3文件五等分应该也是可以放的（没试过，感觉应该可以） 方法二：用ffmpeg命令行操作https://blog.csdn.net/qingfenglu/article/details/78252131 方法三：解码分割再编码，需要使用ffmpeg库或者其它mp3编解码器  难度从低到高
user-0 提问: 各位前辈，请教一下。找出两组字符中的相同字符和字符数，怎么处理。

回复:
user: user-0
content: 没问题了，谢谢啦~~~

user: user-1
content: s3赋值的位置改一下。如下：  #include <stdio.h> #include <math.h> #include <string.h>  int main(int argc,char *argv[]) { 	char s1[50]={"\0"}; 	char s2[50]={"\0"}; 	char s3[50]={"\0"};  	printf("\nplease input s1:"); 	scanf("%s",s1); 	printf("\nplease input s2:"); 	scanf("%s",s2); 	int len1=strlen(s1); 	int len2=strlen(s2);  	int i,j,n,find; 	n=0;find=0; 	for (i=0;i<len1;i++) 	{ 		int record_n = n; 		for (j=0;j<len2;j++) 		{ 			if(s1[i]==s2[j]) 			{ 				n++; 			} 		}  		if (n > record_n) // 如果n比一开始记录时大了，说明找到了相同的，存储到s3中 		{ 			s3[find]=s1[i]; 			find++; 		} 	}  	if(i==len1&&find>0) 	{ 		printf("\n找到相同字符数%d",n); 		printf("\n相同字符为%s\n",s3);  	} 	if(find==0) 	{ 		printf("\n无相同字符\n"); 	} 	return 0; }
user-0 提问: 编写问题

回复:
user: user-0
content: 为什么少了if (i == (int)sqrt(a) +1)   if (i == (int)sqrt(b) +1) 他们求出来的组合就有不是素数的数了                       那这个问题喃

user: user-1
content: 引用 4 楼 qq_42076842 的回复:多判断一个是判断哪个 不是多判断一个，而是判断i <= sqrt(a)；为假时的一种情况就是i >sqrt(a)；和i == (int)sqrt(a) + 1;等价；

user: user-0
content: 为什么少了if (i == (int)sqrt(a) +1)   if (i == (int)sqrt(b) +1) 他们求出来的组合就有不是素数的数了

user: user-0
content: 多判断一个是判断哪个

user: user-2
content: Finding prime numbers - Kenneth Haugland  Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

user: user-3
content: 为提高效率，只需要寻找到sqrt(a) ，超过时已经不需要再检验了  sqrt得到的是浮点数，这里会转换成int，也就是舍去小数部分，+1相当于多判断一个

user: user-1
content: sqrt是求平均值。 因为若i > sqrt(a);则是素数。因此i == sqrt(a) + 1;和i > sqrt(a)是同等意思的。 当然，i == sqrt(a) + 1完全可以用i > sqrt(a)来代替
user-0 提问: 求助 c链表问题

回复:
user: user-1
content: #include "stdafx.h" #include "stdlib.h"   struct Book {     char bookname[50];     char author[50];     struct Book *next; }; // 创建书籍结构   void getInput(struct Book *book) {     printf("Please input the Bookname!\n");     scanf_s("%s", book->bookname, 50);     printf("Please input the author!\n");     scanf_s("%s", book->author, 50); } //书名作者 输入函数   void addbook(struct Book **phead) {     struct Book *book; //创建一个局部Book类型指针      book = (struct Book *)malloc(sizeof(struct Book));//为新书分配新空间     if (!book) {         printf("Error malloc.exe has failed!\n");         exit(1);     } //校验是否分配失败      getInput(book); //录入信息      //为头指针和末指针分配地址     if (!(*phead))     {         *phead = book;         book->next = NULL;     }     else     {         book->next = *phead;         *phead = book;         /*         Book *temp = p;         p = book->next;         book->next = temp;         */     } }  void showbooks(struct Book *phead)//查看已录入书籍 {     struct Book *book = phead;      while (book)     {         printf("The bookname is %s , the author is %s \n", book->bookname, book->author);         book = book->next;     }  }  void release(struct Book *phead) //释放内存 {     struct Book *p = phead, *q;      while (p) {         q = p->next;         free(p);         p = q;     }     /*     while (p != NULL)     {         free(p);         p = p->next;     }     */  }  int main() {     Book *library= NULL;//头指针      while (1)     {         printf("Do you want to add a new book? Y/N\n");         if (getchar() == 'Y')         {             addbook(&library);             getchar();             continue;         }         else             break;     };//输入     while (1)     {         if (library)             getchar();         printf("Do you want to view your books?");         showbooks(library);          if (getchar() == 'Y')             continue;         else             break;     }//查看      release(library);//释放     library = NULL;     return 0; }  参考一下吧 注意scanf_s和scanf是不同的，对于字符串需要添加字符串的长度（如上的代码）； 添加函数有问题，请对比代码找一下原因； 释放函数也是有问题，建议对比代码

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
user-0 提问: 权限问题

回复:
user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:百度搜“ld returned 1exit 1 status” 没有关于我的问题的啊

user: user-1
content: 比如你收到警告信息:warning 1234:xxx 你就在百度搜 "1234:xxx"

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:百度搜 "你的警告提示信息" 谢谢老师 但还是没搜到 请具体发截图或具体网址过来 谢谢

user: user-1
content: 百度搜 "你的警告提示信息"

user: user-1
content: 百度搜“ld returned 1exit 1 status”

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:https://www.baidu.com/s?wd=非Administrator的标准用户和代理服务器上在主服务器和管理员用户上安装的编译器  编译器是能运行 可代码不管怎莫写都会出警告 和ld returned 1exit 1 status

user: user-1
content: https://www.baidu.com/s?wd=非Administrator的标准用户和代理服务器上在主服务器和管理员用户上安装的编译器

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:百度搜相关关键字。 没搜索着

user: user-1
content: 百度搜相关关键字。
user-0 提问: 谁帮我解释下题干中的这些概念

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 阅读下列说明和C代码，回答问题1至问题3，将解答写在答题纸的对应栏内。 【说明】 用两台处理机A和B处理n个作业。设A和B处理第i个作业的时间分别为ai和bi。由于各个作业的特点和机器性能的关系，对某些作业，在A上处理时间长，而对某些作业在B上处理时间长。一台处理机在某个时刻只能处理一个作业，而且作业处理是不可中断的，每个作业只能被处理一次。现要找出一个最优调度方案，使得n个作业被这两台处理机处理完毕的时间（所有作业被处理的时间之和）最少。 算法步骤： （1）确定候选解上界为R短的单台处理机处理所有作业的完成时间m， 点击查看大图 （2）用p（x,y,k）=1表示前k个作业可以在A用时不超过x且在B用时不超过y时间 内处理完成，则p（x,y,k）=p（x-ak,y,k-1）||p（x,y-bk,k-1）（表示逻辑或操作）。 （3）得到最短处理时问为min（max（x，y））。 【C代码】 下面是该算法的C语言实现。 （1）常量和变量说明 n: 作业数 m: 候选解上界 a: 数组，长度为n，记录n个作业在A上的处理时间，下标从0开始 b: 数组，长度为n，记录n个作业在B上的处理时间，下标从0开始 k: 循环变量 p: 三维数组，长度为（m+1）*（m+1）*（n+1） temp: 临时变量 max: 最短处理时间 （2）C代码 include<stdio.h> int n, m; int a[60], b[60], p[100][100][60]; void read(){ /*输入n、a、b，求出m，代码略*/} void schedule(){ /*求解过程*/ int x,y,k; for（x=0；x<=m；x++）{ for(y=0；y<m；y++）{ （1） for（k=1；k<n；k++） p[x][y][k]=0； } } for（k=1；k<n；k++）{ for（x=0；x<=m；x++）{ for（y=0；y<=m；y++）{ if（x - a[k-1]>=0） （2） ； if（（3） ）p[x][y][k]=(p[x][y][k] ||p[x][y-b[k-1]][k-1]); } } } } void write(){ /*确定最优解并输出*/ int x，y，temp，max=m; for（x=0；x<=m；x++）{ for（y=0;y<=m;y++）{ if(（4） ）{ temp=（5） ； if（temp< max）max = temp; } } } printf("\n%d\n"，max）, } void main(){read();schedule();write();} 【问题1】 （9分） 根据以上说明和C代码，填充C代码中的空（1）～（5）。 【问题2】（2分） 根据以上C代码，算法的时间复杂度为（6）（用O符号表示）。 【问题3】（4分） 考虑6个作业的实例，各个作业在两台处理机上的处理时间如表4-1所示。该实例的最优解为（7），最优解的值（即最短处理时间）为（8）。最优解用（x1,x2,x3,x4,x5,x6）表示，其中若第i个作业在A上赴理，则xi=l，否则xi=2。如（1，1，1，1，2，2）表示作业1，2，3和4在A上处理，作业5和6在B上处理。 点击查看大图 请帮忙给出正确答案和分析，谢谢！
user-0 提问: 归并排序在两万数据量时机子崩溃

回复:
user: user-1
content: 引用 2 楼 cfjtaishan 的回复:建议贴出你的归并排序逻辑 你用捅排试试

user: user-2
content: 建议贴出你的归并排序逻辑

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

user: user-4
content: 应该不是内存问题
user-0 提问: 请问C语言写的类，除了在参数中传入对象指针，还有别的办法能又能和方法挂钩，又省去这么写的做法吗？

回复:
user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:https://bbs.csdn.net/topics/390467268  厉害，长见识了。

user: user-0
content: 引用 5 楼 u010165006 的回复:楼主研究这个亚，个人觉得买本100多页的C++书，就可以代替楼主的需求了，C++可以当做C用的，还可以用类。  嗯嗯，果然还是直接学C++才是正道。

user: user-0
content: 引用 4 楼 hdt 的回复:你可以加一个this指针指向他自己 引用 4 楼 hdt 的回复:你可以加一个this指针指向他自己   可以指针还是要和对象关联，还是没有办法省掉object指针

user: user-1
content: https://bbs.csdn.net/topics/390467268

user: user-1
content: 百度搜“Windows下的grep、sed、awk”

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:请牢记：源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要，重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。  意思是你程序结构看上去再合理，再简洁，也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错，更方便修改，出错了更容易找到哪里出错和具体出错的原因，更容易改正错误。  试对比 图书馆（对图书的分类够结构化了吧） 和 搜索引擎（可看作是扁平化任何结构数据，仅支持全文检索） 哪个处理信息更方便、更高效。  所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。  结构越复杂，越难修改，越难除错。 有时（甚至大多数时候），看上去越合理、越简洁的代码，运行起来性能越差，出错时查找原因越难，找到出错原因后改正越费劲。  程序员要做的不是尽力避免错误，而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误，“快速的失败”远胜过“预防错误”。Fred George  前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题；他觉得前同事们应该用这些问题来问自己；实际上不管在哪里工作的开发者们都应该经常问问自己这些问题： ◆“要保证这个问题不会再出现，我该怎么做？” ◆“要想少出些Bug，我该怎么做？” ◆“要保证Bug容易被修复，我该怎么做？” ◆“要保持对变化的快速响应，我该怎么做？” ◆“要保证我的软件的运行速度，我该怎么做？” 如果大多数团队都能不时问一下自己，必定会从中得益，因为这些都是真正强而有力的问题。   我查了下，grep、sed、awk都是Unix/Linux下的工具。。我用Windows怎么办

user: user-1
content: 请牢记：源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要，重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。  意思是你程序结构看上去再合理，再简洁，也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错，更方便修改，出错了更容易找到哪里出错和具体出错的原因，更容易改正错误。  试对比 图书馆（对图书的分类够结构化了吧） 和 搜索引擎（可看作是扁平化任何结构数据，仅支持全文检索） 哪个处理信息更方便、更高效。  所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。  结构越复杂，越难修改，越难除错。 有时（甚至大多数时候），看上去越合理、越简洁的代码，运行起来性能越差，出错时查找原因越难，找到出错原因后改正越费劲。  程序员要做的不是尽力避免错误，而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误，“快速的失败”远胜过“预防错误”。Fred George  前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题；他觉得前同事们应该用这些问题来问自己；实际上不管在哪里工作的开发者们都应该经常问问自己这些问题： ◆“要保证这个问题不会再出现，我该怎么做？” ◆“要想少出些Bug，我该怎么做？” ◆“要保证Bug容易被修复，我该怎么做？” ◆“要保持对变化的快速响应，我该怎么做？” ◆“要保证我的软件的运行速度，我该怎么做？” 如果大多数团队都能不时问一下自己，必定会从中得益，因为这些都是真正强而有力的问题。

user: user-2
content: 楼主研究这个亚，个人觉得买本100多页的C++书，就可以代替楼主的需求了，C++可以当做C用的，还可以用类。

user: user-3
content: 看错题目了，以上回答请忽视

user: user-3
content: 你可以加一个this指针指向他自己

user: user-3
content: 可以呀，代码太长没看 你的lengh函数可以 size_t string::length()const{   return this->length; }

user: user-0
content: 我觉得这样写很麻烦: printf("字符串长度: %d\n", str->length(str)); 能不能直接这样: printf("字符串长度: %d\n", str->length());
user-0 提问: 写了一个简单的链表函数，但是没输出，改了一下红色的i的类型为int就有输出了，一直搞不明白怎么回事

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  struct link {     char name[20];     int num;     struct link *next; };  struct link* creatLink() {     struct link*p;     struct link*q;     struct link*head;     int i;     p = (struct link*)malloc(sizeof(struct link));     printf("please enter the name and number\n");     scanf("%s %d",p->name,&(p->num));      head = p;     q = head;     p->next = NULL;     printf("if you want to end up entering data,please enter 1,else enter 2\n");     scanf("%d",&i);     while(i==1)     {         p = (struct link*)malloc(sizeof(struct link));         printf("please enter the name and number\n");         scanf("%s %d",p->name,&(p->num));          q->next = p;         q = p;         printf("if you want to continue enter data,please enter 1,else enter 2\n");         scanf("%d",&i);      }     p->next = NULL;     return head;  }  void printLink(struct link* head) {     struct link* p;     p = head;     while(p)     {         printf("%s\t",p->name);         printf("%d\n",p->num);         p= p->next;     } } int main() {     struct link* head;     head =creatLink();     printLink(head);     return 0; }   参考一下吧  没有输出，那么是程序在while中死循环了吗？输入需要和格式相匹配

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

user: user-3
content: 因为在红色语句的子函数的第二个scanf是以%d的形式输入的，把char改成int数据类型就相符合了

user: user-4
content: 不是有标准库吗？为什么要自己写？

user: user-5
content: 我在vs2013中调试的时候会出现Run-Time Check Failure #2- Stack around the variable "i" was corrupted . 可能是i只占一个字节的内存，但是你用%d接收的时候，其他三个字节的内存也被影响了，但是用vs接着输出时是对的。
user-0 提问: 链表建立后的输出问题？、？

回复:
user: user-1
content: p2->next=p1; p2 = p1;    //不移动p2的话链表不会增长

user: user-2
content: p2的next指向p1的语句后面，将p1赋给p2应该就解决了

user: user-2
content: 每次输入链表节点的时候都通过p2改变了head指针的next。你只用把head指针的next改变一次
user-0 提问: 求水仙花数用while，为什么没有输出结果，求大佬修改。

回复:
user: user-1
content: 这个只能求三位数的水仙花数。do{ 		i=n/100; 		j=n/10%10; 		k=n%10; 		if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) 		{ 		printf("%5d",n); 		break; 		} 		n++; 	 		} while(n<1000);

user: user-0
content: 额，请问如果这道题用do.......while和break语句编写要怎么写

user: user-2
content: #include<stdio.h> main() { int x,a,b,c; for(x=100;x<1000;x++) {a=0.01*x;b=0.1*x-a*10;c=(x-100*a-10*b); if(x==a*a*a+b*b*b+c*c*c) printf("%5d\t",x); } }   用自己的方法写了一下，你看看可不可以

user: user-3
content: n=100 不是n==100 第二个不是赋值语句

user: user-4
content: n没有赋初始值

user: user-0
content: 额，如果要用do......while和continue语句，那个continue插在哪？

user: user-5
content: 错误： 1.n==100有错，赋值语句用一个等号就可以，判断的时候需要两个等号 2.i*100+j*10+k==i*i*i+j*j*j+k*k*k可以简写为n==i*i*i+j*j*j+k*k*k 3.你写的程序只能是输出三位数的水仙花数 4.修改之后的代码仍有错误是因为return 0;上面多了一个} 下面是输出所有三位数水仙花数的代码:

user: user-0
content: #include<stdio.h> int main() { 	int i,j,k,n; 	printf("number is:"); 	n=100; do{         i=n/100;         j=n/10%10;         k=n%10;         if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)         {         printf("%5d",n);         break;         }         n++;               } while(n<1000); 	} 	return 0; } 按照大佬写了，但是有错，说那个return 和最后的}有问题？
user-0 提问: 问一下关于c自定义函数的问题

回复:
user: user-1
content: 第一个10是main函数内的第一条打印的输出； 第二个10是sum函数内的第一条打印的输出。 依次输出。  程序是按顺序执行的。

user: user-2
content: 顺序执行，你是觉得  int sum(int, int);会执行？

user: user-3
content: c = sum( a, b);   这里a的实参是10, 那个全局没用， 局部优先

user: user-4
content: 为什么你会觉得是第二种的输出方式呢，，，，程序按顺序输出就应该是第一种啊

user: user-5
content: 输出第一个a之后，执行sum函数输出a，b，最后才输出c。
user-0 提问: 循环之后为什么会多出一句？

回复:
user: user-1
content: 回车换行也是一个字符

user: user-2
content: 因为scanf("%c", &xx);是匹配字符，换行符也是字符。因此也是和%c相匹配的。因此，第一个是匹配'7'，第二个匹配的就是'\n'。

user: user-3
content: 你在while循环外面和scanf("%c",&ch)之间加上getchar()就好了，原因是在编译的时候当你输入7时，你同时敲入回车键，而getchar()正好接收一个字符回车，就不会出现你上面那种情况了

user: user-4
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-5
content: 忽视了换行符

user: user-6
content: 同意楼上的

user: user-7
content: 因为你输入7，按下回车，程序会读取两个字符，一个是7，一个回车，所以会出现那个打印
user-0 提问: [求助]同一个文件夹下的两个文件同时编译时出错

回复:
user: user-1
content: 注意，min.c中定义的函数名也是max，函数重名了，重复定义。  建议添加一个头文件，比如：  #ifndef _HELLO_H_ #define _HELLO_H_  int max(int, int); int min(int, int);  #endif 并在hello.c中引入hello.h。 然后再试一下

user: user-2
content: hello.c 中加上max和min的声明（原型）
user-0 提问: VC写一个截图UDP广播小程序，UDP广播不是说很块吗？为什么我的这么慢？

回复:
user: user-0
content: 引用 10 楼 yiyefangzhou24 的回复:你确定能发出去？缓冲区满了会返回失败吧？确定能发送，已经实现接收现实。就是慢了点。

user: user-1
content: 引用 6 楼 TheDaXiang 的回复:引用 2 楼 cfjtaishan 的回复:是局域网吗？https://download.csdn.net/download/thedaxiang/10422229我的项目上传了，最少必须设置了一分。不好意思。帮忙看看。 建议贴出代码，或者至少是关键性（与问题相关的）代码。给你解决问题还要花费这个吗？

user: user-0
content: 引用 3 楼 zhouqunhai 的回复:能贴全代码看看吗https://download.csdn.net/download/thedaxiang/10422229我的项目上传了，最少必须设置了一分。不好意思。帮忙看看。

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:是局域网吗？https://download.csdn.net/download/thedaxiang/10422229我的项目上传了，最少必须设置了一分。不好意思。帮忙看看。

user: user-0
content: 引用 1 楼 user-5 的回复:异步发送试试。https://download.csdn.net/download/thedaxiang/10422229我的项目上传了，最少设置了一分。不好意思。帮忙看看。

user: user-2
content: 用tcp发送8M数据也不至于1分钟啊。。。。。。。贴代码吧

user: user-3
content: 能贴全代码看看吗

user: user-1
content: 是局域网吗？

user: user-0
content: 引用 8 楼 cfjtaishan 的回复:引用 6 楼 TheDaXiang 的回复:[quote=引用 2 楼 cfjtaishan 的回复:] 是局域网吗？https://download.csdn.net/download/thedaxiang/10422229我的项目上传了，最少必须设置了一分。不好意思。帮忙看看。 建议贴出代码，或者至少是关键性（与问题相关的）代码。给你解决问题还要花费这个吗？[/quote]不知道哪里有问题，都不知道贴哪里。已改百度云，当时没想到。https://pan.baidu.com/s/13D_A3eAzi1n7XGIGLLNggw

user: user-4
content: 你确定能发出去？缓冲区满了会返回失败吧？

user: user-5
content: 异步发送试试。
user-0 提问: 大一萌新求问，大神路过扫一眼，解答下啊啊啊

回复:
user: user-1
content: if判断有问题，把它改成赋值号==

user: user-2
content: 引用 3 楼 dark9527 的回复:if判断有问题，你写的是赋值，可以写成if(c==s[i])这样编译器在编译的时候可以检测出来。 这样也是检测不出来的。因为c是变量。若c是常量，因为常量不能做左值，编译器可以检测出来。但是c是变量，所以也是检测不出来的。

user: user-3
content: if判断有问题，你写的是赋值，可以写成if(c==s[i])这样编译器在编译的时候可以检测出来。

user: user-4
content: “=”   "==" 你这个函数会输出啊 全空“       ” 多次操作getchar gets 检查下是否获取正常，刷新下

user: user-2
content: if判断有问题，是s[i] == c（判断表达式）而不是s[i] = c赋值表达式。 另外，确认一下getchar();得到字符是否是你输入的字符，只需要打印一下就可以判定。

user: user-3
content: 引用 4 楼 cfjtaishan 的回复:[quote=引用 3 楼 dark9527 的回复:] if判断有问题，你写的是赋值，可以写成if(c==s[i])这样编译器在编译的时候可以检测出来。 这样也是检测不出来的。因为c是变量。若c是常量，因为常量不能做左值，编译器可以检测出来。但是c是变量，所以也是检测不出来的。[/quote] 疏忽了。4楼说的对。没有仔细想。
user-0 提问: C怎么做获取文件路径。

回复:
user: user-1
content: 程序中生成路径再赋值给宏定义，这样是没办法办到的。宏定义不是运行时生成的，而是编译阶段就确定的。建议使用字符数组保存文件路径。

user: user-2
content: 引用 1 楼 lianshaohua 的回复:#define F  这条语句是在预处理阶段完成的，运行的时候改不了值的 生成带#define F的.h或.c/cpp文件后，调用编译链接重新生成后再运行。 参考代码生成（codegen）技术。

user: user-3
content: #define F  这条语句是在预处理阶段完成的，运行的时候改不了值的
user-0 提问: 大神菜鸟都看看啊,两种if else写法,代码逻辑部分的写法就应该像二叉树一样优雅严密,我觉得第一种像二叉树啊,为什么你们觉得第二种好呢?没分分,我只剩下C币了

回复:
user: user-0
content: 还有其他大神, 我就不一一回复了. 我特别喜欢你们,你们都好厉害. 我特别佩服你们, 什么时候我能想你们这么优秀就好了.

user: user-0
content: 引用 9 楼 DelphiGuy 的回复:串联的if else，应该把出现概率大的情况放在前面 大神,我特别喜欢你.你和赵老师一样牛.我特别佩服你.

user: user-0
content: 赵老师,我有什么问题都希望能得到你的指点,心里特别高兴,这两天生病了.大家都保护好身体.

user: user-1
content: https://bbs.csdn.net/topics/380157851

user: user-1
content: 下面两种if语句的书写格式哪个比较好？为什么？ ①if (a>1 && a<5 && b>3 && b<7) ②if (1<a && a<5           && 3<b && b<7)  ②较好，两个变量分开，变量范围一目了然1<a<5，3<b<7，且数字从左到右从小到大排列

user: user-2
content: 第一种要多打一对大括号，缩进，不爽。为啥这么执着2呢

user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-3
content: 引用 9 楼 DelphiGuy 的回复:串联的if else，应该把出现概率大的情况放在前面  CPU分支预测？

user: user-4
content: 如果想了解更深，考虑学习汇编语言，毕竟所有的编译器都需要将高级语言编译成机器码才可以执行。 不过就你的这两种方式，编译成机器码而言，应该是一样的。你可以试着编译一下，看看CPU中，翻译成汇编是如何执行的。 大意就是如下： 比较（最开始的if） 如果不满足就跳走，当然了满足就继续执行，到最后时也是跳走。 至于你是 else {     if()     {}     else     {} } 还是 else if() {} else {} 这里都是一条比较语句，就是你的条件比较。 如果不满足就跳走（跳到else那里执行），满足就继续执行，完毕后跳走即可。  当然不同的编译器可能编译成不同的机器语言，但是这个简单的条件，应该没啥大区别。

user: user-5
content: 串联的if else，应该把出现概率大的情况放在前面

user: user-6
content: 写的很细。。。。

user: user-7
content: 只要逻辑见解，易懂就好。嵌套不易过多，过多会使理解变得困难。

user: user-8
content: 无谓好坏，通常根据语义，第2种更倾向表达几个分支都是并列关系，而第1种倾向表达后面的分支是前面的一个子情况，虽然两种实际效果是一样的，但根据不同情况你可以选择更容易理解的写法

user: user-3
content: 研究精神值得鼓励！虽然这个问题看起来很小。

user: user-0
content: 我写了六段代码,运行结果是,两种if else的写法,是一样的. 我觉得第一种更像二叉树,更清晰. 可是好多人说第二种if else 更清晰. 难道是我错了? 可能有人要说,研究这有毛的意义,有毛的区别? 代码首先要写的逻辑严密,不留死角.才有健壮性,才不会奔溃啊. 还有,代码要写给自己和别人看,写的规范,严谨点好啊.
user-0 提问: 为什么在这设得是a[3][3],可是我只能输入两个字符

回复:
user: user-1
content: a[3][3]是每次输入2个字符，因为输入多余2个字符就会越界。最后一个字符空间用于存储'\0'字符串结束标识。但是可以连续输入3次，一次最多输入2个字符。

user: user-2
content: 末尾不是还有一个'\0'吗。
user-0 提问: 求助：为什么这个霍夫变换vc代码运行时代开bmp文件失败啊？

回复:
user: user-1
content: 程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。
user-0 提问: 对指针型字符数组的打印问题

回复:
user: user-1
content: #include <stdio.h> #include <string.h>   void week(int, char *); // 此函数用于将星期几赋给字符数组 int main() {     int d; // 储存输入的数字     char day[16] = {0}; // 字符数组day用于储存数字对应的星期几      printf("Please enter a number between 1 and 7: ");     scanf("%d", &d);     //void week(int d,char *day[10]);      week(d, day);      printf("%s\n", day);      return 0; }  void week(int d,char day[]) {     switch (d) {         case 1:             //strcpy("*day[10]","Sunday");             strcpy(day, "Sunday");             break;         case 2:             //strcpy("*day[10]","Monday");             strcpy(day, "Monday");             break;         case 3:             //strcpy("*day[10]","Tuesday");             strcpy(day, "Tuesday");             break;         case 4:             //strcpy("*day[10]","Wednesday");             strcpy(day, "Wednesday");             break;         case 5:             //strcpy("*day[10]","Thursday");             strcpy(day, "Thursday");             break;         case 6:             //strcpy("*day[10]","Friday");             strcpy(day, "Friday");             break;         case 7:             //strcpy("*day[10]","Saturdays");             strcpy(day, "Saturdays");             break;         default:             printf("\aYou have entered an wrong number!\n");             break;     } } 参考一下吧  注意函数调用的方式，以及数组的意义和使用，字符串的处理的方法。基本功不扎实，建议多练习和学习课本知识。

user: user-2
content: 几个问题： 1、定义char *day[10]时，表示的是字符指针数组，即数组的每一个元素都是字符指针，此时必须动态分配内存。这里的字符数组应该定义为  char day[10];  2、函数传入字符指针时，应为char *，它表示传入一块字符类型的内存的首地址，可以在地址中存入内容。 3、输出时，之前已经定义字符数组为char day[10]，则这里直接输出day就好了，即：  printf("%s",day);  4、strcpy的第一个参数是字符指针，用双引号就失去指针的意义了，正确写法是：  strcpy(day,"Sunday");

user: user-3
content: 字符数组约等于字符串，字符指针数组约等于字符串数组，前者是一级指针，后者是二级指针，概念搞混了。
user-0 提问: 这个代码无法控制移动，求教是怎么回事

回复:
user: user-0
content: 我用的是codeblocks， 用Dev C++也能运行 While循环里的声明要改成调用

user: user-1
content: 是否是软件版本问题？楼主是用什么版本的软件

user: user-0
content: 最后的函数调用把void给删除了，删除updateWithoutInput函数就可以用了，因为这是我初次在CSDN上发帖，很多东西打错了，具体的你可以看我后面的飞机大战帖子，那个比这个完善

user: user-2
content: 把while循环里的两个函数声明改成调用。
user-0 提问: 和不能共存问题

回复:
user: user-1
content: 我之前在哪里看到过在使用wireless.h是也会出现这个问题，好像他是把include Linux/if.h屏蔽了

user: user-2
content: 是不是内核版本不一致呢，内核一直在更新，部分结构体也可能跟着变化。代码在移植过程中需要关注一下结构体的变化

user: user-3
content: 是的，我遇到過類似的問題，龍芯的系統。 應該是龍芯對頭文件做過一些升級，以便在基礎版本上支持一些更新的功能。 但是新加入的代碼需要的結構體又無法全部滿足，結果就跟你一樣了。

user: user-0
content: 引用 1 楼 hzy_76 的回复:不能并存是因爲有結構體重複定義了吧，這應該是版本不一致引起的。我的做法一般是直接定義結構體，抛棄其中一個頭文件。 意思是把一个头文件里面的结构体提取出来直接用？

user: user-3
content: 不能并存是因爲有結構體重複定義了吧，這應該是版本不一致引起的。我的做法一般是直接定義結構體，抛棄其中一個頭文件。
user-0 提问: 控制步进电机转动指定步数的编程问题

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 楼主问题解决了吗？

user: user-3
content: 不论你是FOR出来的，还是BREAK出来的，出来后都没有代码了，然后乱跑，于是就碰巧执行到RST后第一条代码了，然后程序重跑一遍，反复重跑。

user: user-4
content: 程序没有while（1）循环，有可能跑完复位又跑一次

user: user-5
content: 在for循环里面i到不了200，在到200的时候for循环的条件不满足，不进入循环了，所以break语句执行不到。

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

user: user-0
content: 引用 2 楼 dark9527 的回复:在for循环里面i到不了200，在到200的时候for循环的条件不满足，不进入循环了，所以break语句执行不到。 哦哦,我明白了!谢谢!我改一下

user: user-0
content: 那我使用延时程序一样两层for循环可以吗
user-0 提问: codeblocks怎样查看形参数组的值

回复:
user: user-1
content: 数组作为参数传递会退化为指针，f1参数实际是int*，是指针而不是数组，f1中没法知道数组大小，自然也不会按数组方式显示

user: user-2
content: 因为此时a就是一个指针，所以只能看它的值（一个地址） 可以看它指向的内容，打开Memory窗口，地址输入a即可 不过只能整型数据能看清，浮点的就算了

user: user-3
content: 作为形参这个类型会退化成指针，调试时也仅仅把它当做一个指针而已 VS也仅能查看第一个值
user-0 提问: 关于C语言指针的表述

回复:
user: user-1
content: 让b指向a的地址，是对b赋值  *b = 3 才是对*b赋值

user: user-2
content: b是一种char类型指针的变量，它保存的是一个指针值。在您的例子中，它保存的是a的地址，也就是说，它的值是a的地址。

user: user-0
content: 第二行是不是多了个*号？ unsigned char* b = &a 把变量a的地址赋值给*b，我的理解是这样，但是不懂为什么知乎上面这里的意思是吧变量a的地址赋值给b？

user: user-0
content: 这里定义了*b，那么第二行不应该是这样吗？ unsigned char* b = &a;  这里为什么前面会多了一个*号？ 不是应该是unsigned char b=&a;

user: user-0
content: unsigned char* b = &a; 这句话的意思是：把a的地址赋值给*b还是b？
user-0 提问: 请教一个关于C语言数组的问题

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

user: user-2
content: 积分能变不！！

user: user-3
content: for (i=0;i<n;n++) {         for (j=0;j<n;j++) {             for(k=0;k<n;k++) {                 if (i==j||i==k||j==k)                     continue;                 count=judge(a[i],a[j],a[k]);             }         }     } 注意你的第一层循环，循环变量增加怎么变成n++了呢？是不是应该是i++呢

user: user-4
content: count 每次都会更新值但并不会储存，用static int定义 count应该就可以..变量生存期问题

user: user-0
content: [code=c][    for (i=0;i<n;n++) {         for (j=0;j<n;j++) {             for(k=0;k<n;k++) {                 if (i==j||i==k||j==k)                     continue;                 count=judge(a[i],a[j],a[k]);             }         }     }/code] 就是关于这一段的从数组a中任取三个数，上述方法是不是有问题？具体出在哪呢？

user: user-5
content: 建议学习一下变量的生存期

user: user-0
content: 引用 2 楼 hdt 的回复:你要做什么？ 有若干个长度不等的木条，我们要把其中的木条，尽可能多的组装成三角形的架子，当然，有些木条组合起来，不一定能组成三角形。    输入格式:  第一行输入n  第二行输入n个木条的长度：a1   a2    a3………an    输出格式：  可最多组成三角形的个数    输入样例：  3[回车]  3[空格]4[空格]5[回车]    输出样例：  1[回车]

user: user-5
content: 你要做什么？
user-0 提问: 麻烦各位前辈帮我检查下这道题的错误~ HDU 1496 枚举求多项式解的数量

回复:
user: user-1
content: scanf("%d%d%d%d",&a,&b,&c,&d) 注意scanf不一定是返回0,1.若成功，scanf返回的是输入项目的个数，比如上面的代码，若输入格式正确，则返回4，若有3个格式正确则返回3. 因此判断scanf的返回值不能用～取反，因为有可能返回2， 3， 4

user: user-2
content: 这题没啥难度，唯一有点技巧的地方是利用对称性把测试范围从16亿缩小到1亿：  #include <stdio.h>  int main() {   int a, b, c, d;   while (scanf("%d%d%d%d", &a, &b, &c, &d) != EOF)   {     int s = 0;     if (!((a > 0 && b > 0 && c > 0 && d > 0) || (a < 0 && b < 0 && c < 0 && d < 0)))       for (int i = 1; i < 101; i++)       for (int j = 1; j < 101; j++)       for (int k = 1; k < 101; k++)       for (int w = 1; w < 101; w++)         if (!(a * i * i + b * j * j + c * k * k + d * w * w)) s++;     printf("%d\n", s * 16);   }    return 0; }
user-0 提问: 大神帮忙看个程序

回复:
user: user-1
content: #include"stdio.h"  void sort(int num[10]);  int main(){      int num[10]={12,35,89,576,3958,0,34,8,6,1};     int i;      for(i=0;i<10;i++)         printf("%d\n",num[i]);     printf("\n");     sort(num);     for(i=0;i<10;i++)         printf("%d\n",num[i]);   //是num[i]，不是num     return 0; }  void sort(int num1[]){     int i,j,t;     for(i=0;i<10;i++){         for(j=0;j<10;j++){             if(num1[i] > num1[j]){                 t=num1[i];                 num1[i]=num1[j];                 num1[j]=t;             }         }     } }

user: user-2
content: printf("%d\n",num);//不应该是printf("%d\n",num[i]);吗

user: user-3
content: printf("%d\n",num);这个编译器会报告警吧,楼主都不关注告警的么
user-0 提问: 不能正常输出

回复:
user: user-1
content: 你这个x，y的递增递减在哪里？ 还有你的矩阵是不是建的太小了点？ 但是目测你的显示问题与以上都无关。

user: user-2
content: cmd里的字符集的问题。。。。

user: user-3
content: #include <locale.h> setlocale(LC_ALL,"chs"); ?

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:#include <locale.h> setlocale(LC_ALL,"chs"); ?已经知道问题所在了，更新了win10预览版。是系统的问题，虚拟机里能正常输出

user: user-4
content: 数组怎么开这么点

user: user-5
content: 数组定义要大一点！这样的数组，一下子就溢出了，会出问题的。

user: user-0
content: 引用 1 楼 hzy_76 的回复:数组定义要大一点！这样的数组，一下子就溢出了，会出问题的。跟数组没关系吧，看我输出的第一句，他连正常输出字符都做不到，我在同学电脑上运行就是正常的

user: user-0
content: 引用 2 楼 weixin_41133154 的回复:数组怎么开这么点跟数组没关系吧，看我输出的第一句，他连正常输出字符都做不到，我在同学电脑上运行就是正常的

user: user-0
content: 跟数组没关系吧，看我输出的第一句，他连正常输出字符都做不到，我在同学电脑上运行就是正常的
user-0 提问: 为什么会多输出#？

回复:
user: user-1
content: #include <stdio.h> #include <ctype.h> #include <string.h>  #define MAX_CHAR_NUM   26  int main() {     char str[100];     int i;      scanf("%s", str); #if 1     i = 0;     while (str[i]) {         if (isupper(str[i]))             str[i] = (str[i] - 'A' + 3) % MAX_CHAR_NUM + 'a';         else if (islower(str[i]))             str[i] = (str[i] - 'a' + 3) % MAX_CHAR_NUM + 'A';         i++;     }     puts(str); #else     len = strlen(a);     for (i = 0; i < len; i++) {         if (isupper(str[i]))             str[i] = (str[i] - 'A' + 3) % MAX_CHAR_NUM + 'a';         if (islower(str[i]))             str[i] = (str[i] - 'a' + 3) % MAX_CHAR_NUM + 'A';     }     puts(str); #endif  #if 0     for (i = 0; i <= len; i++)     {         if (a[i] >= 'a' && a[i] <= 'z')             a[i] = a[i] - 32;         else             a[i] = a[i] + 32;     }     a[i] = '\0';     for (i = 0; i <= j; i++)     {         if ((a[i] >= 120 && a[i] <= 122) || (a[i] >= 88 && a[i] <= 90))             a[i] = a[i] - 23;         else a[i] = a[i] + 3;         printf("%c", a[i]);     } #endif     return 0; } 参考一下吧； 建议可以使用库函数isupper， islower。 另外，算法建议找到规律。对于字符，不建议使用数值，比如'A'用65表示。这样代码可读性不高。

user: user-0
content: 引用 2 楼 MonGo17 的回复:错误： 1.输入时，数组名代表数组的首地址，故&a应改为a 2.用for循环时，i是从0开始的故不应该循环到j,应改为for(i=0;i<j;i++) 3.a[i] = '\0';是错误的，这样就把最后一个字母改变了 正确的代码如下：  谢谢回答 关于那个a[i]=‘\0',之前也是遇到过一个问题，就是定义一个数组，因为vs不允许用变量输入赋值表示数组元素个数，就必须写一个比实际元素个数大的数字，但是，又不想让后边空着的元素全都变成零，那个'\0'不是表示结束符吗

user: user-2
content: 错误： 1.输入时，数组名代表数组的首地址，故&a应改为a 2.用for循环时，i是从0开始的故不应该循环到j,应改为for(i=0;i<j;i++) 3.a[i] = '\0';是错误的，这样就把最后一个字母改变了 正确的代码如下：

user: user-3
content: for (i = 0; i <= j; i++)    ===> for (i = 0; i < j; i++)
user-0 提问: 为什么char a[5]="hello"也可以？

回复:
user: user-1
content: char 是字符型变量可以存储字符,可容纳单个字符的一种基本数据类型 char a[5] char a[5] = {'h','e','l','l','\0'};后面更者“\0”占一个字节，每一个字母都是用单个字符表示，于是字母“o"没有地址存放 char a[5]="hello"是正确的代表一个字符串，是正确形式 能达到相同目的的方式还有 char *a[5] = "hello" 定义一个char类型指针a，*符号，在定义的语句中，表示声明了一个指针的类型.

user: user-2
content: 为什么人走铁道也可以？

user: user-0
content: ASCII码没有0，还是有点不清楚

user: user-0
content: 感觉6和7是矛盾，答主那个第2段话是说，比如char a[4]="abc",那 '\0' 就在a[3]上吗？@云海玉弓缘

user: user-3
content: 首先，C语言没有字符串变量，只有字符串常量，所以字符串变量的任务就交给字符数组解决了！ 字符串常量："qwer" 这是一个字符串常量，字符串常量会在结尾加一个结束符'\0'，所以这个字符串常量的实际长度为5 字符数组：char[5]; 1.首先，这个字符串数组的长度为5，这一定没问题：从c[0]到c[4]。 2.然后，这其中字符数组必须也有一个结束符号'\0'，它在最后一个有意义的字符之后的一个位置（如果有意义的字符是2个的话，结束字符就在a[2]上，如果有意义的字符是3个的话，结束字符就在a[3]上）  1.char[5]={'q','w','e','r'}(正确写法，末尾自动添加结束符) 2.char[5]={'q','w','e','r'.'t'};（错误写法，编译器不会报错，输出字符串数组名的时候结尾会有烫烫烫） 3.char[]={'q','w','e','r'};（错误写法，编译器不会报错，输出字符串数组名的时候结尾会有烫烫烫,因为并不知道字符串的长度，无法推断出结束符的位置，可以理解为编译器不那么智能） 4.char[]={'q','w','e','r','\0'};（正确写法，编译器可以推断出字符串结束符号的位置） 5.char[5]="qwer";（正确写法，末尾自动添加0） 6.char[5]={"qwer"}（正确写法，末尾自动添加0） 7.char[5]="qwert"（正确写法，末尾自动添加0） 8.char[5]={"qwert"}（错误写法，编译器会报错） 9.char[]="qwer"（正确写法，结尾自动添零，推断出字符串长度） 10.char[]={"qwer"}（正确写法，结尾自动添零，推断出字符串长度） 11.char[5]; a[0]='q' a[1]='w' a[2]='e' a[3]='r' (错误写法，编译器不会报错，输出字符串数组名的时候结尾会有烫烫烫)

user: user-4
content: 编译器不负责任呗
user-0 提问: 不明白程序的错误，请求支援

回复:
user: user-1
content: 多了个 if那多了个;

user: user-2
content: 这里面高手真多，楼上太强悍了

user: user-3
content: 你的程序没什么大错误，只是在那句if(str1[i]!='*')后多了个分号，所以条件判断其实没生效，后面那段赋值語句一直在执行，所以会原样输出。 下面是修改后的程序运行结果

user: user-4
content: 判斷不爲*的那個if語句最後多了個分號，所以條件判斷其實沒生效，後面那段賦值語句一直在執行。

user: user-5
content: 兄弟把if后面的；去掉可好

user: user-6
content: 没有警告吗？

user: user-7
content: 引用 4 楼 cfjtaishan 的回复:[quote=引用 1 楼 qq_30918465 的回复:] 兄弟把if后面的；去掉可好 +++ 编程需要仔细和认真[/quote]  +++

user: user-8
content: 引用 1 楼 qq_30918465 的回复:兄弟把if后面的；去掉可好 +++ 编程需要仔细和认真

user: user-9
content: 这是多加了个；啊
user-0 提问: 判断13开始到100可被13整除的数，存在问题

回复:
user: user-0
content: 帮帮忙 看一下问题 数组的值总为0

user: user-1
content: check(); int max(); 把int去掉试试

user: user-2
content: //最大的可被13整除的数，从13开始// #include<stdio.h>  #define NUM 100 int number=13, count=0,max_num=0; int main()  { 	for (number = 13; number<= NUM; number++)//13-100之间// 		if (number % 13 == 0) { 			count++; 			max_num = number; 		} 	printf("有%d个数字，最大值为%d\n", count, max_num); return 0; }   不需要那么复杂，这样就可以啦。

user: user-3
content: 能不这么使用全局变量，则不要使用。建议通过传递参数实现更好

user: user-3
content: #include<stdio.h>  #define NUM 100  void check(void); int max(void);  //int number=13, count=0,max_num=0; //int record[100] = { 0 }; int number, count,max_num; int record[100];  int main() {     for (number = 13; number<= NUM; number++)//13-100之间//         check();     max();     printf("最大值为%d\n", max_num);     return 0; }  void check() {     int i;     if (number % 13 == 0) {         record[count] = number;         count++;         /*         for (i = 0; i <count; i++) {             record[i] = number;         }         */      } }  int max() {     int a;     for (a = 0; a <=count; a++) {         if (record[a] < record[a + 1])             max_num = record[a + 1];     }     return (max_num); } 参考一下吧  全局变量即使不显示初始化为0，编译器也会自动将其赋值为0. 参考一下逻辑问题

user: user-4
content: check和max都有问题    #include<stdio.h> #include <stdlib.h>   #define NUM 100   void check(void);  int max(void);   int number=13, count=0,max_num=0;  int record[100] = { 0 };  int main()   {  for (number = 13; number<= NUM; number++)//13-100之间// 	check();   max();  printf("最大值为%d\n", max_num);   system("pause");  return 0;  }   void check()  {  if (number % 13 == 0) {  record[count] = number;  count++;  }  }     int max()  {  int a;  for (a = 0; a < count; a++) {  if (max_num < record[a]) 	 max_num = record[a];  }  return (max_num);  }
user-0 提问: C语言，关于if语句的编译

回复:
user: user-1
content: 《数字逻辑电路》 《计算机组成原理》

user: user-2
content: 好像是根据是否通电进行判断

user: user-3
content: if语句的详细解释可以看看这个：https://cloud.tencent.com/developer/doc/1023

user: user-4
content: 有个寄存器叫状态寄存器，里面有很多标志，每条指令执行完后，状态寄存器都记录了一些标记，JE和JNE就是根据状态寄存器里的标志来跳转的。

user: user-5
content: 全是大佬。。。。。。

user: user-6
content: 没错，要是想了解硬件如何处理，还是学习一下汇编语言吧。汇编中有比较，如果是真，就调到一个子函数中执行，如果是假，就跳到另外的子函数执行。 子函数也无非就是一个地址的开始，最后有返回罢了。

user: user-7
content: 引用 2 楼 jndx_xyc 的回复:[quote=引用 1 楼 wang0635 的回复:] 80X86中有 CMP    XX, YY    比较XX与YY JE    XXXX    如果相等则转移到XXXX JNE    XXXX    如果不相等则转移 JG    XXXX    如果大于则转移 等等指令。  第一句意思是，进行条件的判断，各标志位变化，那么当执行到JE语句时，CPU不是还得根据标志位的状态去判断是否转移吗？我想要理解的是这个JE和JNE指令执行时候的一个CPU内部的流程！谢谢[/quote] 先要了解汇编语言

user: user-8

user: user-8
content: 看下这个，或许能解决你的疑问

user: user-0
content: 引用 1 楼 wang0635 的回复:80X86中有 CMP    XX, YY    比较XX与YY JE    XXXX    如果相等则转移到XXXX JNE    XXXX    如果不相等则转移 JG    XXXX    如果大于则转移 等等指令。  第一句意思是，进行条件的判断，各标志位变化，那么当执行到JE语句时，CPU不是还得根据标志位的状态去判断是否转移吗？我想要理解的是这个JE和JNE指令执行时候的一个CPU内部的流程！谢谢

user: user-9
content: 80X86中有 CMP    XX, YY    比较XX与YY JE    XXXX    如果相等则转移到XXXX JNE    XXXX    如果不相等则转移 JG    XXXX    如果大于则转移 等等指令。

user: user-1
content: 2. 条件转移指令	(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 ) 	JA/JNBE		不小于或不等于时转移. 	JAE/JNB		大于或等于转移. 	JB/JNAE		小于转移. 	JBE/JNA		小于或等于转移. 		以上四条,测试无符号整数运算的结果(标志C和Z). 	JG/JNLE		大于转移. 	JGE/JNL		大于或等于转移. 	JL/JNGE		小于转移. 	JLE/JNG		小于或等于转移. 		以上四条,测试带符号整数运算的结果(标志S,O和Z). 	JE/JZ		等于转移. 	JNE/JNZ		不等于时转移. 	JC			有进位时转移. 	JNC			无进位时转移. 	JNO			不溢出时转移. 	JNP/JPO		奇偶性为奇数时转移. 	JNS			符号位为 "0" 时转移. 	JO			溢出转移. 	JP/JPE		奇偶性为偶数时转移. 	JS			符号位为 "1" 时转移.  《The Intel 64 and IA-32 Architectures Software Developer's Manual》

user: user-10
content: 微处理器设计

user: user-11
content: 楼主是要学习数字电路之类的吗？

user: user-12
content: 引用 8 楼 jndx_xyc 的回复:[quote=引用 7 楼 wenpinglaoyao 的回复:] 我有一个不政治正确的建议：如果题主您只是想从事编程工作，那么对于硬件底层的具体实现原理不用太过纠结，能符合您的大致想象即可，因为人的精力有限，好钢用在刀刃上吧，希望您能理解。 哈哈，谢谢你的建议，我觉得有道理。不过我每当编程的时候想到这个问题就遍不下去了，睡觉也睡不着，就在一直想像这个过程。。。挺烦躁的，可能还是理解不够深刻[/quote] 恕我直言题主，您这种情况，可以算是强迫症式的心理“疾病”，要知道计算机进化到现在，是一个超大集体几代人共同的努力，其中倾注的心血，说是凝聚成了海洋也不过分。所以我们单靠自己民科式的猜想来想象她的模样，大多时候只会给我们徒增苦恼，要经过枯燥而系统的学习才可以见其一二。

user: user-12
content: 再回到您的问题本身来，如果您会看反汇编就会发现，所谓的if执行流程是这样的：首先，有一个标志位，里面是if条件表达式的结果【0或1】，然后后面是一个跳转动作，如果那个标志位是1,那么就执行这个跳转动作，不然就执行紧跟if语句后的那些指令。

user: user-0
content: 引用 7 楼 wenpinglaoyao 的回复:我有一个不政治正确的建议：如果题主您只是想从事编程工作，那么对于硬件底层的具体实现原理不用太过纠结，能符合您的大致想象即可，因为人的精力有限，好钢用在刀刃上吧，希望您能理解。 哈哈，谢谢你的建议，我觉得有道理。不过我每当编程的时候想到这个问题就遍不下去了，睡觉也睡不着，就在一直想像这个过程。。。挺烦躁的，可能还是理解不够深刻

user: user-12
content: 我有一个不政治正确的建议：如果题主您只是想从事编程工作，那么对于硬件底层的具体实现原理不用太过纠结，能符合您的大致想象即可，因为人的精力有限，好钢用在刀刃上吧，希望您能理解。

user: user-0
content: 引用 4 楼 qq_30918465 的回复:  谢谢，看懂了，里面还有一个问题就是检查标志位，这个动作我是实在不理解，感觉涉及到硬件电路构造的东西，我去找找有什么相关书籍
user-0 提问: VS2017调试C语言程序直接进入scanf函数，F10失效

回复:
user: user-1
content: 变量a, key, grade, flag定义的数组长度太大（栈上的空间是有限的），不知道你是否针对会运用到这么大的空间，建议使用malloc/free动态申请空间。 scanf不跳出是因为正等待终端输入。
user-0 提问: 从键盘输入两个数X,Y，计算数学表达式tan(PI/6)+2*PI*sqrt(3*y=exp(x))/(y-x)

回复:
user: user-1
content: n是double类型，需要使用%lf格式输出。 另外，输入时注意在两个数据中间使用逗号。确保再计算tan之前x, y是自己输入的数据，建议在scanf后加一条打印printf，确认x, y的值。

user: user-2
content: printf("n=%lf",n);
user-0 提问: C 音乐播放器 怎么开发波普

回复:
user: user-1
content: 图形界面建议C#

user: user-2
content: 这个问题很简单，但是需要一些知识积累。 音乐文件->解码->PCM 大致的流程是这样的，PCM的数字大小可以表示振幅，这样就可以绘制了。 我觉得你还是需要找个demo看看

user: user-3
content: 波谱应该是指频谱（vs 波形图概念），解码得到wav波形数据后，还需要转化到频域。

user: user-4
content: 使用bass库

user: user-3
content: 波谱的话，音频需要自己解码吧，搜索一下有没有音频解码的开源库。

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

user: user-5
content: 什麽年代了還要6.0？換一個啦，起碼2012
user-0 提问: 想做个读取文本文件里的内容，数据能导入到excel，有大佬给下思路么。

回复:
user: user-1
content: 建议你生成csv文件，可以最简单的用excel打开。。。。

user: user-1
content: 引用 4 楼 qq_30519247 的回复:[quote=引用 3 楼 lye2000000_super 的回复:] 不然的话参考下这个https://zhidao.baidu.com/question/2078273603354779788.html 看不懂.不知道CSpreadSheet.h怎么用、[/quote] 参考这个https://blog.csdn.net/lpf1990823/article/details/17316281

user: user-0
content: 引用 3 楼 lye2000000_super 的回复:不然的话参考下这个https://zhidao.baidu.com/question/2078273603354779788.html 看不懂.不知道CSpreadSheet.h怎么用、

user: user-1
content: 不然的话参考下这个https://zhidao.baidu.com/question/2078273603354779788.html

user: user-0
user-0 提问: codeblocks中无法编译头文件

回复:
user: user-0
content: 有遇到过类似情况 的么

user: user-0
content: 我用gcc命令编译这几个文件是可以的，在codeblocks中就不行，应该是codeblocks的设置不正确。有碰到过类似问题的么

user: user-1
content: 编译时把包含wait_function_test函数的那个文件和main.c一起编译。gcc main.c wait_function.c -g -o main

user: user-2
content: 先试下头文件包含时使用绝对路径是否可以

user: user-3
content: 没有找到函数

user: user-4
content: 用不同的编译器编译？gcc和g++ 编译时可以指定头文件
user-0 提问: if..else if..if为啥我输入5不执行y=100+x

回复:
user: user-1
content: a=0 改成a==0

user: user-0

user: user-0
content: 只要输入大于0的数，直接执行输出y=x2;不管是不是大于100的

user: user-2
content: 不执行? 那输出的是什么 你想要的结果是什么
user-0 提问: 有道题不会，求解

回复:
user: user-1
content: 编译一下就行了，23吧

user: user-2

user: user-3
content: 1+6+10+6

user: user-4
content: 引用 6 楼 Q__ing 的回复:不是特别清楚你的题目，所以按我的理解做了两种题，希望能帮助你。

user: user-4
content: 不是特别清楚你的题目，所以按我的理解做了两种题，希望能帮助你。

user: user-4
content: 还有这种，真心希望对你有用哦

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

user: user-6

user: user-7
content: 代码都有了，复制粘贴编译得到的结果都比问来的快吧

user: user-8
content: 为什么不自己编译运行一下呢？

user: user-9
content: 应该是23，对角线相加
user-0 提问: 如何读取txt的我想要的数据？

回复:
user: user-1
content: 像这种数据要是自己写进去的，可以写成ini，有专门的的读写函数。方便。（也许还有更好的方法）

user: user-1
content: 引用 4 楼 qq_30519247 的回复:[quote=引用 3 楼 wldrzx 的回复:] fgets按行读的。读第二行。在取“Zmini：”后面的字符串啊 额 取字符串位置的代码该如何写[/quote] 这个肯定搜得到啊。。我记串了 。find（）？ indexof（）？

user: user-0
content: 引用 3 楼 wldrzx 的回复:fgets按行读的。读第二行。在取“Zmini：”后面的字符串啊 额 取字符串位置的代码该如何写

user: user-1
content: fgets按行读的。读第二行。在取“Zmini：”后面的字符串啊

user: user-0
content: 引用 1 楼 wyyy2088511 的回复:fgets读取第二行，让后再解析字符串 怎么读。。用fseek确定位置么。。不现实啊。。

user: user-2
content: fgets读取第二行，让后再解析字符串
user-0 提问: c语言编译时出现 access violation at ******   write of address

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

user: user-2
content: 此类错误其实包含的错误类型很多 比如，指针越界，空指针
user-0 提问: curl库中libcurl.so找不到

回复:
user: user-1
content: 引用 6 楼 HelegeHeHeha 的回复:[quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 4 楼 HelegeHeHeha 的回复:] [quote=引用 3 楼 cfjtaishan 的回复:] 那么你自己的代码也是arm-xxx-gcc编译的吗？ 这个库若是arm-xxx-gcc编译的，那么这个库只能用于arm-xxx-gcc编译的代码  是的，都是用arm-xxx-gcc编译的，还有一个问题就是，一开始它显示#include<curl/curl.h>这个找不到，不知道为啥[/quote] 应该是路径的问题，你看一下你的编译选项里有没有指定头文件的路径[/quote]    makefile里面都写了的，[/quote] 路径对不对？就是makefile和头文件的相对路径

user: user-0
content: 引用 7 楼 cfjtaishan 的回复:[quote=引用 6 楼 HelegeHeHeha 的回复:] [quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 4 楼 HelegeHeHeha 的回复:] [quote=引用 3 楼 cfjtaishan 的回复:] 那么你自己的代码也是arm-xxx-gcc编译的吗？ 这个库若是arm-xxx-gcc编译的，那么这个库只能用于arm-xxx-gcc编译的代码  是的，都是用arm-xxx-gcc编译的，还有一个问题就是，一开始它显示#include<curl/curl.h>这个找不到，不知道为啥[/quote] 应该是路径的问题，你看一下你的编译选项里有没有指定头文件的路径[/quote]    makefile里面都写了的，[/quote] 路径对不对？就是makefile和头文件的相对路径[/quote]  我找到错了，我好像把makefile文件写成文本格式了

user: user-0
content: 引用 5 楼 cfjtaishan 的回复:[quote=引用 4 楼 HelegeHeHeha 的回复:] [quote=引用 3 楼 cfjtaishan 的回复:] 那么你自己的代码也是arm-xxx-gcc编译的吗？ 这个库若是arm-xxx-gcc编译的，那么这个库只能用于arm-xxx-gcc编译的代码  是的，都是用arm-xxx-gcc编译的，还有一个问题就是，一开始它显示#include<curl/curl.h>这个找不到，不知道为啥[/quote] 应该是路径的问题，你看一下你的编译选项里有没有指定头文件的路径[/quote]    makefile里面都写了的，

user: user-1
content: 引用 4 楼 HelegeHeHeha 的回复:[quote=引用 3 楼 cfjtaishan 的回复:] 那么你自己的代码也是arm-xxx-gcc编译的吗？ 这个库若是arm-xxx-gcc编译的，那么这个库只能用于arm-xxx-gcc编译的代码  是的，都是用arm-xxx-gcc编译的，还有一个问题就是，一开始它显示#include<curl/curl.h>这个找不到，不知道为啥[/quote] 应该是路径的问题，你看一下你的编译选项里有没有指定头文件的路径

user: user-0
content: 引用 3 楼 cfjtaishan 的回复:那么你自己的代码也是arm-xxx-gcc编译的吗？ 这个库若是arm-xxx-gcc编译的，那么这个库只能用于arm-xxx-gcc编译的代码  是的，都是用arm-xxx-gcc编译的，还有一个问题就是，一开始它显示#include<curl/curl.h>这个找不到，不知道为啥

user: user-1
content: 那么你自己的代码也是arm-xxx-gcc编译的吗？ 这个库若是arm-xxx-gcc编译的，那么这个库只能用于arm-xxx-gcc编译的代码

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:注意下这个lib.curl.so的是通过gcc编译的还是arm-xxxx-gcc编译的？ 是通过我的arm-xxx-gcc编译的，他那里面好像有个链接

user: user-1
content: 注意下这个lib.curl.so的是通过gcc编译的还是arm-xxxx-gcc编译的？
user-0 提问: c语言，哪位大神帮帮忙

回复:
user: user-1
content: 实践出真理，不知道要自己敲一遍，自己去运行一下  答案为58  1+2+23+32=58

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

user: user-3
content: 58，这是在外面面试呢

user: user-4
content: 建议自己在电脑上运行一下。  从第二层循环体可以知道，s加的都是证书，因为负数直接continue；另外，遇到0，那么这一行后面的（0后面的）正数都不会加到s中。因此结果是: 1 + 2 + (第二行以0开头，因此直接跳过）23+32 = 58

user: user-5
content: 这个问题是for语句与二维数组的结合，首先你需要了解二维数组与for语句的应用，同时，该题中包含continue与break语句，所以也要了解它们的用法 题中有两个for语句里面那条控制二维数组每一行，行内的运算，而外面的for语句是行运算结果的相加，首先执行里面的for语句得到结果{3，0，23，32}其中运算时碰到小于1的不相加，继续下一个值的计算，当计算遇到0时跳出当前循环执行下一个循环。第二次循环的结果是0 接着执行外部的循环也就是3+0+23+32，所以得到结果58 个人见解，还望接纳
user-0 提问: Matlab调用c++闪退问题

回复:
user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！
user-0 提问: 程序执行到delay函数时程序运行出错，感觉一直在delay（）函数中不返回。将delay（）中的work（）去掉后程序运行正常

回复:
user: user-1
content: int get(){ while (RI != 1); RI = 0; return SBUF; } work()也没啥问题，建议查一下get()函数，这儿有一个死循环。注意while之后的;。

user: user-0
content: 对了对了，，，没注意到这一句，谢谢

user: user-2
content: 问题是不是出在get函数的这句：  while (RI != 1);  RI不为1时一直在死循环，什么情况下RI会为1？

user: user-0
content: 求解答，，自己想不通
user-0 提问: 大一c语言作业求教

回复:
user: user-1
content: 长度不够，str[10]改成str[100];

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

user: user-0
content: 引用 5 楼 qq_38310070的回复:最后str2的休止符没有添加到str1 高手

user: user-3
content: 应该是main

user: user-4
content: 单词拼写问题。同事注意str1的内存，若两个字符串输入的输入的字符总和小于10个，不会出现问题，否则就会有问题。 还有一个重要问题，str1末尾没有加'\0‘，需要在第二个while外，并且是while循环后加一条语句str1[i] = 0;   //0 == '\0'; 否则即使在输入总和不超过10个字符，那也会出现乱码或者段错误，因为输出可能是越界。

user: user-5
content: mian可以改成main

user: user-6
content: 只是不用strcat是吧，其他函数可以用不？  	char str1[64] = { 0 }; 	char str2[64] = { 0 }; 	printf("请输入两个字符串："); 	gets(str1); 	gets(str2); 	int len1 = strlen(str1); 	int len2 = strlen(str2); 	memcpy(str1 + len1, str2, len2);

user: user-7
content: mian改成main  str1空间可能不够，此时会越界崩溃

user: user-8
content: 最后str2的休止符没有添加到str1

user: user-0
content: 引用 1 楼 user-10的回复:思路没有问题，在定义str1时因为要保存两个字符串连接后形成的新字符串，你字符数组空间可能不够。 有道理，这个问题确实要考虑进去

user: user-0
content: 引用 2 楼 focuslight的回复:你把main 写成 mian了。 char str1[10]={0}, str2[10]={0}; 初始化一下 哦哦哦，献丑了

user: user-9
content: 你把main 写成 mian了。 char str1[10]={0}, str2[10]={0}; 初始化一下

user: user-10
content: 思路没有问题，在定义str1时因为要保存两个字符串连接后形成的新字符串，你字符数组空间可能不够。
user-0 提问: 控制台随机陷入死循环

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXX 10 #define MAXY 10 void main() {     char MAP[MAXX][MAXY];     char str;     int x,y,z,f,n;      for (x=0;x<MAXX;x++) {         for (y=0;y<MAXY;y++) {             MAP[x][y]='.';         }     }      for (x=0;x<MAXX;x++) {         printf("\n");         for (y=0;y<MAXY;y++) {             printf("%c",MAP[x][y]);         }     }     printf("\n");      srand((unsigned) time(NULL)); RETRY:     x=0;y=0;str='A';MAP[x][y]=str;      for (str='B';str<='Z';str++) {         n=0;         f=1;         while (1) {             n++;             z=rand()%4;             switch (z) {                 case 0: if (y+1<MAXY && MAP[x  ][y+1]=='.') {y++;MAP[x][y]=str;f=0;} break;                 case 1: if (x+1<MAXX && MAP[x+1][y  ]=='.') {x++;MAP[x][y]=str;f=0;} break;                 case 2: if (y-1>0    && MAP[x  ][y-1]=='.') {y--;MAP[x][y]=str;f=0;} break;                 case 3: if (x-1>0    && MAP[x-1][y  ]=='.') {x--;MAP[x][y]=str;f=0;} break;             }             if (f==0) break;             if (n>200) {//钻入死胡同                 for (x=0;x<MAXX;x++) {                     for (y=0;y<MAXY;y++) {                         MAP[x][y]='.';                     }                 }                 goto RETRY;             }         }//while         if (x==MAXX-1 || y==MAXY-1) break;     }//for      for (x=0;x<MAXX;x++) {         printf("\n");         for (y=0;y<MAXY;y++) {             printf("%c",MAP[x][y]);         }     }     printf("\n"); }

user: user-2
content: else     k--; 然后for接着又k++，死循环了。
user-0 提问: Clang-Tidy use of a signed integer operand with a binary bitwise operator

回复:
user: user-1
content: 敢于用clang的猿，都具有做律师的资质，赞一个。

user: user-2
content: size改成 unsigned p->size >> 1u 这样可以

user: user-3
content: Clang-Tidy 静态检查比较严谨，位操作必须使用无符号数，包括常量。 在 pl->size >> 1 当中，光 pl->size 是 unsigned 还不够， 1 必须也是。 所以，改成 pl->size >> 1u ，就不会有警告提示了。

user: user-4
content: 引用 4 楼 SinY_Chan 的回复:[quote=引用 3 楼 cfjtaishan 的回复:] [quote=引用 2 楼 SinY_Chan 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:] 这个警告是是对有符号数做按位操作。size应该是有符号变量，若将size编程无符号变量试一下。有符号整型编程无符号整型。  刚试过了，改成unsigned也还是会有这个警告诶。。而且我通常不用unsigned，用这个的话计算可能会有问题。。 难道C里面有符号数位移会有问题？[/quote] 那建议不使用移位操作，而采用除法，即p->size/2 + 1;[/quote]  嗯呢我现在改成这种写法了，因为我觉得用位移操作会更快嘛。。所以就这么写了，但是自我感觉没啥问题却给我了警告，就有所疑问。。还是多谢你[/quote] 也可以先强制类型转换一下再移位。 (unsigned int)(p->size) >> 1

user: user-5
content: 仅供参考：#include <stdio.h> unsigned short int ui;   signed short int si; int main() { 	ui=(unsigned short int)0x8000u; 	si=(  signed short int)0x8000; 	printf("ui=%u\n",ui); 	printf("si=%d\n",si); 	ui=ui>>1; 	si=si>>1; 	printf("ui=%u\n",ui); 	printf("si=%d\n",si);  	printf("--------------\n"); 	ui=(unsigned short int)0x8000u; 	si=(  signed short int)0x8000; 	printf("ui=%u\n",ui); 	printf("si=%d\n",si); 	ui=((  signed short	int)ui)>>1; 	si=((unsigned short	int)si)>>1; 	printf("ui=%u\n",ui); 	printf("si=%d\n",si);  	return 0; } //ui=32768 //si=-32768 //ui=16384 //si=-16384 //-------------- //ui=32768 //si=-32768 //ui=49152 //si=16384

user: user-0
content: 引用 3 楼 cfjtaishan 的回复:[quote=引用 2 楼 SinY_Chan 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:] 这个警告是是对有符号数做按位操作。size应该是有符号变量，若将size编程无符号变量试一下。有符号整型编程无符号整型。  刚试过了，改成unsigned也还是会有这个警告诶。。而且我通常不用unsigned，用这个的话计算可能会有问题。。 难道C里面有符号数位移会有问题？[/quote] 那建议不使用移位操作，而采用除法，即p->size/2 + 1;[/quote]  嗯呢我现在改成这种写法了，因为我觉得用位移操作会更快嘛。。所以就这么写了，但是自我感觉没啥问题却给我了警告，就有所疑问。。还是多谢你

user: user-4
content: 引用 2 楼 SinY_Chan 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] 这个警告是是对有符号数做按位操作。size应该是有符号变量，若将size编程无符号变量试一下。有符号整型编程无符号整型。  刚试过了，改成unsigned也还是会有这个警告诶。。而且我通常不用unsigned，用这个的话计算可能会有问题。。 难道C里面有符号数位移会有问题？[/quote] 那建议不使用移位操作，而采用除法，即p->size/2 + 1;

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:这个警告是是对有符号数做按位操作。size应该是有符号变量，若将size编程无符号变量试一下。有符号整型编程无符号整型。  刚试过了，改成unsigned也还是会有这个警告诶。。而且我通常不用unsigned，用这个的话计算可能会有问题。。 难道C里面有符号数位移会有问题？

user: user-4
content: 这个警告是是对有符号数做按位操作。size应该是有符号变量，若将size编程无符号变量试一下。有符号整型编程无符号整型。
user-0 提问: 同步操作的问题，是选线程还是进程

回复:
user: user-1
content: 不知你是怎么搞的，我一般都是用select模型，用select进行判断，如果有数据进入处理，没有就等几秒跳过重新等。

user: user-1
content: 按理说你一个接受数据线程阻塞了，如果并没有数据发过来，那么是很正常的

user: user-2
content: 引用 4 楼 tb01024632 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] 线程和进程都能实现。主要是这两个业务需要那些数据同步，这两个业务的关联在哪   主要是现在只有1个业务在运行，就是想找到问题在哪儿[/quote] 你的socket对端有没有发数据过来呢？

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:线程和进程都能实现。主要是这两个业务需要那些数据同步，这两个业务的关联在哪   主要是现在只有1个业务在运行，就是想找到问题在哪儿

user: user-0
content: 引用 2 楼 phenix2009 的回复:跟线程进程无关，阻塞是你程序里面写的不合理造成的 INT32 i32Ret;     pthread_t tPid;     i32Ret = pthread_create(&tPid, NULL, (void *)socket_Waiting(), NULL);     if (0 != i32Ret)     {         M2M_RTE_LOG(M2M_LOG_ERROR,"create pthread error!\n");     }       i32Ret = pthread_detach(tPid);          while(TRUE)     {         printf("doing somthing!\n");         sleep(10);     }   socket_wait()是用来收发数据的，也有一个while(true)的循环，一直在收发数据，这样会阻塞在首发数据，请问该怎么办，感谢

user: user-1
content: 跟线程进程无关，阻塞是你程序里面写的不合理造成的

user: user-2
content: 线程和进程都能实现。主要是这两个业务需要那些数据同步，这两个业务的关联在哪
user-0 提问: 求助 汉字对比，把以能实现的doc窗口下的代码转为mfc，识别不了汉字

回复:
user: user-0
content: 我做的是一个写字平台我自己编好了一些汉字的运行轨迹，我要实现的是我输入汉字程序调剂识别打印相应的汉字，每次可以打印1-n个汉字，我之前编写了偏移函数，首先第一步我需要判断输入的汉字是不是我编好运动轨迹的汉字，之前我用c语言利用#include <locale>     wchar_t x[20];setlocale(LC_ALL, "");这个头文件之后直接可以把汉字当做条件利用一个for语句便利数组 wscanf(L"%ls", x);就可以判断是否是已有运动轨迹的汉字，之后也可以直接用汉字当为判断进行书写，但是利用mfc得到的汉字输入直接是字符串我就不会处理了

user: user-1
content: 我上面写的代码有问题吗，不就一字符数组，你随便弄呗

user: user-1
content: 我随便写了一下，你看看是不是这个意思：  	TCHAR    szValue[32] = { '\0' }; 	GetDlgItem(IDC_EDIT1)->GetWindowText(szValue, 32);  	TCHAR   szFormat[32] = _T("大人"); 	 	if (_tcscmp(szValue, szFormat) == 0) 	{ 		MessageBox(_T("相同")); 	}

user: user-0
content: 不用这种方式也可以只要能把编辑框里面的汉字识别对比能进行条件判断就好
user-0 提问: 用xcode写了一个小程序出现了问题

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

user: user-2
content: 声明的是getRadius，实现的是getRaius

user: user-0
content: thanks 我没有仔细看

user: user-3
content: 声明和定义的函数名不一样！！！

user: user-4
content: 注意函数名的单词拼写。将每个函数名的声明与定义一个字母一个字母比较一下，然后就会发现问题在哪了。

user: user-5
content: 提示的已经很明显了，_getRadius连接不到，你声明的函数是getRadius，实现的是getRaius，仔细比较一下