Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求大神帮助 输出最大值 函数部分无法完全执行

回复:
user: user-1
content: #include<stdio.h>  int max(int a,int b,int c);  int main () {      int d,e,f,g;     scanf("%d,%d,%d",&d,&e,&f);     printf("d = %d, e = %d, f = %d\n", d, e, f);     g=max(d,e,f);     printf("%d\n",g);      return 0; }  int max(int a,int b,int c) {     int z,m;     //{     if(a > b)         z = a;     else         z = b;     if(z > c)         m = z;     else         m = c;     //}     return (m); }  代码逻辑没什么问题。无法完全执行是什么意思？ 注意你的输入格式，另外通过一条输出语句检查输入的内容是否正确。

user: user-2
content: 什麽叫做“無法完全執行”呢？輸出最大值的算法不是這樣的，冒泡法、插入排序、選擇排序等等，你總要選擇一種。

user: user-3
content: 楼主可以重新贴下代码吗？太乱了

user: user-3
content: 给楼主提几条建议： 1、楼主你的习惯不好，代码没有达到最基本的美观，可以说让人无法阅读； 2、if语句中不论有几条语句，建议使用{}，因为当{}很多时，可以增强阅读感； 3、问题问的不够详细，太模糊； 总而言之，编程也需要美观，编程规范化，可以使自己与他人在阅读时赏心悦目。

user: user-4
content: 1 #include<stdio.h>                                                                                                                             2    3 int max(int a,int b,int c){   4         int z,m;   5         if(a>b){   6                 z=a;   7         }   8         else{   9                 z=b;  10         }  11         if(z>c){  12                 m=z;  13         }  14         else{  15                 m=c;  16         }  17         return (m);  18 }  19   20 int main(){  21   22         int d,e,f,g;  23         scanf("%d,%d,%d",&d,&e,&f);  24         g=max(d,e,f);  25         printf("%d\n",g);  26         return 0;  27 } ~                                                                                                                                               ~                                                                                                                                               ~             完全按照你的逻辑编译没有问题啊

user: user-4
content: 没明白什么意思，没问题啊，可以加个断点试试，哪一步出问题

user: user-0
content: 函数部分只能执行第一个 if语句 无法执行第二个 if语句

user: user-5
content: 注意你的scanf函数输入要加逗号，另外养成int main()返回return 0; 的好习惯
user-0 提问: 求修改代码求懂Linux下c语言的大神帮忙修改一下代码

回复:
user: user-1
content: 你可以通过当前时间初始化随机种子 #include <time.h>  在主函数里生成字符串之前加一句 srand (time(NULL));  红包就不用了，我也是闲着无事，逛逛论坛，在解决别人问题的同时，自己也学习学习

user: user-1
content: qq: 1060211273

user: user-0
content: 引用 7 楼 ant2012 的回复:generateLettersOrNumbers 中的 int letterCount = rand() % (MAX_COUNT - 1) + 1;	// 为满足至少有一个数字，字母数最多为 MAX_COUNT - 1 int numCount = rand() % (MAX_COUNT - letterCount) + 1; 可以删掉，没用  大神您好，我刚刚按您说的 可以了。但是我把 main 函数里面的循环去掉后。 int main(int argc, char* argv[]) { char* str = generateLettersOrNumbers(); printf("%s\r\n", str); free(str); getchar(); return 0; }  然后关闭程序，在打开程序，每一次运行的结果都是一样的。 只有加上循环语句才会不一样。请问要怎么修改成。不用循环语句。我关闭程序后，在打开结果又不一样。 您能方便留下联系方式吧。想发个红包表示感谢

user: user-1
content: generateLettersOrNumbers 中的 int letterCount = rand() % (MAX_COUNT - 1) + 1;	// 为满足至少有一个数字，字母数最多为 MAX_COUNT - 1 int numCount = rand() % (MAX_COUNT - letterCount) + 1; 可以删掉，没用

user: user-1
content: 这个就是你要求的（长度不能超过20个字符串）

user: user-1
content: 在include下，加一个#define MAX_COUNT 20

user: user-0
content: 引用 2 楼 ant2012 的回复:这是在cpp环境中运行的，可能会有定义变量必须在函数体前面的问题，你稍微改下就好  能留下您的qq或者其他联系吗 表示想感谢一下

user: user-0
content: 引用 2 楼 ant2012 的回复:这是在cpp环境中运行的，可能会有定义变量必须在函数体前面的问题，你稍微改下就好  大神您好，我使用您代码，他显示 error C2065: 'MAX_COUNT' : undeclared identifier  这个我要怎么修改呢

user: user-1
content: 这是在cpp环境中运行的，可能会有定义变量必须在函数体前面的问题，你稍微改下就好

user: user-1
content: char generateLetter() { 	return rand() % 26 + 'a'; }  char generateNum() { 	return rand() % 10 + '0'; }  char* generateLettersOrNumbers() { 	int letterCount = rand() % (MAX_COUNT - 1) + 1;	// 为满足至少有一个数字，字母数最多为 MAX_COUNT - 1 	int numCount = rand() % (MAX_COUNT - letterCount) + 1; 	int totalCount = rand() % MAX_COUNT + 1; 	bool existLetter = false; 	bool existNum = false; 	char* str = (char*)malloc(totalCount + 1);  	// 随机生成totalCount-1个字母或数字 	int i = 0; 	for (; i < totalCount - 1; i++) { 		if (rand() % 2 == 0) { 			existLetter = true; 			str[i] = generateLetter(); 		} else { 			existNum = true; 			str[i] = generateNum(); 		} 	}  	// 如何前面生成的字符中没有字母或数字，则补齐 	if (existLetter && existNum) { 		// 字母和数字都有 		if (rand() % 2 == 0) { 			str[i] = generateLetter(); 		} else { 			str[i] = generateNum(); 		} 	} else if (!existLetter) { 		// 没有字母 		str[i] = generateLetter(); 	} else { 		// 没有数字 		str[i] = generateNum(); 	}  	str[totalCount] = '\0';  	return str; }  int main(int argc, char* argv[]) { 	for (int i = 0; i < 10; i++) { 		char* str = generateLettersOrNumbers(); 		printf("%s\r\n", str); 		free(str); 	} 	getchar(); }
user-0 提问: 求大神赐教 不知道哪里错了    使用函数 冒泡法排序   输入的时候只能由大到小才能输出正确的

回复:
user: user-1
content: if 后面为什么不加{}?

user: user-2
content: if(i[t]>i[t+1])       h=i[t];       i[t]=i[t+1];       i[t+1]=h;  改为  if(i[t]>i[t+1]) {       h=i[t];       i[t]=i[t+1];       i[t+1]=h; }

user: user-3
content: #include <stdio.h> void sort(int i[], int n) { 	int w, t; 	for (w = 0; w < n - 1; w++) 	{ 		for (t = 0; t<n - 1 - w; t++) 		{ 			if (i[t] > i[t + 1]) 			{ 				int temp = i[t]; 				i[t] = i[t + 1]; 				i[t + 1] = temp; 			} 		} 	} } int main() { 	int w, a[4]; 	for (w = 0; w<4; w++) 		scanf("%d", &a[w]); 	sort(a, 4); 	for (w = 0; w<4; w++) 		printf("%5d", a[w]); 	printf("\n"); 	return 0; } 注意加括号

user: user-4
content: 排序的那一段，if语句附近的花括号用错了，所以作用域出现了一些错误，正确语句如下 for(i=0;i<9;i++)  for(j=0;j<9-i;j++)  if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } 翻了上学期的C语言书，复习了一遍才找到可能的错误，希望你能参考，然后表示下有用。。。

user: user-5
content: 按照你写的算法，如果在if之前加的大括号，是提供给for作为作用域标注的，而不是if的作用域。 按照if的语法，只有在if判断过后，加上大括号，才能表明那一块区域的语句是if的作用域。

user: user-0
content: 为什么不能在if之前加括号？
user-0 提问: error C2601: 'f1' : local function definitions are illegal 出现这个错误是为什么啊？

回复:
user: user-0
content: 程序里有些空格是特殊符号  打不出来

user: user-1
content: 太乱了 可能是哪里没加} 括号 检查一下吧

user: user-2
content: 你程序那几个f开头的函数，每个函数只有两个return, 还少了一个，比如说f1, 假如x, y，不满足那两个if判断，即两个if表示式返回都为false，就没有返回值，if，for里的逻辑最好用{}括起来，这样代码逻辑看得比较清楚
user-0 提问: 结构体

回复:
user: user-1
content: 去掉number和name前面的&;因为这两个本身就是字符串，字符串名就是地址，因此不需要再加&.如果加了&就会有问题了。

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-0
content: 谢谢，还想问一个问题 就是书上说学生管理系统要建立三个文件，分别是 smssmain.c  stulist.c  stulist.h  是不是这样建的？？

