Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言九九乘法表

回复:
user: user-1

user: user-1
content: 你可以试试 这个方法看看是不是正确

user: user-1
content: #include<stdio.h> int main() { 	int a, b; 	int  n; 	while(scanf("%d",&n)!= EOF) 	{ 		for (a = 1; a <= n; a++) 		{ 			for (b = 1; b <= a; b++) 			{ 				printf("%d*%d=%d", a, b, a*b); 				if (a != b) printf("\t"); 				if (a == b) printf("\n"); 			} 		} 	} 	return 0; }

user: user-2
content: #include<stdio.h>  int main() {     int a, b;      for (a = 1; a <= 9; a++)     {         for (b = 1; b <= a; b++)         {             printf("%d * %d = %d", b, a, a*b);             printf("\t");         }             printf("\n");     }     return 0; } 不需要加判断，另外交换输出printf中，a, b的输出顺序；   #include<stdio.h>  /* int main() {     int a, b;      for (a = 1; a <= 9; a++)     {         for (b = 1; b <= a; b++)         {             printf("%d * %d = %d", a, b, a*b);             printf("\t");         }             printf("\n");     }     return 0; } */  int main(void) {     int i, j;      for (i = 1; i <= 9; i++) {         for (j = 1; j <= i; j++) {             printf("%d * %d = %d", j, i, i * j);             putchar('\t');         }         printf("\n");     }     return 0; }

user: user-3
content: 空格有要求吗            。

user: user-4
content: 仅供参考：#include <stdio.h> #include <string.h> int main() {     int a,b;     char s[73],t[10];      for (a=9;a>0;a--) {         s[0]=0;         for (b=a;b<10;b++) {             sprintf(t," %dx%d=%d",a,b,a*b);             if (a==2 && b==5) strcat(s," ");             strcat(s,t);             if (a==1 && b>=4) strcat(s," ");         }         printf("%60s\n",s);     }     return 0; } //                                                      9x9=81 //                                               8x8=64 8x9=72 //                                        7x7=49 7x8=56 7x9=63 //                                 6x6=36 6x7=42 6x8=48 6x9=54 //                          5x5=25 5x6=30 5x7=35 5x8=40 5x9=45 //                   4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36 //             3x3=9 3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27 //       2x2=4 2x3=6 2x4=8  2x5=10 2x6=12 2x7=14 2x8=16 2x9=18 // 1x1=1 1x2=2 1x3=3 1x4=4  1x5=5  1x6=6  1x7=7  1x8=8  1x9=9

user: user-5
content: 严格对照一下标准答案
user-0 提问: 求证素数

回复:
user: user-1
content: 引用 4 楼 susususu2 的回复:谢谢，老赵有两下子！ 虽然我听着很受用；但估计仍然解决不了楼主的问题。

user: user-0
content: 谢谢，老赵有两下子！

user: user-1
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-0
content: 老赵，介绍一些检验素数的办法，位数在万位以上，蟹蟹。

user: user-1
content: 数论
user-0 提问: 结构体数组的插入与删除，插入部分结果总出错，请各位大神帮忙看一下

回复:
user: user-1
content: stu[a].num=10113;     strcpy(stu[a].name ,"Chu");     stu[a].score =98; 直接修改了数据，怎么会不重复

user: user-2
content: #include<stdio.h> #include<string.h>  struct Student {     int num;     char name[20];     int score; };  #define MAX_STU_NUM 20  int get_cur_stu_num(struct Student *pstu); void print_stu_info(struct Student *pstu, int nums);  int main() {     struct Student stu[MAX_STU_NUM] = {         {10101, "Zhao", 89},         {10102, "Qian", 90},         {10103,"Sun",93},         {10104,"Li",94},         {10105,"Zhou",95},         {10106,"Wu",96},         {10107,"Zheng",97},         {10108,"Wang",98},         {10109,"Feng",99},         {10110,"Cheng",100}     };     struct Student tmp;     int i, j, a, x, cur_nums;      cur_nums = get_cur_stu_num(stu);     print_stu_info(stu, cur_nums);      printf("   ---要插入的数据下标---\n");      scanf("%d",&a);     if (a > MAX_STU_NUM - 1) { /*check array's index*/         printf("Overflow!\n");         return 0;     }     tmp.num = 10113;     strcpy(tmp.name ,"Chu");     tmp.score  = 98;      if (a > cur_nums) {         stu[cur_nums] = tmp;     }     else {         for (j = cur_nums + 1; j > a; j--)             stu[j] = stu[j-1];         stu[a] = tmp;     }     cur_nums++;      print_stu_info(stu, cur_nums);      printf("   ---要删除的数据下标---\n");     scanf("%d",&x);     if (x < cur_nums) {         for (i = x; i < cur_nums; i++)             stu[i] = stu[i+1];     }     cur_nums--;     print_stu_info(stu, cur_nums);       return 0; }  int get_cur_stu_num(struct Student *pstu) {     int i;      for (i = 0; i < MAX_STU_NUM; i++)         if (pstu[i].num <= 0)             break;      return i; }  void print_stu_info(struct Student *pstu, int nums) {     int i;      printf("   学号    姓名   成绩\n");     for(i=0;i<nums;i++)         printf("%7d%8s%6d\n", pstu[i].num, pstu[i].name, pstu[i].score); } 上面的代码是根据我的想法改的。可以参考一下； 如果直接将插入的数据放到数组里，肯定会将原来的数据覆盖，所以先要放到一个临时的变量里，然后在插入数组里。

user: user-3
content: #include<stdio.h> #include<string.h> struct Student { int num; char name[20]; int score;  }; int main() { struct Student stu[20]={{10101,"Zhao",89},{10102,"Qian" ,90},{10103,"Sun",93},{10104,"Li",94}, {10105,"Zhou",95},{10106,"Wu",96},{10107,"Zheng",97},{10108,"Wang",98},{10109,"Feng",99},{10110,"Cheng",100}}; int i; printf("   学号    姓名   成绩\n"); for(i=0;i<10;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score);  printf("   ---要插入的数据下标---\n"); int a,j;      scanf("%d",&a);     for(i=0; i<11; i++)  //不知道为啥结果总是被覆盖         {               if(i==a)               {                   for( j=11; j>i; j--)                   {                       stu[j]=stu[j-1];                   }                    stu[a].num=10113;     strcpy(stu[a].name ,"Chu");     stu[a].score =98;             }           }   printf("   学号    姓名   成绩\n");     for(i=0;i<11;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score);  printf("   ---要删除的数据下标---\n");     int x;     scanf("%d",&x);     for(i=x;i<10;i++)   stu[i]=stu[i+1]; printf("   学号    姓名   成绩\n"); for(i=0;i<9;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score);   return 0; }
user-0 提问: C语言有些问题求解

回复:
user: user-1
content: 之所以差别很大，主要是浮点数和整型数在内存里的存放格式是不一样的。对于整型数，我们比较好理解，但是对于浮点数，因为它分为整型和小数部分，所以在内存里需要区分，自然存放的格式不一样了。 建议查一下浮点数在内存里的存放格式，可以找到这个问题的答案。

user: user-1
content: 引用 4 楼 susususu2 的回复:printf语句不属于c语言，书上是这样写的。 这话不要这么说，需要标明是那本书里的文字描述，不然不能证明这句话的正确性。 用C语言的朋友，经常使用这个函数，怎么能说它不属于C语言呢?

user: user-2
content: printf语句不属于c语言，书上是这样写的。

user: user-3
content: 这个代码实际是没有强制转换，只是printf的入参不一样，导致结果并不是想要的

user: user-4
content: 不会强制转换的。printf的第一个参数一定是字符指针，其他参数类型编译器不知道，所以不知道怎么转换，于是就不转换了

user: user-5
content: 浮点数格式 http://bbs.csdn.net/topics/390676437
user-0 提问: 单链表节点删除问题

回复:
user: user-0
content: 引用 2 楼 qq_38204686 的回复:应该是你代码有问题 建议调试  还有就是 能把你代码贴上来么 谢谢您，谢谢你