user: user-3
content: inputa调用有问题，你在input函数里调用inputa时，已经通过pstu+i的方式将指针指向了某个student对象，为何还要在inputa里再对pstu偏移一次。 解决办法，要么将inputa(pstu + i, i) 改成 inputa(pstu, i)。要么将inputa的第二个参数i，去掉。从代码规范来讲，建议采用第二种

user: user-4
content: 烫烫烫明显就是 char 数组这里的问题了
user-0 提问: 怎么用VC6写界面，拜托各位大佬，论坛我已经搜索过了

回复:
user: user-1
content: 学一下C++  然后直接下一个QT5，MFC太老了。。。做出来的界面你自己瞅瞅

user: user-2
content: 可以看一下孙鑫的VC++变成详解

user: user-3
content: 建议不要去看MFC的东西了，直接上QT吧，并不难

user: user-4
content: 用vs2010，我只修改了1行代码，浏览器就做好了，而且还是office2003风格的（当然你也可以用vs风格，office2007风格等）  下载：https://download.csdn.net/download/caozhy/10411311 https://download.csdn.net/download/caozhy/10411383

user: user-4

user: user-5
content: 百度深入浅出MFC，有你想要的

user: user-6
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1～7\*.*

user: user-7
content: 做界面还是直接面向对象吧。。。

user: user-8
content: 别进坑了....

user: user-9
content: 现在嗨哟弄VC6，why？这么多不兼容的东西

user: user-10
content: 建议先学C++和windows。然后看看《windows 程序设计》和mfc相关书籍

user: user-11
content: 刚学完C语言基础，就学MFC。 建议先学C++和windows。

user: user-12
content: 新建VC++6.0的菜单栏中选择“文件->新建"，之后选择“MFC AppWizard（exe）”  在输入了项目名称之后，选择“确定” 之后选择应用程序类型，基于对话框、基于单文档和基于多文档  一般选择基于对话框就可以了。 剩下的就可以在工具箱里面拖拽控件，即可完成界面设计

user: user-13
content: 楼主是想自己用c语言画界面？那这个有些难度。需要自己构建 GUI系统，然后调用显卡api。 如果这些都实现了，楼主就是高手了，可以去某某著名公司。

user: user-14
content: printf无法写界面。要是不借助其他库，那就是直接用Windows API写，包含windows.h就行。这个可以参考《Windows程序设计（第五版）》。

user: user-15
content: mfc的工程就可以了啊

user: user-16
content: 个人觉得SDK纯API方式编写GUI程序已经过时了，效率太低，了解一下原理就可以了，主要是消息机制。  图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  仅供参考： 初学者学习C++ Builder第一个程序（模拟聊天室），经典！ http://blog.163.com/tab_98/blog/static/11924097201693033057497/ C++ Builder绘图示例（模拟时钟） http://blog.163.com/tab_98/blog/static/11924097201611324819376/ 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/

user: user-17
content: api,,,,不过刚开始有点烦

user: user-18
content: 不用第三方库，那就只有MFC或者windows API了。MFC比较简单一些。但你学的是“C语言基础”，不是C++，所以基本上使用WIndows API是唯一选择。 windows下，C的界面库原生的就是API，若是用mingw编译器，应该还有一些可以用。学完C++，则Qt是最棒的。

user: user-19
content: 别建控制台  新建一个MFC工程 百度VC6.0 MFC
user-0 提问: 关于VS运行出现 Runtime Libary 错误问题