user: user-0
content: /////////////////////////删除节点函数 struct students *Delete(struct students *p) { 	struct students *pNewHead = p; 	struct students *pSecLink = pNewHead;		//读取两次此单链表，并让 pNewLink 链的节点读取比 ph 链晚一个节点。 	struct students *ph = p;			//原始链表，读取数据。 	printf("请输入要删除学生的学号："); 	int iNum = 0; 	scanf("%d", &iNum); 	int iCount = 0;		//用来错开两条链表的空间，以方便节点删除后的连接。 	int iJudgeLinkPlace = 0;		//标记删除的节点是 链头还是其他节点，链头用1标记，链身和链尾都用2表示 	while (ph != NULL) 	{ 		if (iNum == p->iNum) 		{ 			iJudgeLinkPlace = 1; 			pNewHead = p->pNext;  			break; 		} 		else if (iNum == ph->iNum) 		{ 			iJudgeLinkPlace = 2; 			pSecLink->pNext = ph->pNext;  			break; 		} 		else 		{ 			iCount++; 			ph = ph->pNext; 			if (iCount >= 2) 			{ 				pSecLink = pSecLink->pNext; 			} 		} 	} 	switch (iJudgeLinkPlace) 	{ 	case 1: 	{ 			  struct students *pNewL = pNewHead; 			  do{ 				  pNewL->iNum--; 				  pNewL = pNewL->pNext; 			  } while (pNewL != NULL); 			  break; 	} 	case 2: 	{ 			  struct students *pNewLMid = pSecLink->pNext; 			  if (pNewLMid != NULL) 			  do{ 				  pNewLMid->iNum--; 				  pNewLMid = pNewLMid->pNext; 			  } while (pNewLMid != NULL); 			  break; 	} 	}  	return(pNewHead); } 这是节点删除函数，完整的有点长

user: user-1
content: 应该是你代码有问题 建议调试  还有就是 能把你代码贴上来么

user: user-0
content: 有大佬吗？兄弟，姐妹啊，大哥大姐啊。 叔叔阿姨啊，怎么回事？
user-0 提问: 感觉自己的编程白学了

回复:
user: user-1
content: 哈哈哈，学好理论，然后会自己搞搞就可以了。。等出来工作后，被老大怼几次后，就会进步飞快了

user: user-2
content: 我也想当学生。

user: user-3
content: 第九题题目就错了 ， C语言是严格区分大小写的； 大写B没有定义，怎么计算

user: user-4
content: 你的电脑安装成Ubuntu了吗

user: user-5
content: 是应该为9啊，但实际编程肯定不会这么写的

user: user-6
content: 第9题a+B，B未定义，所以是错的

user: user-7
content: 桌面背景很好看  你们老师也不错了  没给你们留算法题

user: user-8
content: 我怎么感觉第9题：a+B=69 呢？

user: user-9
content: 这些题没什么呀。

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

user: user-11
content: 第9题是逗号运算符， 最后一位是最终结果，，但最后一位的变量一般与前几位的结果有关
user-0 提问: c在sublime里能像python一样配置输入输出新建窗口显示么

回复:
user: user-1
content: {      "encoding":"utf-8",      "cmd": "cmd /c g++ -fexec-charset=GBK \"${file}\" -o \"${file_path}/${file_base_name}\" && start cmd /c \"\"${file_path}/${file_base_name}\" && pause\"",      "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",      "working_dir": "${file_path}",      "selector": "source.c++",      "variants":      [          {              "name": "Run",             "cmd": "cmd /c g++ -fexec-charset=GBK \"${file}\" -o \"${file_path}/${file_base_name}\" && start cmd /c \"\"${file_path}/${file_base_name}\" && pause\""         }      ]  } 这是我的配置，拿走不谢

user: user-2

user: user-0
user-0 提问: makefile 编译效率问题

回复:
user: user-0
content: gcc编译的时候是不是对待.o文件只是进行链接处理,所以才不会像直接编译.c文件那样.

user: user-1
content: Makefile 就是为了解决所有文件重复编译的问题，，会根据时间截决定该文件是否需要重新编译， 最终链接的还是.o文件  gcc -o app add.c div.c mul.c sub.c main.c -I include/  是直接生成了可执行文件    集预处理 编译 汇编 链接 于一体  gcc -c add.c -I include  是产生了中间文件.o文件  最终将.o文件链接在一起   这是Makefile 就会起到作用

user: user-1
content: 引用 2 楼 Simpledcc 的回复:gcc编译的时候是不是对待.o文件只是进行链接处理,所以才不会像直接编译.c文件那样. 不只是简单的链接处理  ，，，我知道的一点是 会进行标识符检查，比如变量的重复定义，因为每个.cpp文件生成一个.o文件可以，单独编译时没问题，当这些.o文件链接在一起，可能会出现个这种问题 。 （类的静态数据成员初始化：要是初始化过程放到.h文件中，，很有可能导致重复定义）  只针对 “.o文件只进行链接处理” 的解释
user-0 提问: [Error] expected '=', ',', ';', 'asm' or '__attribute__' before '{' token

回复:
user: user-0
content: 谢谢老哥 。。。

user: user-1
content: 猜测  void init 加个; 或者加个大括号

user: user-0
content: 这是错误的提示
user-0 提问: 贪心算法求最短路径，输入不同地点名称，显示最短距离均为零，求代码纠错，谢谢！！！

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

user: user-0
content: 求解答……
user-0 提问: 把该字符串转换成等价整型值求解

回复:
user: user-1
content: 引用 5 楼 cfjtaishan 的回复: char s[] = "1a0c2b"; sprintf(s, "%x", tmp); printf("%x", tmp);  利用sprintf或snprintf函数更直接，不用一个个字符解析。 错了，是使用sscanf char s[] = "1a0c2b"; int tmp; sscanf(s, "%x", &tmp); printf("%x", tmp);

user: user-1
content: char s[] = "1a0c2b"; sprintf(s, "%x", tmp); printf("%x", tmp);  利用sprintf或snprintf函数更直接，不用一个个字符解析。

user: user-2
content: 如果使用MFC，就可以用CString类来处理这个问题就非常简单了。

user: user-3
content: 简单做了个，供参考 #include <iostream>  int change(const char* str, int len);  int main() { 	const char str[] = "1a0c2b"; 	int v = change(str, strlen(str)); 	printf("%d", v); 	return 0; }  int change(const char* str, int len) { 	 	//没做参数检查 	//没对字符串中含有非法字符检查（不是数字和abcdef） 	 	int iret = 0; 	for (int i = 0; i < len; i++) 	{ 		iret *= 16; 		unsigned char uc = str[i]; 		if (uc >= '0'&& uc <= '9') 			iret += uc - '0';  //数字字符转数值 		else if (uc >= 'a' && uc <= 'f') 			iret += uc - 'a' + 10; //字母转数值 		else if (uc >= 'A' && uc <= 'F') 			iret += uc - 'A' + 10; //大写字母转数值 		else 			;//出错处理没做  	} 	return iret; }

user: user-3
content: 实现把字符串当中的16进制数字，转换成10进制的数值？

user: user-1
content: #include <stdio.h> #include <string.h> #include <math.h>  int find(char *, char *, int);  int main() {     int i, t;     unsigned int num;     char a[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f'};     char s[] = "1a0c2b";      num = 0;     t = strlen(s);     printf("t = %d\n", t);     for(i = 0; i < t; i++)         num = num + find(s,a,i) * pow(16, t-i-1);     printf("%#x\n", num);     return 0; }  int find(char *x, char *y, int z) {     int i;     for(i = 0; i < 16; i++)         if(x[z] == y[i])             break;     printf("%d\n", i);     //return (i-1);     return i;   //直接返回i，而不是i-1 } 实参a并不是字符串，因为字符串结束标记是'\0'，而数组a没有'\0'，自然也不能用strcmp find函数直接返回i，而不是i-1; 以上的代码参考一下吧

user: user-4
content: int find(char *x, char *y, int z) {     int i;     for(i = 0; i < 13; i++)         if(x[z] == y[i])             break;     return i; }
user-0 提问: 数据结构 C 二进制数转化为十进制

回复:
user: user-1
content: Pop函数中，if(s->top = s->base) 中的“=”应为“==”

user: user-2
content: 引用 2楼我是你的主体 的回复:但是我把语句中\n删除掉，也一样不能运行。刷新输出缓存区是什么意思?在后面再加一个 print,随便输出点什么，看看是否正常输出

user: user-0
content: 但是我把语句中\n删除掉，也一样不能运行。刷新输出缓存区是什么意思?

user: user-3
content: 因为你把'\n'放在了前面，没有刷新输出缓冲区
user-0 提问: C语言编译执行返回255(0xFF)且时间为2秒多是怎么回事?

回复:
user: user-0
content: 知道怎么回事了， 声明了指针变量后对给它申请内存，谢谢。

user: user-1
content: main函数里声明的结构体指针是这野指针，你传参传过去，还是对野指针操作
user-0 提问: C语言 不用#怎么输出Hello，World！

回复:
user: user-1
content: 我也想知道

user: user-2
content: 用TC或BC生成，在DosBox中运行：int main() {  short int s[12]={0x0748,0x0765,0x076c,0x076c,0x076f,0x072c,0x0757,0x076f,0x0772,0x076c,0x0764,0x0721};  int i;  short int *p=0xB8000000L;// *前面可能还得加far  for (i=0;i<12;i++) p[i]=s[i];  return 0; }

user: user-3
content: 输出函数 对话框函数 · · ·

user: user-4
content: 百度 如何不借助第三方库在屏幕上输出
user-0 提问: VS2010到fgetc时总是错误

回复:
user: user-1
content: 对fopen返回值加判断

user: user-2
content: 你的 incode.txt 文件在哪里

user: user-0
content: 求助，大佬们，帮帮忙吧

user: user-0
content: 不知道，原来的作业都是这么写的，也过了，现在跑原来的作业也是不行

user: user-3
content: fopen的返回值为空么?
user-0 提问: 一个小问题

回复:
user: user-1
content: 后一个if包括在前面的if里了

user: user-0
content: 诶还是有点不对，这个前一个if不运行，后一个if还是可以运行的，这不是顺序结构吗

user: user-0
content: 明白了，多谢

user: user-1
content: if(i％2==1) 当i到1时才运行 第一次输入0时，i=0，if语句不运行
user-0 提问: 求解

回复:
user: user-1
content: 如果你不想改变实参的值（La，Lb）， 那就在前面加上 const 修饰符： void MergeList_Sq(SqList *La,const SqList *Lb,const SqList *Lc);  如果按照你的理解， 即不带地址符的话（ void MergeList_Sq(SqList *La,SqList Lb,SqList Lc);）, 这样会有重新创建La和Lc 的对象， 这是对性能有比较大的影响的。

user: user-2
content: 试试便知                   。
user-0 提问: C语言编写windows程序

回复:
user: user-1
content: 我用c-free运行挺好的啊！

user: user-2
content: 代码没问题，不过要用WIN32应用程序，而不是控制台应用

user: user-3
content: 引用 4 楼 JILAU_WHO_AM_I_Q234 的回复:[quote=引用 3 楼 赵4老师的回复:]#pragma comment(lib,"gdi32") #pragma comment(lib,"user32") //... 还是不行，还是原来那个错误[/quote] 什么编译器？？？？

user: user-0
content: 引用 3 楼 赵4老师的回复:#pragma comment(lib,"gdi32") #pragma comment(lib,"user32") //... 还是不行，还是原来那个错误

user: user-4
content: #pragma comment(lib,"gdi32") #pragma comment(lib,"user32") //...

user: user-0
content: 引用 1 楼 赵4老师的回复:#pragma comment(lib,"gdi32") //... 没用啊

user: user-4
content: #pragma comment(lib,"gdi32") //...
user-0 提问: 关于栈的动态初始化的问题

回复:
user: user-1
content: 栈的base和top是两个指针，分别用于指向栈底和栈顶，运用指针加减来实现数据的存入和输出；但是这两个都是野指针或者指向NULL的不可以用的空间，所以要用malloc申请堆上的空间，用于存放入栈的数据。 可以写成这样， S->top-S.base==S->stacksize是可以的，在你的程序没有问题； 但是，还是建议写成S->top-S.base >=S->stacksize 因为上面的写法是下面写法的子集。即上面条件满足的，在下面的判断表达式里也是真。

user: user-2
content: 问题1：为什么在初始化的时候要给S->base分配那么多空间？这块不是太理解。S->top和S->base是共用一块空间吗。是像数组那样先分配一大堆空间然后S->base就是相当于数组名字指向第一块空间，S->top++就移动向S->base的下一块空间。 分配空间的大小当然是预留了； top base一个是栈顶，一个是栈底，初始化的时候，是空栈，没有存东西，所以top和base是指向同一个位置的。 你的理解没错。  问题2：Push操作中，S-top-S.base>=S->stacksize是不是可以改写为S->top-S.base==S->stacksize。Push的时候相等就又追加分配了，怎么可能超过S->stacksize?  因为push的时候，可能放入不止一个元素，所以有可能会超出，当然如果超出了说明上一次压栈就已经出问题了，应当在上一次压栈前就分配。

user: user-3
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
user-0 提问: C语言小问题

回复:
user: user-1
content: ((fp = fopen("G:\\Work\EP17.mp4","ab"))==NULL  // // 改为 ((fp = fopen("G:\\Work\\EP17.mp4","ab"))==NULL  //有一个斜杠只写了一个，要双斜杠。

user: user-2
content: 我在Linux上运行时没有问题的，a：表示追加数据永远在未见末尾，读取还是从头开始读的

user: user-3
content: rb

user: user-4
content: 路径分隔一律写两个反斜杠

user: user-5
content: 通过检查errno判断失败原因，进而再作分析  http://en.cppreference.com/w/c/io/fopen
user-0 提问: C语言的sleep函数－－linux

回复:
user: user-0
content: 引用 2 楼 destory27的回复:并不是有东西读就会有输出，不然CPU的负载过大，它会先将待输出的内容放到输出缓冲区上，，等到缓冲区满之后输出，，但遇到操纵符会提前输出 万分感谢

user: user-0
content: 引用 4 楼 赵4老师的回复:#include<stdio.h> #include<unistd.h> int main() {                  while(1)     {                   printf("-");fflush(stdout);         usleep(100000);     }           return  0; }  活人是永远不会被尿憋死的。 谢谢解答！

user: user-0
content: 引用 1 楼 das白的回复:linux 下print输出遇到换行或者缓冲区满才会输出 也可以手动fflush Thank you very much!

user: user-1
content: 加个控制符吧，不然得等到缓冲区满才会输出

user: user-2
content: Linux系统是有缓冲区的，加上\n就可以了

user: user-3
content: 并不是有东西读就会有输出，不然CPU的负载过大，它会先将待输出的内容放到输出缓冲区上，，等到缓冲区满之后输出，，但遇到操纵符会提前输出

user: user-4
content: #include<stdio.h> #include<unistd.h> int main() {                  while(1)     {                   printf("-");fflush(stdout);         usleep(100000);     }           return  0; }  活人是永远不会被尿憋死的。

user: user-5
content: linux 下print输出遇到换行或者缓冲区满才会输出 也可以手动fflush
user-0 提问: 大家看一看这该怎么办

回复:
user: user-1
content: #include <stdio.h> int main() { 	char s[100] = { "Our teacher teach C language!" }; 	int i, j; 	for (i = j = 0; s[i] != '\0'; i++) 	if (s[i] != ' ') 		s[j++] = s[i]; 	s[j] = '\0'; 	printf("%s\n", s); 	return 0; }

user: user-0
content: 楼上的老哥谢了，我明白了
user-0 提问: 赐教

回复:
user: user-1
content: 多长时间取决于你每天花多少时间，我觉得有万行代码量（自己做习题或者小项目），就基本掌握C语言并具有一定解决问题的能力了。

user: user-2
content: 搜“一万小时定律”

user: user-2
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-3
content: 关键你要写哪方面的软件，我还是推荐MFC，我一直用它
user-0 提问: 用的是vc++6.0,为什么老是显示max is 2

回复:
user: user-1
content: #include <stdio.h> int max(float x, float y);  void main() { 	float a, b; 	int c; 	scanf("%f%f", &a, &b); // 去掉逗号。 	c = max(a, b); 	printf("Max is %d\n", c); }  int max(float x, float y) { 	float z; 	z = x > y ? x : y; 	return(z);    // 这里的强制转换不安全。 }

user: user-2
content: c应该改成float或者double类型，输出建议使用%lf

user: user-3
content: 。。。。。。。

user: user-4
content: 4楼应该是正解了吧

user: user-5
content: scanf("%f,%f",&a,&b); 你输入的格式应该是有逗号的

user: user-0
content: 我知道会进行强制转换，但是无论是怎么输入任意的两个数字，他都会显示max is 2，我在想是不是代码错了

user: user-6
content: 由于你max函数返回值和c都是int类型，比较后会将浮点数转换成整数

user: user-7
content: c是int 建议改成float
user-0 提问: 这个代码有错吗，我想讲这个整型数组从大到小输出，运行时不行

回复:
user: user-1
content: 你这个会越界          。

user: user-0
content: 非常感谢楼上所说的，我明白了，看来我的想法没有错，细节反而错了，真的十分感谢

user: user-2
content: 代码没错，输出有问题啊 你的输出代码 printf("%d\n",a); 只是输出了数组a的首地址，要输出数组a中的所有元素 修改为 	for (int i = 0; i < N; ++i) 	{ 		printf("%d\n", a[i]); 	}

user: user-3
content: http://jingyan.baidu.com/article/6525d4b13f920bac7d2e9484.html

user: user-0
content: 我想用的是冒泡法，相邻的数组之间进行比较
user-0 提问: C语言windows编程

回复:
user: user-1
content: 正如楼上所说 HGDIOBJ GetStockObject(   _In_ int fnObject ); 返回值是HGDIOBJ，为GDI对象的句柄。 MSDN上说 If the function succeeds, the return value is a handle to the requested logical object. 即如果GetStockObject()函数执行成功，则返回值是所需逻辑对象的句柄。 你的代码 wndclass.hbrBackground = (BRUSH)GetStockObject(WHIHTE_BRUSH); 中，要获取系统自带的白色画刷，因此GetStockObject()函数应该返回画刷的句柄，即HBRUSH

user: user-2
content: 应该是HBRUSH吧，是个句柄
user-0 提问: 求救，我这个程序为啥一直出现烫烫

回复:
user: user-1
content: 主要是你的程序里面的字符串char name[21]没有合法的结尾符“\0”，所以就使程序跑出界限，同时显示乱码“烫烫”！改进如下：这样可以了吧O(∩_∩)O

user: user-2
content: 烫烫  啥意思

user: user-3
content: 在 DEBUG　版本中，变量之间是不连续的，为初始化的变量和变量之间的边界都是被编译器处理过的。 没有初始化的变量，DEBUG　会初始化为　0xCC 的，这个值和 烫 的内码一致。

user: user-3
content: for(i=1;i<=n;i++);  printf("%s\n",a[i].name); 去掉 for 后面的分号就可以了。 写程序的时候要规范。我在 for 和 if 之后的语句块一律使用 {}； 就算是是空循环也把分号写在 {;} 里面。

user: user-0
content: 他出的是空，什么都没有，是程序有问题么？

user: user-4
content: 给struct student加上默认构造函数，给里边的字符串初始化试试 示例如下： struct student {     char name[21];     int score;     student()     {         memset(name ,0, 21);         score = 0;     } }

user: user-5
content:  * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory 漱 * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers 涵? * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory 很? * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger 撅饰 * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files 烫烫 * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory 屯屯 * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory 葺葺 * 0xDDDDDDDD : Used by Microsoft's free() or delete to mark freed heap memory 蕲蕲 * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash  * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory  * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory

user: user-6
content: 你的变量内存中没有初始化，值为0xCCCCCCCC  而两个字节的0xCCCC的编码对应的中文就是 烫 ， 所以你的程序里会有一堆烫烫

user: user-7
content: #include<stdio.h>  struct student {     char name[21];     int score; };  int main() {     struct student a[100],t;     int i,j,n;      scanf("%d",&n);     for(i=1;i<=n;i++)         scanf("%s %d", a[i].name,&a[i].score);     for(i=1;i<=n-1;i++)         for(j=1;j<=n-i;j++)             if(a[j].score<=a[j+1].score)             {                 t=a[j];                 a[j]=a[j+1];                 a[j+1]=t;             }     for(i=1;i<=n;i++)    /*去掉这儿的分号*/         printf("%s\n",a[i].name);     getchar();     getchar();     return 0; } 建议i从0开始，因为数组的下标都是从0开始的。另外，对n的值进行检查，若大于100，则会出现数组越界，因此n不能超过100;
user-0 提问: 求助一个挺诡异的问题，使用malloc函数分配内存之后，一个不相关的字符数组的值被修改

回复:
user: user-0
content: 是因为char *pelements[] = {NULL};这个数组长度是1，后面使用的时候越界了。

user: user-1
content: 请问你的那个={null}那儿是什么意思呢

user: user-2
content: 测试了你的代码，没有出现第三个17行没有任何输出的情况，第三个17行输入和前面的一样。 从你的代码逻辑上分析，没有任何地方对pbuffer指针进行赋值修改操作，所以buffer的内容是不会被修改的。

user: user-3
content: char *pelements[] = {NULL}; 这个数组只有一个元素，后来 pelements[index] = (char *)malloc(320);  的时候，index大于0了，pelements[index]用的是哪里的空间呢？

user: user-0
content: 程序里几行print语句都是一样的，就是打印buffer这个字符数组的值，让人百思不得解的是为什么调用malloc给另一个指针分配内存之后，buffer的值就像被覆盖了一样。

user: user-0
content: 程序的执行结果是这样的：  Line 15: 1.5+2*3^4/-5 Line 17: 1.5+2*3^4/-5 Line 20: 1.5+2*3^4/-5 Line 15: 1.5+2*3^4/-5 Line 17: 1.5+2*3^4/-5 Line 35: 1.5+2*3^4/-5 Line 15: 1.5+2*3^4/-5 Line 17:
user-0 提问: 想问一下关于C的一个问题！

回复:
user: user-1
content: 引用 2 楼 qq_40455655 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] if(current_1->pnext=NULL) 这句有问题，判断语句变成了赋值语句；  通过error提示感觉是参数类型不匹配呢 是这样的，我定义了一个user结构体，然后用开始的定义是user *head和user *current，然后就显示类型不匹配… 那个判断变成赋值是我的问题，谢谢啦~[/quote] 把你的代码，数据结构定义再贴出来一些，尤其是提示这些error的函数声明

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:if(current_1->pnext=NULL) 这句有问题，判断语句变成了赋值语句；  通过error提示感觉是参数类型不匹配呢 是这样的，我定义了一个user结构体，然后用开始的定义是user *head和user *current，然后就显示类型不匹配… 那个判断变成赋值是我的问题，谢谢啦~

user: user-1
content: if(current_1->pnext=NULL) 这句有问题，判断语句变成了赋值语句；  通过error提示感觉是参数类型不匹配呢
user-0 提问: C语言小问题

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:#include <stdio.h> #include <stdlib.h> #include <ctype.h>  #define LEN 100  int main(int argc, char **argv) {     if (argc < 3) {         fprintf(stdout, "too less parameters!\n");         return 0;     }     char ch = argv[2][0];     int i = 1,j = 1;     switch(argv[1][0])    //从0开始吧     {         case 'p':             puts(argv[2]);             break;         case 'u':             while(ch != '\0')             {                 ch = toupper(ch);                 putchar(ch);                 ch = argv[2][i++];             }             break;         case 'l':             while(ch != '\0')             {                 ch = tolower(ch);                 putchar(ch);                 ch = argv[2][j++];             }             break;      }      return 0; } 建议加上对argc的判断，argc存放输入的个数； argv存放的字符串里没有回车符，因为回车符不会加入到argv中，所以使用字符串结束标记，因为argv存放的是字符串 谢谢

user: user-0
content: 引用 3 楼 当凸遇见凹凹的回复:弱弱的问一句，你这定义二维数组的时候[2][0]？？？0个元素？ 是表示第三个字符串的第一个元素

user: user-1
content: 弱弱的问一句，你这定义二维数组的时候[2][0]？？？0个元素？

user: user-2
content: http://bbs.csdn.net/topics/390469280

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <ctype.h>  #define LEN 100  int main(int argc, char **argv) {     if (argc < 3) {         fprintf(stdout, "too less parameters!\n");         return 0;     }     char ch = argv[2][0];     int i = 1,j = 1;     switch(argv[1][0])    //从0开始吧     {         case 'p':             puts(argv[2]);             break;         case 'u':             while(ch != '\0')             {                 ch = toupper(ch);                 putchar(ch);                 ch = argv[2][i++];             }             break;         case 'l':             while(ch != '\0')             {                 ch = tolower(ch);                 putchar(ch);                 ch = argv[2][j++];             }             break;      }      return 0; } 建议加上对argc的判断，argc存放输入的个数； argv存放的字符串里没有回车符，因为回车符不会加入到argv中，所以使用字符串结束标记，因为argv存放的是字符串
user-0 提问: sscanf使用问题求解！

回复:
user: user-1
content: 楼主，与其让各位大神在这里八仙过海各显神通，还不如从源头上避免这种情况。 解决方法: 尽量让%s(读取字符串）成为格式化输入的最后一部分。就是说%s后面就不要加内容了。 或者，在源字符串的最后的##前面加上空格。如"sum=283,haha ##"，就可以不用读取到##了

user: user-2
content: 最多接受99个字符。因为buf2定义为char buf2[100];最后一个字符留给结尾‘\0’

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:sscanf(p, "##sum=%d; no.%d; len=%d; %s", &sum, &num, &len, buf2); 改为 sscanf(p, "##sum=%d; no.%d; len=%d; %99[^#]", &sum, &num, &len, buf2); 测试了下可以，请问%99是什么意思？

user: user-3
content: #include <stdio.h> #include <string.h>  int main(void) {     char *p = "##sum=283; no.200; len=64; ccled##";     char buf2[100];     int sum = 0;     int num = 0;     int len = 0;     memset(buf2, 0, sizeof(buf2));     sscanf(p, "##sum=%d; no.%d; len=%d; %s##", &sum, &num, &len, buf2);     buf2[strlen(buf2) - 2] = 0;    /*去掉##*/     printf("%d; %d; %d; s:%s\n", sum, num, len, buf2);     return 0; } 为啥不直接去掉呢，buf2[strlen(buf2) - 2] = 0;

user: user-2
content: sscanf(p, "##sum=%d; no.%d; len=%d; %s", &sum, &num, &len, buf2); 改为 sscanf(p, "##sum=%d; no.%d; len=%d; %99[^#]", &sum, &num, &len, buf2);

user: user-4
content: sscanf(p, "%*[^0-9]%d%*[^0-9]%d%*[^0-9]%d%*[^ ] %[^#]", &sum, &num, &len, buf2);
user-0 提问: 新手求助C语言链表操作

回复:
user: user-1
content: int QueryLinkList(LinkList *L,int x) {     if (!L || !(*L))         return 0;      LinkList p = *L;      if (p->data == x)    /*check header */         return 1;     else         p = p->next;      while (p && p->data < x && p != *L)         p = p->next;      if (p->data == x)         return 1;     return 0; } 循环单单链表的查找，个人建议为了模块化，查找只做查找，插入操作领定义函数

user: user-2
content: 链表不适合折半查找，所以从头开始查吧，我只给你关键的伪代码，表达意思，真正的程序你要自己补全：  while (p->data < x) { 	pre = p; 	p = p->next; 	if (p == L) 		break; }  if (p->data == x) 	return 1;  n = new LinkList; pre->next = n; n->next = p; n->data = x;  return 0;

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

user: user-1
content: 建议自己还要尝试写写，调试一下；这样对链表操作才能了解更多，以后才能独自写出符合特定需求的链表；

user: user-1
content: /*不带哨兵的*/ int QueryLinkList(LinkList *L,int x) {     if (!L || !(*L))         return 0;      LinkList p = *L;      while (p) {         if (p->data == x)             return 1;         p = p->next;     }      return 0; }  /*带哨兵的*/ int QueryLinkList(LinkList *L,int x) {     if (!L || !(*L))         return 0;      LinkList p = *L->next;      while (p) {         if (p->data == x)             return 1;         p = p->next;     }      return 0; }

user: user-0
content: int QueryLinkList(LinkList *L,int x) 求写这个函数
user-0 提问: 数据结构栈的应用

回复:
user: user-1
content: #include <stack> #include <vector> #include <iostream> #include <string> #include <unordered_set> using namespace std; unordered_set<string>hashset; void dfs(stack<char>st, vector<char>&arr, int index, string res) { 	if (index == arr.size()) { 		//scan over,pop all 		while (!st.empty()) { 			res += " "; 			res.append(1, st.top()); 			st.pop(); 		} 		//remove duplicate 		if(hashset.find(res)==hashset.end()) 			cout << res << endl; 		hashset.insert(res); 		return; 	} 	//keep 	st.push(arr[index]); 	dfs(st, arr, index + 1, res); 	st.pop();  	//pop 	res += " "; 	res.append(1, arr[index]); 	dfs(st, arr, index + 1, res); } int main() { 	vector<char>arr = { 'a','b','c','d' }; 	stack<char>st; 	dfs(st, arr, 0, ""); 	int a; 	cin >> a; }  随手写的，应该没问题

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

user: user-0
content: 大佬们请给指点啊
user-0 提问: 小程序求助，为什么输出的值不同（厘米转化为英尺）

回复:
user: user-1
content: #include <stdio.h>  int main() {      int cmlen;      scanf("%d",&cmlen);      int foot= cmlen/100.0/0.3048;      printf("foot: %d\n", foot);     int inch = (cmlen/100.0/0.3048-foot)*12;     printf("%lf\n", cmlen/100.0/0.3048);      printf("%d %d\n",foot,inch);      return 0; } A程序中(cmlen/100.0/0.3048-foot)*12这个表达式是会隐式转换为double类型，计算出的结果为double类型，赋值给inch，即又强制转换为int类型，取整。 B程序呢，如下，由于cm为整型数，所以cm = cm/ 100.0强制转为int，170/100.0= 1.70，转整型为1，可以发现在这儿已经减少了很多，0.7；所以分开计算会导致丢掉小数部分。使其精度降低。程序A不会在计算中丢失小数部分，因为在赋值inch之前一直是隐式转换为double类型了，foot一样，cmlen/100.0/0.3048;这个表达式按照double类型计算； #include<stdio.h> int main() {     int cm;      scanf("%d",&cm);      cm = cm/100.0;     printf("cm = %d\n", cm);      int foot= cm/0.3048;      printf("foot = %d\n", foot);      int inch= (cm/0.3048 - foot)*12;      printf("%d %d\n",foot,inch);// 输出      return 0; }

user: user-2
content: int会丢失好多数据 你用double啊

user: user-3
content: cm = cm/100.0 这里你输入170  结果为1
user-0 提问: 03-树2 List Leaves（25 分） C语言

回复:
user: user-1
content: 这里不能使用\b，因为其实退格，并没有删除，也就是说最后还是存在一个空格

user: user-0
content: 谢谢 我检查一下

user: user-2
content: 边界条件 输入输出格式 ……
user-0 提问: if嵌套对3个数大小排序问题

回复:
user: user-1
content: 引用 楼主 qq2369187058 的回复:有3个数a,b,c，要求按大小顺序把它们输出       我不知道哪里错了求大神指点 #include<stdio.h> main() { 	int a,b,c,d; 	printf("输入a,b,c的值：\n"); 	scanf("%d,%d,%d",&a,&b,&c); 	if(a>b) ; <<<========= 加分号 		else d=a,a=b,b=d; 		if(b>c) 			printf("%d,%d,%d",a,b,c);else 			if(a>c) 			printf("%d,%d,%d",a,c,b); 			else printf("%d,%d,%d",c,a,b);  <<<========= acb顺序错，应为cab  } 按楼主的思路，上面注明了

user: user-2
content: #include<stdio.h> main() {     int a,b,c,d;     printf("输入a,b,c的值：\n");     scanf("%d,%d,%d",&a,&b,&c);       printf("输入的a,b,c的值：%d, %d, %d\n", a, b, c);      if (b > c) {         d = b;         b = c;         c = d;     }     if (a > c) {         d = a;         a = c;         c = d;     }     if (a > b) {         d = a;         a = b;         b = d;     }      printf("%d,%d,%d",a,b, c);  } 类似冒泡排序

user: user-3
content: 楼主的代码第一个if只能保证a < b，但不能保证a、b与c的比较大小。 楼主的要求应该是：从小到大顺序。 所以如果按楼主的思路，应该这样写 如： if(a>b)  else d=a,a=b,b=d; if(b>c){ if(a > c) printf("%d,%d,%d",c,a,b); else printf("%d,%d,%d",a,c,b); }else{ printf("%d,%d,%d",a,b,c); }  如果从大到小： if(a<b)  else d=a,a=b,b=d; if(b>c){ printf("%d,%d,%d",a,b,c);}else{ if(a>c) printf("%d,%d,%d",a,c,b); else printf("%d,%d,%d",c,a,b); }
user-0 提问: 关于文件流的问题，求解

回复:
user: user-1
content: 原楼主的代码中： int x = 10; char a[x]; char b[x]; 此处有隐患，数组元素个数要求是不可变的，所以严格意义上不能是变量。 至于楼主的疑问，下面这位兄弟的解析，很清晰易懂 引用 5 楼 paschen 的回复:每次你输入完点的回车，还会在缓冲区中留下找行符，这样会被下一次读入，而不再等待你继续输入了，get则将这个换行符读了，相当于把缓冲区清空了

user: user-2
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-3
content: 每次你输入完点的回车，还会在缓冲区中留下找行符，这样会被下一次读入，而不再等待你继续输入了，get则将这个换行符读了，相当于把缓冲区清空了

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单，不用格式控制符！ 但是不用格式控制符，输入输出恰好是你期望的格式的时候好说；等到输入输出不是你期望的格式的时候，你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream！ 使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。我记得以前书上说用scanf输入字符，字符会留在流中的，下一次再用scanf读取时，会在你输入之前直接读取到上一个scanf输入的值，要用fflush()函数来清除，请问用cin来输入字符，字符会不会也留在流中，前辈

user: user-4
content: cin.get(b,x); 不加cin.get();那么上面这句接收到回车符返回了。  while(cin.get() != '\n')     continue; 这句是遇到回车符'\n'退出while循环

user: user-5
content: 正常情况下回车都是被当做结束符的，所以你输入回车的时候就会结束。 另外 while(cin.get() != '\n')     continue; 根据代码看，当遇到回车是就会结束循环

user: user-2
content: 乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单，不用格式控制符！ 但是不用格式控制符，输入输出恰好是你期望的格式的时候好说；等到输入输出不是你期望的格式的时候，你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream！ 使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。
user-0 提问: c语言循环水题超时

回复:
user: user-1
content: 嗯，用递推关系求级数可以把时间复杂度从O(n^2)降到O(n)

user: user-2
content: 每一次都要从头算起，所以超时了，

user: user-3
content: 楼主是在那个平台做的？给个地址呗

user: user-0
content: 引用 1 楼 user-4 的回复:#include <stdio.h>  double ha(int n)  {      int i,j;      double a,b,sum1=0,sum2=0;      for(i=1;i<=n;i++){          sum1+=1.0/i;          b=(1.0/sum1);          sum2+=b;      }          return sum2;  }  int main()  {      int a,b,i,c=0,d=0;      scanf("%d%d",&a,&b);      for(i=1;ha(i)<=a;i++);     c=i;     for(i=c;ha(i)<b;i++) d=i;     if(c!=d)         printf("%d %d",c,d);     else         printf("%d",c);     printf("\n");      return 0;  }还是超时了，规定时间3000ms-

user: user-4
content: #include <stdio.h>  double ha(int n)  {      int i,j;      double a,b,sum1=0,sum2=0;      for(i=1;i<=n;i++){          sum1+=1.0/i;          b=(1.0/sum1);          sum2+=b;      }          return sum2;  }  int main()  {      int a,b,i,c=0,d=0;      scanf("%d%d",&a,&b);      for(i=1;ha(i)<=a;i++);     c=i;     for(i=c;ha(i)<b;i++) d=i;     if(c!=d)         printf("%d %d",c,d);     else         printf("%d",c);     printf("\n");      return 0;  }
user-0 提问: 网易2018招聘真题 [编程题] 相反数

回复:
user: user-1
content: int main() { 	int nuber = 100; 	int n= nuber; 	int temp = 0; 	while (n!=0) 	{ 		temp = temp * 10 + n %10; 		n /= 10; 	} 	printf("%d",nuber + temp); 	getchar(); 	return 0; }

user: user-2
content: while(n>=10)  应该是 while(n>0)

user: user-3
content: 可能是 pow 函数的问题。该函数的参数和返回值都是 double，所以计算 y+b[i]*pow(10,t++) 时是按 double 进行的，最后赋值给 y，可能引入截断误差。 整数运算是应避免浮点函数。

user: user-4
content: 刚少了进位 #include <stdio.h> #include <string.h> int main() { 	int adr; 	char b[100] = {0}; 	char* pout = b+98; 	int n;  	scanf("%s", &b); 	n = strlen(b); 	 	adr = 0; 	for (int i=0; i<n; i++) 	{ 		adr = adr + b[i] + b[n-i-1] - 2*'0'; 		*pout-- = (adr%10)+'0'; 		adr = adr / 10; 	} 	if (adr > 0) 	{ 		*pout-- = adr + '0'; 	} 	printf("%s\n", pout+1); 	return 0; }

user: user-4
content: #include <stdio.h> #include <string.h> int main() { 	int adr; 	char b[100] = {0}; 	char* pout = b+98; 	int n;  	scanf("%s", &b); 	n = strlen(b); 	 	adr = 0; 	for (int i=0; i<n; i++) 	{ 		adr = adr + b[i] + b[n-i-1] - 2*'0'; 		*pout-- = (adr%10)+'0'; 		adr = adr / 10; 	} 	printf("%s\n", pout+1); 	return 0; }

user: user-5
content: int main() { 	int n,t,f{0};  	while (cin>>n) 	{	 		t = n; 		f = 0;  		do  		{ 			f = f * 10 + (t %10); 		} while (t = t / 10); 				 		cout << f + n << endl; 	} 	 	return 0; } 话说大网易出题怎么会这么简单，前天看到的那个储物柜的面试题真是好多坑

user: user-6
content: 因为，100将数字顺序颠倒后得到是1,100+1就是101

user: user-5
content: int main() { 	int n, a, y, i, n1; 	 	while (~scanf("%d", &n)) 	{ 		int t = 0; 		int b[100]; 		i = 0; y = 0; 		n1 = n; 		while (n >= 10) 		{ 			a = n % 10; 			b[i++] = a; 			n = n / 10; 		} 		b[i] = n; 		for (; i >= 0; i--) 		{ 			y = y + b[i] * pow(10, t++); 		}  		printf("%d\n", y + n1); 	} 	return 0; }  我这里运行没问题， 结果是对的， 唯一有点问题的就是一次循环结束后没有付初值，对后续循环有影响
user-0 提问: 32768的16位二进制为什么是0xffff

回复:
user: user-1
content: 写了篇文章 《C++中有符号整数的取值范围》 http://blog.csdn.net/hou09tian/article/details/78145578 希望能帮助到你

user: user-1
content: 首先，答案应该没有问题  对于有符号的数据类型，将第一位设置为0表示整数，第一位设置为1表示负数 如 short  a=1;short b=-1; 那么此时，a的值是0000 0000 0000 0001；b的值按照上述表示方式为1000 0000 0000 0001，但是计算机中是使用补码的方式来表示负数的，补码的含义就是把数据中除符号位（即第一位）之外的其它位取反之后在加1，所以b的值应该是1111 1111 1111 1111即0xFFFF。 回到程序当中来 int a = 32768; 此时a的值是0x00008000，即0000 0000 0000 0000 1000 0000 0000 0000，接下来 short b = a; 此时b的值是0x8000，即1000 0000 0000 0000，从结构上看它应该是个负数，但是需要注意的是，没有一个数的补码是1000 0000 0000 0000， 所以人为地把1000 0000 0000 0000定义为-32768，即-32767的值是1000 0000 0000 00001，而-32768的值是1000 0000 0000 0000 所以short类型的取值范围是-32768~32767

user: user-2
content: 只有作者自己知道

user: user-3
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-4
content: 应该是0x8000 吧 我感觉答案写错了
user-0 提问: float和double比较判断

回复:
user: user-1
content: 浮点数有精度误差，很多十进制数用二进制都没法精度表示，由于float和double在内存中精度是不同的，所以表示同样一个数值是有微小误差的

user: user-1
content: 其次，比较的结果是bool值，用%d输出可以，但用%f是按浮点数解析的，没有任何意义，结果为1不代表true，为0也不代表false

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

user: user-3
content: 引用 2 楼 cfjtaishan 的回复:浮点数比较大小不能按照整型数那样直接比较（如果相差很大，整数部分就有差距）； 浮点数比较大小，一般是两个浮点型相减，差值小于1e-6,则两数相等，若大于1e-6，则被减数大于减数，否则相反； 描述有点问题，差值的绝对值小于1e-6，即0.000001, 则两数相等；否则根据数的正负来确定那个数较大

user: user-3
content: 浮点数比较大小不能按照整型数那样直接比较（如果相差很大，整数部分就有差距）； 浮点数比较大小，一般是两个浮点型相减，差值小于1e-6,则两数相等，若大于1e-6，则被减数大于减数，否则相反；

user: user-3
content: 为什么格式符是%d的时候是1  %f的时候是0  相同的浮点值情况下 double和float分大小吗？ 不是的，因为c1 < c2得出的是一个真假，即整型数据，如果要用%d能够正常输出，真即1，假即0； 如果用%f输出，由于整型数和浮点数在内存里的存储方式不同（建议楼主查一下这方面的差异），整型1在内存里存放的数据，按照%f浮点型输出，那么就是0.00000 就像printf ("%f", 2/1);得到的结果一样是0.000000
user-0 提问: c语言循环水题纠错

回复:
user: user-1
content: 引用 4 楼 LiuCunZhiPu 的回复:[quote=引用 2 楼 cfjtaishan 的回复:] ha函数里，x = g/h改一下 改成这样： x = g * 1.0/h  因为整型和浮点型数据在内存里的保存不一样，g/h都是int类型，计算之后是int类型。直接转成double类型，就是得到你的结果；  建议了解一下浮点型在内存里的表示  把整型赋值给浮点型会发生隐式类型转换的呀。所以不需要 x=(double)h/g; 或者 x=h*1.0/g;[/quote]   x=(double)h/g; 这个不是隐式类型转换，这个是强制类型转换

user: user-2
content: 引用 5 楼 LiuCunZhiPu 的回复:[quote=引用 1 楼 hdt 的回复:] int  / int 还是int 难道不会发生隐式类型转换？整型赋值给double的x呀 [/quote] 试一下，就知道，代码那么少，这里问，不如自己动手做

user: user-0
content: 引用 1 楼 hdt 的回复:int  / int 还是int 难道不会发生隐式类型转换？整型赋值给double的x呀

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:ha函数里，x = g/h改一下 改成这样： x = g * 1.0/h  因为整型和浮点型数据在内存里的保存不一样，g/h都是int类型，计算之后是int类型。直接转成double类型，就是得到你的结果；  建议了解一下浮点型在内存里的表示  把整型赋值给浮点型会发生隐式类型转换的呀。所以不需要 x=(double)h/g; 或者 x=h*1.0/g;

user: user-0
content: 难道不会发生隐式类型转换吗？

user: user-1
content: ha函数里，x = g/h改一下 改成这样： x = g * 1.0/h  因为整型和浮点型数据在内存里的保存不一样，g/h都是int类型，计算之后是int类型。直接转成double类型，就是得到你的结果；  建议了解一下浮点型在内存里的表示

user: user-2
content: int  / int 还是int
user-0 提问: 求助：关于IEEE754浮点数的操作的问题

回复:
user: user-1
content: Run-Time Library Reference  printf Type Field Characters  ……  %a  double  Signed hexadecimal double precision floating point value having the form [−]0xh.hhhh p±dd, where h.hhhh are the hex digits (using lower case letters) of the mantissa, and dd are one or more digits for the exponent. The precision specifies the number of digits after the point.   %A  double  Signed hexadecimal double precision floating point value having the form [−]0Xh.hhhh P±dd, where h.hhhh are the hex digits (using capital letters) of the mantissa, and dd are one or more digits for the exponent. The precision specifies the number of digits after the point.

user: user-2
content: #include <stdio.h>   int main(void) {     double d = 1.2345;     int intege = 0;     double point = 0.0;      intege = (int)d;     point = d - intege;      printf("%d, %.4lf\n", intege, point);      return 0; } 作为一个参考吧

user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437
user-0 提问: vs community2015的C语言

回复:
user: user-1
content: 把另一个文件移除了

user: user-2
content: 点击选择右边“菲波那契数列.c”，按Del键，……

user: user-3
content: 在一个程序中或项目中只能有一个main，这个main是整个程序或者项目的执行入口

user: user-4
content: 一个项目只能定义一个入口点

user: user-5
content: 1.你新建一个工程就好了  2.把小程序写成一个函数 然后主函数调用也可以  3.你保存原有程序到一个文档 然后删除写你的新程序 解决方法太多了
user-0 提问: 关于鸽巢排序的问题？

回复:
user: user-1
content: 那个并不是一个运算符  --  和  >  两个

user: user-2
content: (j--)  > 0

user: user-3
content: bucket[j]-->0 这个是一个判断+后减的表达式，先判断bucket[j] > 0是否大于0，然后再将bucket[j]的值减1
user-0 提问: C语言

回复:
user: user-1
content: 要输入什么内容才能触发第一个else后面那句话? 根据代码 if (s_gets(flower, SIZE)) { strcat(flower, addon); puts(flower); puts(addon); } else     puts("End of file encounted."); 要出发else语句，则if的条件语句为false，即s_gets(flower,SIZE)的返回值为NULL。 再来看s_gets()函数，返回值是ret_val，要想让该变量为NULL，则 ret_val = fgets(st, n, stdin); 需要fgets()函数返回值为NULL，在MSDN中提到了该函数返回NULL的条件 “Each of these functions returns str. NULL is returned to indicate an error or an end-of-file condition.” 正常情况下，fgets()返回值是输入的字符str；当发生错误或者EOF条件发生时，将返回NULL。 在Windows中，ctrl+Z表示EOF，所以输入ctrl+Z即可触发第一个else后面那句话，如图所示  另外，SIZE的值需要变大 #define SIZE 20 而在if的执行语句中 strcat_s(flower, addon); addon的长度就已经超过20了，此时会遇到越界问题，可以将SIZE设置为一个较大的值

user: user-2
content: 输入ctrl+z（即EOF终止）则执行else的内容  http://en.cppreference.com/w/c/io/fgets

user: user-3
content: 对于s_gets函数，主要是根据fgets函数， fgets(st, n, stdin); 若输入的字符小于n，那么会将'\n'加入缓存st中，并在'\n'后面加上'\0'； 若输入的字符等于n-1，那么不会将'\n'加入缓存st中，只是将'\0'加入到缓存末尾； 这个是fgets的函数的实现逻辑，详尽的建议查阅fgets函数的实现逻辑

user: user-3
content: #include <stdio.h> #include <string.h>  #define SIZE 20  char * s_gets(char * st, int n);  int main(void) {     char flower[SIZE];     char addon[] = "s smell like old shoes.";      puts("What is your favourite flower?");     if (s_gets(flower, SIZE))     {         strcat(flower, addon);         puts(flower);         puts(addon);     }     else         puts("End of file encounted.");     puts("bye.");      return 0; }  char * s_gets(char * st, int n) {     int i = 0;     char * ret_val;      ret_val = fgets(st, n, stdin);     if (ret_val)   //即 ret_val != NULL     {         while (st[i] != '\n' && st[i] != '\0')             i++;          if (st[i] == '\n')             st[i] = '\0';         else             while (getchar() != '\n')                 continue;     }      return ret_val; } 如果是在Linux下直接ctrl+d组合键，若是Windows下，直接ctrl+z组合键就可以执行else；

user: user-4
content: 回车之前如果输入超过SIZE个字符，就会忽略部分输入
user-0 提问: （求大神解答）全局变量和局部变量，程序如下

回复:
user: user-0
content: 嗦嘎！！感谢

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

user: user-2
content: 楼上是对的。就循环一次。 而且用的是局部变量。

user: user-3
content: 1.局部变量与全局变量重名，优先使用局部变量 2.int fun(int array[]) 函数传递数组实际是传递array的首地址，也就是指针4字节 4/4=1，for循环执行1次， 故输出62
user-0 提问: __attribute__((align(n)))字节对齐问题,作用和#pragma不一致

回复:
user: user-0
content: 对这个问题有不同意见的可以发我邮箱交流，就此结贴，谢谢大家。

user: user-1
content: struct B{     char a;     unsigned long b;     unsigned short c;     char d; }__attribute__((align(8))); 8字节对齐，a 和 b不足8个字节，补3个字节；c和d不足8个字节，补5个字节 个人理解

user: user-0
content: 第一次发帖，各位技术大咖求教育０　０

user: user-2
content: 理解和讨论之前请先学会如何观察！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-0
content: struct D{         char a;         char b;         char c;         char d;         char e;         char f;         char l;         char m; }__attribute__((aligned(8))); 发现一个有趣现象，如果结构体内都是相同类型变量的就会一直叠加，直到发现不同基本类型变量，开始进行字节对齐计算；毫无意外，sizeof( D ) = 8;

user: user-0
content: 三楼是说attribute按相邻两个元素一起对齐么，可是我写了下面这个结构体C，sizeof( C ) = 8; struct C{         unsigned short a;         unsigned short b;         unsigned short c;         unsigned short d; }__attribute__((aligned(8)));
user-0 提问: 萌新求解，为什么在循环内对结构体数组变量进行赋值和累加等操作，结果为0？

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

user: user-2
content: 对于double类型数据，建议还是用%lf输出，因为整型数据和浮点数在内存中的存放方式是不一样的。

user: user-3
content: 输出格式错误     。
user-0 提问: 为什么一定得使用头文件才能编译成功，直接extern不行

回复:
user: user-1
content: extern一次只能引入一个函数或者是变量。如果你一个类里有200个函数。那你要extern 200次？

user: user-2
content: 你没有把两个文件都编译 头文件不会被编译，cpp文件才会 你把b.h改成b.cpp

user: user-3
content: 在main函数所在的源文件里，要引入b.h； 将func函数的声明放在b.h中； 将main函数里的extern int num;放到main函数外，对于全局变量的声明（所有全局变量的声明）都应该放在函数外；

user: user-4
content: extern 一般都是.c文件里的 .h里的就用include

user: user-5
content: 5L+1...

user: user-0

user: user-0
user-0 提问: 关于静态局部变量和静态全局变量在循环中的问题求解。

回复:
user: user-1
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-2
content: 肯定不一样呢，第一次一样是因为输入的是2，那么couter函数里的else执行了2次（i==0时，else不执行），所以结果都是2；但是此时还执行了将局部静态变量赋值为0 的操作；所以，现在局部静态变量是0，全局惊天变量是2； 当第二次循环时，由于输入的是1，那么couter函数里的else执行了1次，（i== 0时，else不执行），所以局部静态变量是1，全局静态变量是3.  输出结果符合代码的逻辑呢

user: user-3
content: 输出之后你给它重新赋值0了 当然不一样

user: user-4
content: 静态变量赋值后之后可以再赋值的。

user: user-3
content: 变量本来就可以变啊 感觉你没有分清 常量 和 静态变量 详情百度

user: user-0
content: 我的意思是  全局静态变量 和局部静态变量 这两个值为什么会不一样。 不是很明白
user-0 提问: 怎么实现用输出的结束来终止循环

回复:
user: user-0
content: 引用 4 楼 hou09tian 的回复:VS2015中需要输入三个ctrl+Z才可以结束while循环 那么dev c++呢？

user: user-1
content: 引用 4 楼 hou09tian 的回复:VS2015中需要输入三个ctrl+Z才可以结束while循环 输入：Enter、Ctrl+Z、Enter不行？

user: user-2
content: EOF的输入，在Linux下和Windows不一样； Windows下，建议使用ctr+z，输入EOF Linux下，建议用ctrl+d，输入EOF， 要终止while循环输入，根据你的系统类型，输入对应的组合键

user: user-3
content: VS2015中需要输入三个ctrl+Z才可以结束while循环

user: user-1
content: Windows：Enter、Ctrl+Z、Enter Linux：Ctrl+D

user: user-0
content: 运行结果就是没有结果，，，
user-0 提问: 线索二叉树的问题

回复:
user: user-1
content: 你使用这种方式，必须先给这个全局变量进行内存分配，才可以将该pre后继指向遍历序号的第一个结点，但是真正使用线索方式来遍历二叉树时，我们可以看作二叉树为一个双向链表来处理，给链表一个头结点，当此时头结点为pre时，可以指向第一个结点。
user-0 提问: The C Programming Language讲课视频

回复:
user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-2
content: 可以尝试买书<<The C Programming language>>看
user-0 提问: 简单的很，就是不知道拿错了 闰年找茬

回复:
user: user-1
content: 今年是2017年。

user: user-2
content: #include <stdio.h>  int main() {     int year = 2014;      if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)         printf("%d年是闰年\n", year);     else         printf("%d 年不是闰年\n", year);     return 0; } 代码没什么问题，建议楼主说一下慕课网上是什么要求？
user-0 提问: 开辟内存之后用于输出，为什么会出错？

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> //#include "conio.h"  int main(int argc, char *argv[]) {     double average;     double min;     double max;     double sum;     int nfailed;     int n;     double *p;     int i;      nfailed=0;     sum=0.0;     max=0.0;     min=100.0;      printf("请输入班级人数：");     scanf("%d", &n);   /*去掉d后面的空格*/     p = (double *)malloc(n * sizeof(double));     if (p == NULL)     {         printf("内存分配错误\n");         exit(1);     }      for (i = 0; i <n; i++)     {         printf("请输入第%d名学生成绩:",(i+1));         scanf("%lf", p+i);         //getchar();         sum = sum + *(p+i);         if (*(p+i)  > max)         {             max = *(p+i);         }         if (*(p+i) < min)         {             min = *(p+i);         }         if (*(p+i) < 60.0)         {             nfailed ++;         }     }      average = sum / n;     free(p);     printf("班级共有多%d学生\n", n );     printf("平均成绩为:%.1lf\n", average );     printf("最高分位:%.1lf\n", max );     printf("最低分为:%.1lf\n", min );     printf("不及格人数为:%d\n", nfailed);       return 0; } 程序基本上没问题，有一个地方需要注意下；在输入学生数时，%d后面的空格去掉。不然，输入后面的会有问题。

user: user-0
content: 求解：那为什么多加了一个空格，下面的输入会变成第一个人的成绩，并且会出现把下面那个输出“吃掉”的情况啊？
user-0 提问: go语言主要承担什么角色？c呢？

回复:
user: user-1
content: 建议楼主继续疯狂迷恋C语言。 http://bbs.csdn.net/topics/380157851 http://bbs.csdn.net/topics/392094659

user: user-2
content: go语言我接触一些，go做并发操作很不错。做页面服务器后台也是很好的，具体的可以去网上查资料，然后对比一下。
user-0 提问: c语言菜鸟求助

回复:
user: user-1
content: 百度搜“控制台光栅器”

user: user-2
content: 完全看不懂，什么程度才能完成这样的程序呢

user: user-3
content: 去查bmp的格式，了解怎么每一个像素的坐标和颜色在文件中怎么存储，然后设计读取分析程序； 把屏幕坐标映射到图片坐标，比如显示区域80*60字符，图片80*60大小，那就是一对一的关系，最简单，按颜色值输出字符即可；如果图片更大，比如160*120大小，那么每4个像素对应一个字符，你可以把组成正方形的4个像素的颜色值做一个平均，大于某个值即判断为黑，其他为白，对应输出。
user-0 提问: 哪里出错

回复:
user: user-1
content: s不赋初值为0？

user: user-0
content: #include<stdio.h> /*求1！+2！+3！+......+20!*/ int main() {     int n=20,i,j,k; double s;     for(i=1;i<=n;i++)    {j=1;k=1;      for(;j<=i;j++)     {           k =k*j;     }       s=s+k;}       printf("%22.15e",s);       return 0;   }
user-0 提问: C语言循环读取和输出有命名规则的txt文件，

回复:
user: user-1
content: 引用 3 楼 qq_29846883 的回复: 	for (int i = 0; i < 10; i++) 	{ 		char file[64] = {0}; 		sprintf(file, "timu_%d", i); 		FILE* fp = fopen(file, "r"); 		memset(file, 0, 64); 		sprintf(file, "jieguo_%d", i); 		FILE* wp = fopen(file, "w"); 		if (fp && wp) 		{ 			char buf[1024] = {0}; 			fread(buf, 1, 1024, fp);  			//解析buf，重组buf  			fwrite(buf, 1, 1024, wp);  			fclose(fp); 			fclose(wp); 		} 	}  只是提供一个思路， 剩下的自己优化 fwrite不一定要写入1024个字节了。另外，源文件的内容不一定是小于等于1024个字节。

user: user-2
content: for (int i = 0; i < 10; i++) 	{ 		char file[64] = {0}; 		sprintf(file, "timu_%d", i); 		FILE* fp = fopen(file, "r"); 		memset(file, 0, 64); 		sprintf(file, "jieguo_%d", i); 		FILE* wp = fopen(file, "w"); 		if (fp && wp) 		{ 			char buf[1024] = {0}; 			fread(buf, 1, 1024, fp);  			//解析buf，重组buf  			fwrite(buf, 1, 1024, wp);  			fclose(fp); 			fclose(wp); 		} 	}  只是提供一个思路， 剩下的自己优化

user: user-0
content: 不是将文件全部筛选读出来，是每运算一次，就读一个txt文件，结果也是输出到一个文件

user: user-3
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。 如果嫌system黑窗口一闪，将system("...")替换为WinExec("cmd /c ...",SW_HIDE);