回复:
user: user-1
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-2
content: do     {         ch[i] = getchar();         i += 1;     } while (ch[i - 1] != '\n');     while (isalpha(ch[i2]) == 0)     {         i2 += 1;         continue;     } 原因应该是这儿while (isalpha(ch[i2]) == 0)这个循环导致的。因为这个逻辑是找到ch中的字母字符，若没找到会一直找。实际上这个是有问题，因为ch是局部数据，且没有初始化，里面的元素是随机值。通过这个while逻辑，会导致ch越界访问，程序出现对话框的错误； 解决办法如下： while (isalpha(ch[i2]) == 0 && i2 < i)     {         i2 += 1;         continue;     } 这个办法能解决ch越界的逻辑问题。通过i2 < i这样可以保证输入了几个字符就检查几个字符；当然也要对输入的逻辑加上防止越界的操作，如下： do     {         ch[i] = getchar();         i += 1;     } while (ch[i - 1] != '\n' && i < 40);  对于第二次直接接收到'\n'的问题。可以这样改动一下：  while ((choice = algorithm_choice()) != 'q')     {         printf("Enter first number: \n");         input_num1 = number_input1();         printf("Enter second number: \n");         input_num2 = number_input2();         getchar();   //for '\n'     }

user: user-3
content: 这个是 scanf 的一个坑，scanf 会把回车、空格、Tab或一些非法输入的字符当作此次输入的结束标志，并且这些字符会存入输入缓冲区，当下一次想要从标准输入中读取一个字符时，这个遗留的字符就正好充当了此次的输入字符。但下次读的不是字符，就会把前面那些字符仍掉。 所以解决办法： 在algorithm_choice的 getchar()之前调用 fflush(stdin);  楼主有兴趣可以测试下，调用两条scanf，第一条输入任一类型数据，第二条用scanf输入一个字符，会发现第二句的scanf得到的字符是\n

user: user-0
content: 补充一下，函数已经声明的了。同时我把函数float number_input2(void) 取出来单独测试则不会出现该问题
user-0 提问: 大一C语言作业求教

回复:
user: user-1
content: 名字输入用gets 试试

user: user-2
content: number越界了，你输了12个字符，加上结尾的\0，你最少要有13个的大小，越界导致其他内存被你修改到了  平均分那里最后一个是score[2]

user: user-3
content: 引用 4 楼 ant2012 的回复:那是因为你的number越界了，你输入了12个字符，刚好填充了number的12个字符，不过还有\0呢，字符串以\0结尾，它就会填充到下一个字节，也就是name的第一个字节，这样读出的name肯定是一个空串，即 name 等于 ""   把这个空间放大一点就行了

user: user-4
content: 计算平均分的时候，最后一个加的students.scre[3]；英语成绩获取放在students.scre[2]里。两个地方改成一致即可。

user: user-5
content: 那是因为你的number越界了，你输入了12个字符，刚好填充了number的12个字符，不过还有\0呢，字符串以\0结尾，它就会填充到下一个字节，也就是name的第一个字节，这样读出的name肯定是一个空串，即 name 等于 ""

user: user-6
content: 字符串赋值这样的，strcpy(student.name,"李晓晨");

user: user-0
content: 平均分那里我知道了是我把2写成了3
user-0 提问: 在win下编译linux下的c程序 

回复:
user: user-1
content: 引用 7 楼 weixin_40810615 的回复:[quote=引用 3 楼 mstlq 的回复:] 楼主用win10吗？ win10自带Ubuntu,可以访问win上的目录。你就尽管用你自己熟悉编辑器写代码，写完进Ubuntu用gcc编译就好了…… win10 什么时候自带ubuntu, 我在网上查了一下win10只是自带虚拟机Hyper-V，不知道这个跟在windows电脑上装一个vmware 有什么区别？这同样需要，我在windows下编辑代码，还是要拖到虚拟机下编译运行才可以。我想做的是 win下编辑和编译，服务器或虚拟机直接跑程序。 [/quote] https://www.jianshu.com/p/bc38ed12da1d 早就有了……

user: user-2
content: 引用 9 楼 weixin_40810615 的回复:[quote=引用 8 楼 yiyefangzhou24 的回复:] 在window上生成可执行文件拿到linux下执行？？？链接的库都不一样怎么执行，在Windows上写好再拿到Linux上编译还有可能，用c/c++不要调用win api，这也有点费劲 可以做的，就是跨平台编译。 你想在win下用keil可以完成单片机程序的编译。那keil肯定有安装好单片机链接的库，以及编译工具。 所以在win下搭配一个linux的编译环境也是可行的。 [/quote] 这当然可以，关键看你怎么链接，最简单的比方，链接qt的库，因为库本身是跨平台的，当然可以在linux上运行，在不使用跨平台的库，直接链接windows原生api你放到linux里面跑跑？

user: user-0
content: 引用 8 楼 yiyefangzhou24 的回复:在window上生成可执行文件拿到linux下执行？？？链接的库都不一样怎么执行，在Windows上写好再拿到Linux上编译还有可能，用c/c++不要调用win api，这也有点费劲 可以做的，就是跨平台编译。 你想在win下用keil可以完成单片机程序的编译。那keil肯定有安装好单片机链接的库，以及编译工具。 所以在win下搭配一个linux的编译环境也是可行的。

user: user-0
content: 引用 3 楼 mstlq 的回复:楼主用win10吗？ win10自带Ubuntu,可以访问win上的目录。你就尽管用你自己熟悉编辑器写代码，写完进Ubuntu用gcc编译就好了…… win10 什么时候自带ubuntu, 我在网上查了一下win10只是自带虚拟机Hyper-V，不知道这个跟在windows电脑上装一个vmware 有什么区别？这同样需要，我在windows下编辑代码，还是要拖到虚拟机下编译运行才可以。我想做的是 win下编辑和编译，服务器或虚拟机直接跑程序。

user: user-2
content: 在window上生成可执行文件拿到linux下执行？？？链接的库都不一样怎么执行，在Windows上写好再拿到Linux上编译还有可能，用c/c++不要调用win api，这也有点费劲

user: user-3
content: 在windows 下用cygwin, 用gcc,或者g++编译， 安装cygwin的方法见以下地址：(英文的，中文没找到相关的) http://preshing.com/20141108/how-to-install-the-latest-gcc-on-windows/

user: user-4
content: 用qtcreator 生成makefile后，在linux下make

user: user-5
content: 为什么不在win10下的虚拟机里的linux中编译呢？

user: user-1
content: 楼主用win10吗？ win10自带Ubuntu,可以访问win上的目录。你就尽管用你自己熟悉编辑器写代码，写完进Ubuntu用gcc编译就好了……

user: user-6
content: 你可以写QT认识的代码,然后拷贝代码到linux上编译

user: user-7
content: 楼主，可以在windows下使用VSCODE编写linux c代码，都编译通过后，把代码移到linux系统上，再用gcc或者g++重新编译一次，生成linux下的执行文件。这样就避免了使用vim来编辑代码了。
user-0 提问: 求助！c primer plus 中程序15.4

回复:
user: user-0
content: 引用 3 楼 hdt 的回复:c 没有bool c++才有 有的。c11有。

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:bool是int类型。而不是unsigned int 谢谢！

user: user-1
content: c 没有bool c++才有

user: user-2
content: bool是int类型。而不是unsigned int

user: user-3
content: 因为你把unsigned int改为bool，struct box_props结构体的大小已经改变了，在我测试的编译器中是变大了，由原来的4个字节变为16个字节了，这可能涉及到位域的概论了，所以你代码中union Views组合类型的占用的内存字节数就变大了，而不是原来的4个字节了。即之前每个字段位对应的值可能就改变了。所以在结构体中使用位域时，最好每个字段的类型都一致，这样就简单点。
user-0 提问: 跪求C语言代码纠错,急~~~，克鲁斯卡尔算法

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

user: user-0
content: 真的很着急，有大神科知道怎么回事的话，加我微信：15511986910

user: user-0
content: 问题大概在这里
user-0 提问: c语言指针问题. 

回复:
user: user-1
content: int* ptr = malloc(4 * 3); *ptr = 1000; *(ptr + 4) = 8000; *(ptr + 8) = 7000; //========================== ptr[0] = 1000; ptr[1] = 8000; ptr[2] = 7000; 这两种形式是有区别的。 第一种*(ptr + 4)即ptr[4];同理*(ptr + 8)即ptr[8];很明显越界访问了。因为总共申请了12个字节， ptr + 4是基于ptr向后偏移4 * sizeof(int)个字节，若是32位系统，则偏移16个字节。 第二种形式，若是在32位系统上，是没问题的。但若是64位系统，也是会越界。因为总共申请12个字节，&ptr[2]是相对ptr向后偏移2 * sizeof(int)；即2 × 8 = 16;

user: user-2
content: 理解和讨论之前请先学会如何观察！  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-3
content: for (_uint i = 0; i < 6; i++) 你的第一个输出是无符号整数 for (int i = 0; i < 6; i++) 　第二个输出的是有符号整数 所有输出结果　不一样

user: user-0
content: 引用 3 楼 cfjtaishan 的回复:int* ptr = malloc(4 * 3); *ptr = 1000; *(ptr + 4) = 8000; *(ptr + 8) = 7000; //========================== ptr[0] = 1000; ptr[1] = 8000; ptr[2] = 7000; 这两种形式是有区别的。 第一种*(ptr + 4)即ptr[4];同理*(ptr + 8)即ptr[8];很明显越界访问了。因为总共申请了12个字节， ptr + 4是基于ptr向后偏移4 * sizeof(int)个字节，若是32位系统，则偏移16个字节。 第二种形式，若是在32位系统上，是没问题的。但若是64位系统，也是会越界。因为总共申请12个字节，&ptr[2]是相对ptr向后偏移2 * sizeof(int)；即2 × 8 = 16; 谢谢解答，看来我理解错了， 原来ptr+1代表偏移4个字节， 初学菜鸟一只... 一直以为ptr+1偏移一个字节

user: user-4
content: 正如3楼所说的那样。 因为ptr是指向int的指针，所以ptr+1表示在ptr的基础上加上一个“单位”，这个“单位”就是表示一个int的大小，即4个字节。  如上图所示，ptr的值是0x00EFAD28，而ptr+4的值是0x00EFAD38=0x00EFAD28+4*4而不是0x00EFAD2C 实际上ptr+1与ptr[1]的值相同。 请参考《C++数组地址偏移》 《C++中对数组名的运算》 希望能够帮到你
user-0 提问: 求解 这个段比较大小为什么比较不了

回复:
user: user-1

user: user-2
content: 程序的代码本身并没有错误，问题出在输入的内容，估计你可能是输入时漏掉了两个数之间的逗号。 1.用逗号   2.用空格   总之scanf语句“”之间内容符号输入时也要原原本本的输入，否则会出现错误

user: user-3
content: 程序无错，运行的时候加上逗号就可以了

user: user-4
content: 我感觉你是输入错误，你可以试试 10,100 11,3 注意中间的逗号一定要有，还要和你程序"%d,%d"中的一样

user: user-5
content: scanf("%d,%d",&a,&b); 建议在这句后面加一条调试语句： printf("a = %d, b = %d\n", a, b); 这句用于验证输入的内容是否和自己的预期一样。在保证输入和预期一样后，再分析后面的逻辑。   后面的逻辑没发现问题。

user: user-6
content: 输入 10,9 回车 在测试10,100 回车   是不是你输入有问题 记得要输入,号

user: user-7
content: 描述一下你的输入和输出

user: user-8
content: 请检查scanf的返回值。
user-0 提问: 请问怎么解决在debug的时候在transfer函数 p->node[i]->firstarc=NULL卡住了的问题

回复:
user: user-1
content: if(p->node[i]->firstarc==NULL)                 {                     p->node[j]->firstarc=m;                 }                 else                 {                     n->nextarc=m;                 } 注意p->node[j],node[j]是野指针，需要为其分配空间才能进行这句操作p->node[j]->firstarc=m;否则会出现段错误； while (1)             if (t->nextarc!=NULL)             {                 printf ("%d\t",t->adivex);                 t=t->nextarc;             }             else             {                 printf ("%d\n",t->adivex);                 //continue;                 break;             }     } 这里的continue应改成break,否则这是一个死循环。   以下是我做的稍微修改，参考一下吧：  #include <stdio.h> #include <stdlib.h> #include <time.h>  typedef struct st_arc {     int adivex;     struct st_arc *nextarc; } starc;   typedef struct head_node {     int vexdata;     starc *firstarc; }hnode;   typedef struct  hnode_array {     int num;     hnode node [6]; }hnarry;   void transfer (int (*A)[6],hnarry *p); void output (hnarry *p);  int main () {     int i,j;     int A[6][6];     hnarry *p;     p=(hnarry *)malloc(sizeof (hnarry));     printf ("Please input the adjacency list:\n");     srand(time(NULL));     for (i=0;i<6;i++)     {         for (j=0;j<6;j++)         {             //scanf ("%d",&A[i][j]);             A[i][j] = rand() % 1000;             printf("%d\t", A[i][j]);         }     }     transfer (A,p);     output (p);     return 0; }    void transfer (int (*A)[6],hnarry *p) {     int i,j;     starc *m,*n;     p->num=0;     for (i=0;i<6;i++)     {         p->node[i].vexdata=i;         p->node[i].firstarc=NULL;         p->num++;     }     for (i=0;i<6;i++)     {         for (j=0;j<6;j++)         {             if(A[i][j]!=0)             {                 m = (starc*)malloc(sizeof (starc));                 m->adivex = A[i][j];                 if(p->node[i].firstarc==NULL)                 {                     p->node[j].firstarc = m;                 }                 else                 {                     n->nextarc = m;                 }                 n=m;                 n->nextarc=NULL;             }         }     } }    void output (hnarry *p) {     int i;     starc *t;     for (i=0;i<6;i++)     {         printf ("%d\n",p->node[i].vexdata);         if(p->node[i].firstarc!=NULL)             t = p->node[i].firstarc;         else             continue;         while (1)             if (t->nextarc!=NULL)             {                 printf ("%d\t",t->adivex);                 t=t->nextarc;             }             else             {                 printf ("%d\n",t->adivex);                 //continue;                 break;             }     } }

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: 大一新人求C语言错误解决方法,各位大佬们帮帮忙

回复:
user: user-1
content: return(main()); 返回的是地址  一个程序main是入口 你为什么不直接返回呢？

user: user-2
content: return;     //return(main()); 函数定义的是void类型返回值，因此return (main());这是返回函数首地址。很明显是类型冲突；  建议花时间学习一下函数的声明，定义。
user-0 提问: 一个c编译器比如gcc，里面都是写什么东西？

回复:
user: user-1
content: 红书《编译原理》

user: user-0
content: 或许我该，查一查编译器的工作机制。

user: user-2
content: “GNU编译器套件（GNU Compiler Collection）包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端，也包括了这些语言的库（如libstdc++、libgcj等等）。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处，‘自由’的含义是它尊重用户的自由。”

user: user-1
content: 提醒：gcc是开源的。
user-0 提问: fread有问题求大神帮助

回复:
user: user-1
content: count=fread(&t, sizeof(struct Goods), 1, ifp); 问一下，写入的是用fwrite的吗？若不是，那么用fread去读，格式就不对了。

user: user-2
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-3
content: 楼主会不会一开始生成的data.dat文件就错误了，所以后续读取的数据就错误了，把data.dat文件删除重生试试看看。把你上面读写文件的操作整理代码如下： int AddRecord(Goods* goods) { 	FILE* fp = fopen("data.dat", "ab"); 	if (fp) 	{ 		fwrite(goods, sizeof(struct Goods), 1, fp); 		fclose(fp); 	} 	return 1; }  int ReadRecord() { 	Goods t; 	FILE* ifp = fopen("data.dat", "rb"); 	if (ifp) 	{ 		while (1) 		{ 			int nCount = fread(&t, sizeof(struct Goods), 1, ifp); 			if (nCount != 1) 				break; 		} 		fclose(ifp); 	} 	return 1; }  void Test() { 	struct Goods sGoods; 	sGoods.count = 10; 	sGoods.goodn = 2; 	sGoods.posn = 3; 	sGoods.price = 20; 	AddRecord(&sGoods); 	ReadRecord(); } 能正常的写入数据和读取数据的。

user: user-1
content: &t.posn=-85893460,&t.goodn=-85893460,&t.price=-107374176,&t.count=-85893460 &t.posn在哪输出的。

user: user-1
content: Good = (LinkList *)malloc(sizeof(LinkList));     if (Good == NULL){         printf("申请空间失败!\n");         return 0;     }     for (i = 0; i < m; i++){         Good[i] = NULL;     }  这个地方有问题。Good是一个指针变量，并不是m个指针变量。 是不是应该这样呢？ Good = (LinkList *)malloc(m * sizeof(LinkList));

user: user-0
content: 是用fwrite int AddRecord(Goods *goods){ 	FILE *fp; 	 	if (goods == NULL) return 0;  	//以二进制的append方式打开文件 	fp = fopen("data.dat", "ab"); 	if (fp == NULL){ 		printf("error1!\n"); 		return 0; 	} 	//把记录写在文件中 	fwrite(goods, sizeof(struct Goods), 1, fp);  	fclose(fp); 	return 1; 	  }RR
user-0 提问: 邻接矩阵输入输出

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

回复:
user: user-1
content: void pjf(float *p) { int i; int y=0; for(i=0;i<4;i++) y=y+(*(p+5*i)); y=y/4; printf("%d",y); }

user: user-2
content: void pjf(float *p) {     int i;     //int y=0;     float y=0.0;     for(i=0;i<4;i++)         y=y+(*(p+5*i));     y=y/4;     //printf("%f",&y);     printf("%f", y); } 参考一下吧

user: user-0
content: 上面发错了，这才是结果

user: user-0
content: 这是运行结果
user-0 提问: 自己做的C语言小游戏，找不出问题出在哪里，求大神

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

user: user-2
content: void show() //函数：显示画面 {     for(i=0;i<high;i++)         for(j=0;j<=width;j++)    //这儿的j <= width应改成j < width         {             sky[i][j]=0;             sky[high][j]=2;         }      for(i=0;i<high;i++)         for(j=0;j<=width;j++)    //这儿的j <= width应改成j < width         {             if(i<pipex_up||i>pipex_down)                 sky[i][pipey]=3;         }      sky[birdx][birdy]=1;      gotoxy(0,0);     for(i=0;i<high;i++)     {         for(j=0;j<width;j++)         {             if(sky[i][j]==0)                 printf(" "); // 0 输出空格             else if(sky[i][j]==1)                 printf("@"); // 1 输出小鸟             else if(sky[i][j]==2)                 printf("_"); // 2 输出边界             else if(sky[i][j]==3)                 printf("|"); // 3 输出管道          }         printf("\n");     }     printf("得分:%d\n",score);     printf("按空格使小鸟上升，穿过管道间的缝隙"); }  注意加注释的地方是不是会导致数组越界呢。  分数的问题，逻辑很简单没发现什么问题，建议找一下自己其他逻辑，尤其跟分数相关的逻辑。

user: user-0
content: 刚才试了一下，把分数从0改到1就正常了，不知道为什么

user: user-0
content: 是分数的更新，不知道哪出错了
user-0 提问: 用任意编译器打印中文都出现了打一个字中间隔两个字不打印如此循环直至打印结束。

回复:
user: user-1
content: 引用 8 楼 qq_42428486 的回复:引用 4楼早打大打打核战争 的回复:使用wprintf无用  wprintf(L"有用\n");

user: user-2
content: 你printf后面加个\n,或者printf语句下面加fflush();试一下。

user: user-3
content: 引用 16 楼 DelphiGuy 的回复:[quote=引用 15 楼 zhao4zhong1 的回复:] [quote=引用 14 楼 DelphiGuy 的回复:] 应该不是win10的问题吧，windows的基本I/O部分，可以说20年以来都没1什么变化。 win10的终端和windows之前的各个版本比，变化大了去了！[/quote]  请举例说明  [/quote] 比如win10家庭教育版和win10专业版在终端鼠标支持上就不一样。

user: user-1
content: 我更喜欢全屏幕字符模式终端，可惜从win7开始不支持

user: user-1
content: 引用 15 楼 zhao4zhong1 的回复:[quote=引用 14 楼 DelphiGuy 的回复:] 应该不是win10的问题吧，windows的基本I/O部分，可以说20年以来都没1什么变化。 win10的终端和windows之前的各个版本比，变化大了去了！[/quote]  请举例说明

user: user-3
content: 引用 14 楼 DelphiGuy 的回复:应该不是win10的问题吧，windows的基本I/O部分，可以说20年以来都没1什么变化。 win10的终端和windows之前的各个版本比，变化大了去了！

user: user-1
content: 应该不是win10的问题吧，windows的基本I/O部分，可以说20年以来都没1什么变化。

user: user-3
content: 引用 12 楼 qq_42428486 的回复:解帖了，是系统的问题，我用的是内测win10，今天更新了，打印就好了，谢谢大家的回答，么么哒 win10害死人！

user: user-0
content: 解帖了，是系统的问题，我用的是内测win10，今天更新了，打印就好了，谢谢大家的回答，么么哒

user: user-0
content: 引用 9楼dark9527 的回复:你printf后面加个\n,或者printf语句下面加fflush();试一下。无用.

user: user-1
content: 使用wprintf

user: user-4
content: 在Linux下测试没有问题。可以正常输出。

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

user: user-0
content: 引用 4楼早打大打打核战争 的回复:使用wprintf无用

user: user-0
content: 引用 6楼user-5 的回复:引用 5 楼 qq_42428486 的回复:引用 3楼自信男孩 的回复:在Linux下测试没有问题。可以正常输出。所以说我的有问题啊，怎么解决呢重新建个工程试试。图中似乎有干扰试过无用，重建项目，用其他编辑器编译器都无用，只要是打印中文都会出错

user: user-5
content: 引用 5 楼 qq_42428486 的回复:引用 3楼自信男孩 的回复:在Linux下测试没有问题。可以正常输出。所以说我的有问题啊，怎么解决呢重新建个工程试试。图中似乎有干扰

user: user-0
content: 引用 3楼自信男孩 的回复:在Linux下测试没有问题。可以正常输出。所以说我的有问题啊，怎么解决呢

user: user-0
content: 顶一下！！！！
user-0 提问: 关于float型数据的一点疑问

回复:
user: user-1
content: 所有的整数都可以表示成科学计数法，比如 10000002289=1.0000002289e10，有效数字只能保证 1.0000002289 这部分，与后面是10的几次方没关系。

user: user-2
content: 引用 4 楼 qq_42203883 的回复:[quote=引用 2 楼 jianwen0529 的回复:] 1：不是有效位数，是有效的小数位数 2：%e %f等默认打印的小数位数是6，即等同于%0.6e %0.6f，使用如 %0.10f %0.10e (表示小数位数打印10位） 你的意思是这个有效位数是指的小数位的有效数字，但是整数位的有效数字是多少呢！[/quote] 一共有效位6位。包括整数和小数部分。你的例子不也是这样吗？你说的第8位开始随机是偶然吧。  输出numeric_limits<float>::digits10看看几位

user: user-3
content: 有效数字位数一定能保证7位是准确的，但是8位有一部分数字也是准确的，和尾数位的字节数有关系， 可以参考一下https://blog.csdn.net/a4454541115/article/details/52079108立即前往

user: user-0
content: 引用 2 楼 jianwen0529 的回复:1：不是有效位数，是有效的小数位数 2：%e %f等默认打印的小数位数是6，即等同于%0.6e %0.6f，使用如 %0.10f %0.10e (表示小数位数打印10位） 你的意思是这个有效位数是指的小数位的有效数字，但是整数位的有效数字是多少呢！

user: user-4
content: 浮点数x（float)小数后面是6个0，浮点数一点会关注小数点后几位。float一般是小数点后6位。

user: user-5
content: 1：不是有效位数，是有效的小数位数 2：%e %f等默认打印的小数位数是6，即等同于%0.6e %0.6f，使用如 %0.10f %0.10e (表示小数位数打印10位）

user: user-6
content: 浮点数格式 http://bbs.csdn.net/topics/390676437
user-0 提问: 新手求助改错题

回复:
user: user-1
content: #include<stdio.h>  #include<string.h>  struct student  {        char num[8];      //学号     float  score;    //C语言成绩 }; float average(student s[], int n)   //-------- 这行改了  {   int  j;  float  aver=0.0;  for (j=0; j<n; j++)  aver = aver+s[j].score;  aver = aver/n;  return aver;                        //-------- 这行改了   }  void main()  {   struct student b[8]={ {"201",80},{"202",90},{"203",95},{"204",60},                           {"205",63},{"206",74},{"207",80},{"208",76}};  int i;  float aver;  aver = average( b, 8); 改了       //-----------这行改了    printf("\t学号\tC语言成绩\n");  for (i=0; i<8; i++)  printf("\t%s%12.2f\n",b[i].num,b[i].score);  printf("班级平均成绩为%.2f\n",aver);  }

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

回复:
user: user-1
content: 引用 6 楼 weixin_41986620 的回复:[quote=引用 5 楼 shihengzhen101 的回复:] 位域赋值或者位操作都能达到目的 位操作我清楚了，位域赋值肿么破=。=[/quote] 参考代码  struct SBit { 	unsigned char a : 2; 	unsigned char b : 2; 	unsigned char c : 2; 	unsigned char d : 2; };  union NewBit { 	SBit s; 	unsigned char a; };  int main(int argc, char* argv[]) { 	NewBit n; 	n.s.a = 1; 	n.s.b = 2; 	n.s.c = 1; 	n.s.d = 2;  	printf("%d", n.a);  	return 0; }  运行结果

user: user-0
content: 引用 5 楼 shihengzhen101 的回复:位域赋值或者位操作都能达到目的 位操作我清楚了，位域赋值肿么破=。=

user: user-1
content: 位域赋值或者位操作都能达到目的

user: user-2
content: a &= 0x3f; a |= (0x01 << 6);  a &= 0xcf; a |= (0x02 << 4);  a &= 0xf3; a |= (0x01 << 2);  a &= 0xfc; a |= (0x02 << 0);

user: user-3
content: 使用位域定义试试

user: user-4
content: 不清楚楼主想问什么，如果只是想通过位运算表达 01100110这个值，只需要 a  = 0; a |= 0x66; 可是为何不直接 a = 102呢

user: user-0
content: 听说可以用位操作符写进去，求问各路大神具体怎么写。。。
user-0 提问: 为甚播放不了背景音乐？

回复:
user: user-0
content: ？ ？ ？ ？ ？ ？ ？

user: user-0
content: ？什么意思？

user: user-1
content: 参考： C语言（C++）Win32控制台下播放声音 http://blog.163.com/tab_98/blog/static/1192409720164156552991/

user: user-2
content: 老师很热心，到处都能看到老师的解答

user: user-3
content: SetCurrentDirectory GetLastError
user-0 提问: 求众数

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  struct num { 	int number; 	int cnt; }; int main(void) { 	int n, tmp; 	int i, j, k, max;  	scanf("%d", &n);  	struct num *list = (struct num *)calloc(n, sizeof(struct num)); 	if (!list) 		exit(0);  	k = 0; 	for (i = 0; i < n; i++) { 		scanf("%d", &tmp); 		for (j = 0; j < i; j++) 			if (tmp == list[j].number) { 				list[j].cnt++; 				break; 			} 		if (j >= i) { 			list[k].number = tmp; 			list[k].cnt++; 			k++; 		} 	}  	max = 0; 	for (i = 1; i < k; i++) 		if (list[max].cnt < list[i].cnt) 			max = i;  	printf("max number is %d, counter is %d\n", 			list[max].number, list[max].cnt); }  参考一下吧，若众数有多个，再遍历一次，输出和最大次数相同的数和出现的次数

user: user-2
content: 你这种写法，时间复杂度为0(n2)，且当输入一个数比较大时，数组可能会越界，而且数据稀疏时，很浪费空间，你先排序，在遍历一遍，时间复杂度为nlog2n  快速排序代码： int partition(int arr[], int left, int right) {     int i = left, j = right;     int key = arr[left];     while (i < j) {         while (i < j && arr[j] > key)             j--;         if (i < j) {             arr[i] = arr[j];             i++;         }         while (i < j && arr[i] < key)             i++;         if (i < j) {             arr[j] = arr[i];             j--;         }     }     arr[i] = key;     return i; } void quickSort(int arr[], int left, int right) {     if(left >= right)         return;     int j = partition(arr, left, right);     quickSort(arr, left, j - 1);     quickSort(arr, j + 1, right); }  然后在遍历排序好的数组，求连续相同最多的数
user-0 提问: 实在看不出来哪里错了呀

回复:
user: user-1
content: 记得把代码格式化后再发上来，看着晕啊

user: user-2
content: astyle自动整理c,c++,java源代码格式命令行工具源代码。 用astyle --help查看使用帮助。 http://download.csdn.net/detail/zhao4zhong1/5605415

user: user-0
content: 我刚刚自己搞定啦

user: user-0
content: 忘记了equal函数了：  int  equal(User u1,User u2,int condition) { 	if(condition==1) 	return u1.num==u2.num; 	else  	return 1; }

user: user-3
content: struct tm *local;/*读取系统时间*/   time_t t;    struct tm *locall;   time_t tt;    struct tm *localll;   time_t ttt;  int cars[13][6];  int x;/*车类型大小判断*/  个人不建议定义这么多全局变量，能用局部变量的尽量使用局部变量。全局变量多了对于代码可读性会起反作用

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

回复:
user: user-0
content: 感谢大神，考虑到是问题2造成的

user: user-1
content: struct prolink *Read()/*将试卷从文件以链表的形式读到内存*/ {     FILE *fp;     char filename[20];     struct prolink *Head=NULL, *la, *lb;     int i=0;     printf("请输入试题库所在的文件名：");     //scanf("%s", &filename);     scanf("%s", filename);     fp = fopen(filename, "rb"); /* 试题从二进制文件读入内存 */     if (!fp)         exit(0);     while (!feof(fp))     {         if (i == 0) /* 将数据读入链表的第一个结点 */         {             la = lb = (struct prolink *)malloc(sizeof(struct prolink));             fread(la, sizeof(struct problem), 1, fp);             Head = la;         }         else /* 将数据读入链表的非第一结点 */         {             la = (struct prolink *)malloc(sizeof(struct prolink));             fread(la, sizeof(struct problem), 1, fp);             lb->next = la;             la->next = NULL;             lb = la;         }         printf("* * * *\n");         printf(" 第%d题：\n", i+1); /* 在屏幕上显示结点中所包含的数据 */         printf(" 知识点：%s\n", la->point);         printf(" 难度：%d\n", la->degree);         printf(" 分值：%d\n", la->fenzhi);         printf(" 题干：%s\n", la->words);         printf(" 选项：%s %s %s %s\n", la->ansA, la->ansB, la->ansC, la->ansD);         printf(" 正确答案：%s\n", la->right);         i++;     }     fclose(fp);     return Head; } 问题1：文件内容是通过fwrite方式写入的吗？如果不是，就可能会出现乱码； 问题2：若是通过fwrite方式写的文件，写文件时是否将next内容也写入了，若没有，读取时却带next，肯定会导致乱码； 问题3：struct problem和struct prolink类型一样吗？若不一样，程序也会有异常。  //scanf("%s", &filename);     scanf("%s", filename); filenmame是数组，因此本身就是地址，所以去掉&
user-0 提问: 字节内高低位互换

回复:
user: user-1
content: #define HALFBYTE_SWAP(x) (((unsigned int)(x) >> 4) & 0x0f0f0f0f | ((x) << 4) & 0xf0f0f0f0)

user: user-2
content: #include <iostream> #include <cstdio> #include <cstring>  using namespace std;  int main() {     unsigned int    a = 0xAE007845, b, i;      char buf[16], ch;     snprintf(buf, sizeof(buf), "%X", a);      for (i = 0; i < strlen(buf) - 1; i += 2) {         ch = buf[i];         buf[i] = buf[i+1];         buf[i+1] = ch;     }      cout<<buf<<endl;     sscanf(buf, "%X", &b);      printf("%X --> %X\n", a, b);     cout<<a<<b<<endl;      return 0; }  作为一个参考吧 方法可能多种，具体用哪种要根据实际使用场景。

user: user-3
content: #include<stdio.h>  unsigned int myswap(unsigned int x);  int main() {     unsigned int	a = 0xAE007845, b;     b = myswap(a);     printf("a=%x, b=%x\n", a, b);     return 0; }  unsigned int myswap(unsigned int x) { 	int		i, size = sizeof(x); 	unsigned int	result; 	char	*px = (char *)&x, *pr = (char *)&result; 	for (i = 0; i < size; i++) 		pr[i] = (px[i] & 0x0f) << 4 | (px[i] & 0xf0) >> 4; 	return result; }
user-0 提问: C语言程序椭圆，寻求帮助，互帮互助，现在此谢过大家了

回复:
user: user-1
content: 引用 4 楼 jiht594 的回复:[quote=引用 3 楼 sd990620 的回复:] 楼主如果想用C玩玩图形、小游戏编程，可以了解一下EasyX，EasyX是Windows平台最简单的绘图函数库（名副其实），兼容BC和TC的绘图函数，在VC下用EasyX来编程跟在TC下编程绘图差不多是完全一样的。EasyX既可以绘图，也支持图像显示和处理。  椭圆应该不能用int main(void)，应该改为main（） int main是标准形式。没听说不行的[/quote] 谢谢指正，很抱歉记错了，int main(void)才是标准写法。十分感谢

user: user-2
content: 引用 3 楼 sd990620 的回复:楼主如果想用C玩玩图形、小游戏编程，可以了解一下EasyX，EasyX是Windows平台最简单的绘图函数库（名副其实），兼容BC和TC的绘图函数，在VC下用EasyX来编程跟在TC下编程绘图差不多是完全一样的。EasyX既可以绘图，也支持图像显示和处理。  椭圆应该不能用int main(void)，应该改为main（） int main是标准形式。没听说不行的

user: user-1
content: 楼主如果想用C玩玩图形、小游戏编程，可以了解一下EasyX，EasyX是Windows平台最简单的绘图函数库（名副其实），兼容BC和TC的绘图函数，在VC下用EasyX来编程跟在TC下编程绘图差不多是完全一样的。EasyX既可以绘图，也支持图像显示和处理。  椭圆应该不能用int main(void)，应该改为main（） 你的  ellipse函数部分也有点问题 应该改为 #include "stdio.h"  #include "graphics.h"  #include "conio.h"  main()  {  int x=360,y=160,driver=VGA,mode=VGAHI;  int num=20,i;  int top,bottom;  initgraph(&driver,&mode,"");  top=y-30;  bottom=y-30;  for(i=0;i<num;i++)  {  ellipse(250,250,0,360,top,bottom);  top-=5;  bottom+=5;  }  getch();  }    如果要用int main(void)来定义，应该要使用fillellipse函数 #include <graphics.h>  #include <conio.h>     int main(void)  {      int gdriver = DETECT, gmode;      int xcenter, ycenter, i;         initgraph(&gdriver,&gmode,"");      xcenter = getmaxx() / 2;      ycenter = getmaxy() / 2;         for (i=0; i<13; i++)      {          setfillstyle(i,WHITE);          fillellipse(xcenter,ycenter,100,50);          getch();      }         closegraph();      return 0;  }   如果不用系统函数自己画的话,椭圆的定义:到两个焦点的距离和为定值. 假设焦点为(-F, 0), (F, 0), 定值为S, 则最左边的点为-S/2, 所以x的坐标可以从-S/2循环到S/2 #include<stdio.h> #include<math.h> struct Ellipse {     short x1;     short y1;     short x2;     short y2;     short span; }; int main() {     short right,bottom,i,idx;     struct Ellipse myEllipse;     printf("输入焦点1坐标，用逗号隔开：");     scanf("%d,%d",&myEllipse.x1,&myEllipse.y1);     printf("输入焦点2坐标，用逗号隔开：");     scanf("%d,%d",&myEllipse.x2,&myEllipse.y2);     do     {         printf("输入椭圆上的点离两个焦点的距离之和（应大于两个焦点间的距离）：");         scanf("%d",&myEllipse.span);     }while(myEllipse.span<=sqrt((myEllipse.x1-myEllipse.x2)*(myEllipse.x1-myEllipse.x2)+(myEllipse.y1-myEllipse.y2)*(myEllipse.y1-myEllipse.y2)));     right=myEllipse.span+myEllipse.x1;bottom=myEllipse.span+myEllipse.y1;     for(i=0;i<=right;i++)     {         for(idx=0;idx<=bottom;idx++)         {             if((short)(sqrt((idx-myEllipse.x1)*(idx-myEllipse.x1)+(i-myEllipse.y1)*(i-myEllipse.y1))+sqrt((idx-myEllipse.x2)*(idx-myEllipse.x2)+(i-myEllipse.y2)*(i-myEllipse.y2)))==myEllipse.span)                 printf("*");             else                 printf(" ");         }         printf("\n");     }     return 0; } 希望对你有帮助

user: user-3
content: 在VC中使用Sleep带上头文件  #include <windows.h>  S大写

user: user-4
content: Ellipse函数 函数功能 该函数用于画一个椭圆，椭圆的中心是限定矩形的中心，使用当前画笔画椭圆，用当前的画刷填充椭圆。 函数原型 BOOL Ellipse(HDC hdc,int nLeftRect,int nTopRect,nRightRect,int nBottomRect). 参数 hdc：设备环境句柄。 nLeftRect：指定限定椭圆左上角的X坐标。 nTopRect：指定限定椭圆左上角的Y坐标。 nRightRect：指定限定椭圆右下角的X坐标。 nBottomRect：指定限定椭圆右下角的Y坐标。 [3]  返回值 如果函数调用成功，返回值非零；如果函数调用失败，返回值是0。
user-0 提问: 求助 基于马尔科夫链的文本生成器数据过多导致崩溃如何解决

回复:
user: user-1
content: codes定义那么多变量，难道看着不乱吗？

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

回复:
user: user-1
content: 引用 10 楼 lsh9982010 的回复:还有个问题  snprintf((char *)rdbuf, 8, "%d", a);  为什么不是 snprintf((char *)rdbuf, sizeof(rdbuf), "%d", a); 用sizeof()更好。但是注意前提是rdbuf是数组而不是指针（地址）。

user: user-0
content: 还有个问题  snprintf((char *)rdbuf, 8, "%d", a);  为什么不是 snprintf((char *)rdbuf, sizeof(rdbuf), "%d", a);

user: user-0
content: 谢谢各位，可以了

user: user-0
content: 引用 7 楼 cfjtaishan 的回复:[quote=引用 3 楼 lsh9982010 的回复:] snprintf((char *)rdbuf, 8, "%d", a);  这里是 char 要 unsigned char 额，这个char *是防止有警告的，最终字符串"1234"是放在rdbuf中的，rdbuf是unsigned char类型的。。你试一下输出的rdbuf是不是字符串"1234“;[/quote]     error C2664: “sprintf”: 不能将参数 2 从“int”转换为“const char *”

user: user-1
content: 引用 3 楼 lsh9982010 的回复:snprintf((char *)rdbuf, 8, "%d", a);  这里是 char 要 unsigned char 额，这个char *是防止有警告的，最终字符串"1234"是放在rdbuf中的，rdbuf是unsigned char类型的。。你试一下输出的rdbuf是不是字符串"1234“;

user: user-2
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-0
content: 提示 , unsigned char 不能转换为 char

user: user-3
content: 引用 2 楼 lsh9982010的回复:[quote=引用 1 楼 cfjtaishan 的回复:] snprintf((char *)rdbuf, 8, "%d", a); 有个问题，unsigned char a能表示1234;一个字节能表示的最大无符号数为256   我错了，应该是 unsigned char rdbuf[8]; uint16_t a = 1234;  void myIntToStr(rdbuf , a) { ; }  希望结果:rdbuf 为字符串 "1234"  [/quote] 直接itoa(a, (char*)rdbuf, 10);就可以了  需要包含stdlib.h头文件

user: user-1
content: snprintf((char *)rdbuf, 8, "%d", a); 有个问题，unsigned char a能表示1234;一个字节能表示的最大无符号数为256

user: user-0
content: snprintf((char *)rdbuf, 8, "%d", a);  这里是 char 要 unsigned char

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:snprintf((char *)rdbuf, 8, "%d", a); 有个问题，unsigned char a能表示1234;一个字节能表示的最大无符号数为256   我错了，应该是 unsigned char rdbuf[8]; uint16_t a = 1234;  void myIntToStr(rdbuf , a) { ; }  希望结果:rdbuf 为字符串 "1234"
user-0 提问: 新手关于scanf()的问题

回复:
user: user-0
content: 感谢，确实如此

user: user-1
content: 输入的c 2 3；c是通过getchar()给ch, 2, 3赋值给rows和cols 因为输入是行缓冲，即只有回车后c 2 3才会分别存放到ch , rows, cols内存里。 scanf返回值是2，但是换行符'\n'还在输入缓存里，因此最后'\n'赋值给ch，跳出while循环

user: user-2
content: 仅供参考：#include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }
user-0 提问: 求助,怎么通过函数，把一个字符串，赋值给另一个字符串，谢谢!

回复:
user: user-1
content: 引用 3 楼 lsh9982010 的回复:能不能这样  void f1(int id, unsigned char  *data) {   Data1[id] = data; }   然后这样调用 f1(2,data2);  谢谢！ 不可以的，需要使用strcpy或者strncpy或者memcpy，具体使用楼上有好的例子

user: user-2
content: strcpy((char*)Data1[id], (const char*)data);  需要加上#include <string.h> 头文件  不能直接Data1[id] = data;，因为这是在赋值指针，而不是拷贝指针指向的字符串

user: user-0
content: 引用 10 楼 cfjtaishan 的回复:void mystrcpy(unsigned char *dst, unsigned char *src) {     unsigned char *tmp = dst;      while((*tmp++ = *src++))        ; } 这样试试  一样出现这个警告 谢谢！

user: user-3
content: while((*tmp++ = *src++) != 0)        ; 那就不偷懒了。

user: user-4
content: 引用 7 楼 lsh9982010 的回复://¿½±´ void mystrcpy(unsigned char *dst, unsigned char *src) { 	unsigned char *tmp = dst;  	while(*tmp++ = *src++) 	{ 		; 	} }   编译  在  while(*tmp++ = *src++)   提示 warning:  #1293-D: assignment in condition  这是什么原因阿？ 谢谢！  while((*tmp++ = *src++) != '\0')  这样就没有warning了。其实跟原来一样

user: user-3
content: void mystrcpy(unsigned char *dst, unsigned char *src) {     unsigned char *tmp = dst;      while((*tmp++ = *src++))        ; } 这样试试

user: user-3
content: 引用 7 楼 lsh9982010 的回复://¿½±´ void mystrcpy(unsigned char *dst, unsigned char *src) { 	unsigned char *tmp = dst;  	while(*tmp++ = *src++) 	{ 		; 	} }   编译  在  while(*tmp++ = *src++)   提示 warning:  #1293-D: assignment in condition  这是什么原因阿？ 谢谢！ 这个警告可以忽略。不影响使用

user: user-0
content: //¿½±´ void mystrcpy(unsigned char *dst, unsigned char *src) { 	unsigned char *tmp = dst;  	while(*tmp++ = *src++) 	{ 		; 	} }   编译  在  while(*tmp++ = *src++)   提示 warning:  #1293-D: assignment in condition  这是什么原因阿？ 谢谢！

user: user-3
content: 引用 3 楼 lsh9982010 的回复:能不能这样  void f1(int id, unsigned char  *data) {   Data1[id] = data; }   然后这样调用 f1(2,data2);  谢谢！ 不能，因为Data1是字符串数组，不是指针数组。

user: user-5
content: strcpy  memcpy

user: user-3
content: void f1(int id, unsigned char  *data) {    strcpy(Data1[id-1], data);    //若id是对应的Data1的行数； } f1(1, Data2);   //调用f1实现Data2拷贝到Data1中。

user: user-3
content: 引用 4 楼 lsh9982010 的回复:void f1(int id, unsigned char  *data) {    strcpy(Data1[id-1], data);    //若id是对应的Data1的行数； }   好像单片机的 C51 ，没有 strcpy  这怎么办？  谢谢！ 那就自己写一个strcpy或memcpy吧 或者从库里找到strcpy或memecpy的源码；  找一下网上别人写的strcpy或memcpy源码；自己改一改或者不用改弄明白就可以拿来用。

user: user-0
content: void f1(int id, unsigned char  *data) {    strcpy(Data1[id-1], data);    //若id是对应的Data1的行数； }   好像单片机的 C51 ，没有 strcpy  这怎么办？  谢谢！

user: user-0
content: 能不能这样  void f1(int id, unsigned char  *data) {   Data1[id] = data; }   然后这样调用 f1(2,data2);  谢谢！
user-0 提问: 关于i++和++i

回复:
user: user-1
content: 引用 9 楼 qq_42324974 的回复:谢谢各位。大致明白了，可能我经验不够，等以后多加实践应该会理解更透彻 我没怎么明白，什么情况，为什么结果是３，１，３，我还是没明白

user: user-0
content: 谢谢各位。大致明白了，可能我经验不够，等以后多加实践应该会理解更透彻

user: user-2
content: 引用 7 楼 goldenhawking 的回复:进入实验室第一课，禁止学生使用连体++运算——只准出现在for语句里。所有移位、位运算全部按照自己的逻辑用括号，不要猜测优先级。 这是为了大工程的稳定性考虑。 这个有道理，也减低了维护的成本

user: user-3
content: 进入实验室第一课，禁止学生使用连体++运算——只准出现在for语句里。所有移位、位运算全部按照自己的逻辑用括号，不要猜测优先级。 这是为了大工程的稳定性考虑。

user: user-4
content: 未定义行为  https://blog.csdn.net/shenqixiaozi1234/article/details/11876219

user: user-5
content: 别处看到的，貌似挺有道理的： 在写代码中，如非必需，尽量避免后置形式，因为：前置形式避免了不必要的工作，它把值加1（或减1）后直接返回改变了的运算对象，而后置形式需要将原始值存储下来，以便返回这个未修改的原始值。如果我们不需要未修改的原始值时，那么后置形式的写法就是一种浪费。   对于正数和指针类型来说，编译器可能对这种额外的工作进行了一定的优化，但是对于相对复杂的迭代器来说，这种额外的工作就消耗巨大了。所以养成前置形式的好习惯，不仅不需要担心性能问题，而且写出的代码也符合编程的初衷。

user: user-6
content: 引用 2 楼 qq_42324974 的回复:感谢！ 对于下面这个问题还是不太理解。 不是说 i++ 是先赋值在 +1 吗 为啥这里就和 i=i+1 一样了呢 这个需要了解++的原理了。建议查一下书本找到介绍自增，自减的描述和实例。或者直接从网上查找一下；

user: user-0
content: 感谢！ 对于下面这个问题还是不太理解。 不是说 i++ 是先赋值在 +1 吗 为啥这里就和 i=i+1 一样了呢

user: user-6
content: printf("%d,%d,%d\n",++i,i++,++i); 对于这种的自增，建议不要研究了。也不用纠结了。因为跟参数入栈顺序有关，也就跟编译器有关。 if(ch>='0' && ch<='9')             cnt[ch-'0']++; 这个自增就是加1的意思；这儿cnt[ch - '0']++；等价cnt[ch-'0'] = cnt[ch -'0'] + 1;
user-0 提问: 大神二维数组&a[1]可以是&*(a+1)还是*(&a+1) 

回复:
user: user-1
content: 数组中形象的排列是这样的 0 1 2 3 4 5 6 7 8 9 关于楼上自信男孩所说的，p = a;类型不匹配，我感觉也是这样的，你既然能编译通过，那么说明p指向了数组中最开始的元素0，因为p是一个指向整型的指针，++p向后移动一个数字指向了1，所以第一个数字是1  p2通俗的来讲是一个行指针，一开始指向1行，也就是数字2这个位置，++p2向下移动一行，指向了4这个位置，所以第二个数字是4  最后一个输出是通过p2输出的，实际上就是通过p2来进行偏移得到的，p2指向4这个位置，向后偏移的距离为1*2+2=4.也就是向后取出p2位置向后移动4个整型的指针的所指向的数字，也就是8的位置，所以最后一个数字是8

user: user-2
content: printf("%d\n", p2[1][2]); [1]向下移动一行， [2]越界到下一行。 都是一组连续的内存块，画个图就明白了。

user: user-3
content: #include <stdio.h>  int main()  {      int a[5][2] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};      int* p = &a[0][0];      int (*p2)[2] = &a[1];      ++p;      ++p2;      printf("%d\n", *p);      printf("%d\n", **p2);      printf("%d\n", p2[1][2]);      return 0;  } p 不能直接p = a;因为类型不匹配。a是二维数组名，类型是 int (*)[2];而p是int类型。所以不匹配。如果你的编译器可以编译通过，说明编译器检查不严格；  p是int *所以p++是向后移动一个sizeof(int)字节。因此是向后移动一个元素，即1；  由于p2是指向a[1]的地址，即p2指向的内容是从元素2开始的。由于p2是int (*)[2]；所以p2++即向后移动2 * sizeof(int)个字节，即元素4的位置。 p2[1][2]其实对于p2第三行（注意前面有一个p2++, 即向后移动了一行，p2[1]即第三行，p[0]是第二行，p2的第一行是从a[1]开始的，即元素2开始的）已经“越界”了，因为下表只能是0， 1； 所以越界就是编程第四行的第一个元素。也就是a的第五行第一个元素，即8

user: user-4
content: http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组
user-0 提问: long long int 溢出问题，求指导

回复:
user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:pow函数的参数是double类型，double类型的有效数字个数是15 而 2^63=9223372036854775807 其有效数字个数已经超过15  谢谢！祝你明天没有BUG！

user: user-1
content: pow函数的参数是double类型，double类型的有效数字个数是15 而 2^63=9223372036854775807 其有效数字个数已经超过15

user: user-1
content: 2^63-1=9223372036854775807

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:浮点数格式 http://bbs.csdn.net/topics/390676437  好像不是有关浮点数的问题，整型溢出。 long long int bytes_of_long_long_int; long long int bits_of_long_long_int; long long int biggest_of_long_long_int; bytes_of_long_long_int = sizeof(long long int); bits_of_long_long_int = bytes_of_long_long_int * 8; biggest_of_long_long_int = pow(2, bits_of_long_long_int - 1) - 1; 好像是这段代码没有取得long long int的上限值。并且直接产生了溢出，biggest_of_long_long_int = pow(2, bits_of_long_long_int - 1) - 1;最后的-1好像没有生效。

user: user-0
content: 引用 3 楼 user-2 的回复:编译器老点了吧？  新下载的VS2017，应该不会出问题吧？

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

user: user-2
content: 编译器老点了吧？

user: user-0
content: 图片倒数第四行，long long int 上限出了问题。同样的代码，用在short int ，int， long int，上没有出现问题，请问这个错误的结果是出在了哪里？

user: user-0
user-0 提问: if多重嵌套结构程序运行问题

回复:
user: user-1
content: scanf("%1f",&flowerprice); 改为 scanf("%lf",&flowerprice); %和f之间是一个字母l，不是数字1 lf表示接收双浮点 1f表示接收一位浮点数， 如果你输入很大的，但是只接受1位数字，那还是很小的，这种情况一般单步调试，或者打印中间结果就可以发现问题了

user: user-2
content: scanf("%1f",&flowerprice);是lf不是1

user: user-3
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-4
content: //需要录入鲜花的价格     //scanf("%1f",&flowerprice);     scanf("%f",&flowerprice);  不是if else的问题。验证不是if else的问题很简单，就是把输入的flowerprice打出来，看看你输入的和输出的flowerprice是否一致，然后再找原因。      //需要录入鲜花的价格     scanf("%1f",&flowerprice);     printf("%f\n", flowerprice); 像这样打出来

user: user-5
content: scanf("%1f",&flowerprice); 改成 scanf("%f",&flowerprice);，因为1f 表示只是取地一个数字。
user-0 提问: 关于在C中的类似于" \u8fd4\u56de"字串转化为可识别的utf-8符串"返回"

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:其实不用转，输出来的内容就是UTF-8的中文编码，只是不知道你想要显示的终端用的是什么编码。例如我用Ubuntu 16.04来编译运行下面的程序，在我的终端下面显示的就是你需要的内容。 #include <stdio.h> #include <stdlib.h>  int main() { 	const char *str ="# \u8fd4\u56de\u662f\u5426\u627e\u5230 package\n<PREFIX>_LIBRARIES "; 	printf("%s", str); 	return 0; }  输出  # 返回是否找到 package <PREFIX>_LIBRARIES  如果你的终端显示是用GBK或者GB18030之类的，那么你就需要转换编码到对应的编码。C语言常用的库是iconv，函数使用方法http://man7.org/linux/man-pages/man3/iconv.3.html  谢谢你。。原来这也很简单啊， 看来不用去研究编码的问题的。。

user: user-1
content: 其实不用转，输出来的内容就是UTF-8的中文编码，只是不知道你想要显示的终端用的是什么编码。例如我用Ubuntu 16.04来编译运行下面的程序，在我的终端下面显示的就是你需要的内容。 #include <stdio.h> #include <stdlib.h>  int main() { 	const char *str ="# \u8fd4\u56de\u662f\u5426\u627e\u5230 package\n<PREFIX>_LIBRARIES "; 	printf("%s", str); 	return 0; }  输出  # 返回是否找到 package <PREFIX>_LIBRARIES  如果你的终端显示是用GBK或者GB18030之类的，那么你就需要转换编码到对应的编码。C语言常用的库是iconv，函数使用方法http://man7.org/linux/man-pages/man3/iconv.3.html
user-0 提问: 怎么让输入的数字出现在输出的提示文字中？

回复:
user: user-1
content: 两个%d对应一个end，另外，通过你的输出你也能看出其实已经得到了逆序数。只需稍微改动一下；  以下是一个简单的针对多位数的逆序： #include <stdio.h>  int main(void) {     unsigned int n, rn, tmp;     int digit;      scanf("%u", &n);     tmp = n;      rn = 0;     while (n) {         digit = n % 10;         rn = (rn * 10) + digit;         n /= 10;     }       printf("%u's revers number is %u\n", tmp, rn);      return 0; } 参考一下吧  当然最简单的就是字符串处理。即把输入的数字串以字符串的形式输入，最后输出也是逆序后的字符串。

user: user-2
content: printf("%d.....%d\n", n, end);
user-0 提问: 求助！一道C语言实验题

回复:
user: user-1
content: #include <stdio.h>  int s[21];  int Average(int n, int s[]); int input(int n, int s[]); int Count(int avg, int n, int s[]);  int main(int argc, char *argv[]) {     int i,j,k;     for(i=0;;i++)     {         j = input(21, s);         if(j==0)             return 0;         else         {             printf("%d ",j);             k=Average(j,s);             printf("%d ",k);             printf("%d\n",Count(k,j,s));         }     }     return 0; } int input(int n, int s[]) {     //int i,j=0,n=21;     int i,j = 0;      printf("输入数据:\n");     for(i=0; i < n;i++)     {         scanf("%d",&s[i]);         if(s[i]==0)             break;         else if (s[0]==0)             return 0;         else             j++;     }     return j; }  int Average(int n, int s[]) {     //int i,j,k;     int i;     float sum=0,avg;      for(i=0;i<n;i++)         sum+=s[i];     avg=sum/n;      return avg; }  int Count(int avg, int n, int s[]) {     int i,j=0;      for(i=0;i<n;i++)         if(s[i]>avg)             j++;     return j; }‘ Count函数需要先声明后使用，和input和Average一样。  另外，建议传递一个参数到input函数，保证输入的数据不会导致s越界。

user: user-2
content: 函数Count()在使用前没有声明，在main()函数前加一句int Count(int avg, int n, int s[]);声明一下就行了。

user: user-3
content: count这个函数没有声明，在main函数的前面声明一下就好了。

user: user-4
content: 需要增加声明