Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 为什么r是8

回复:
user: user-1
content: 引用 37 楼 mikal0571 的回复:引用 19 楼 自信男孩 的回复：跟参数入栈的顺序有关的，从结果来看，是从右向左入栈，因此传入的值是(8, 8);所以最终的结果r是16.对头，这才是最佳答案，很多人不知道。c99要求，运算是从右往左的、是运算，不是传参数！传参数不同CPU可能不一样，参数少，寄存器传，参数多堆栈传。 你这说法就有点问题了，你要入栈，就必须把参数的值运算出来，说白了，运算和入栈顺序是一样的

user: user-2
content: 这帖子还没结呢啊

user: user-3
content: 关于这个问题，我认为应该是未定义行为，代码没有任何意义

user: user-4
content: 先算括号参数的内容 x,x+=2 x为8 func(8,8) 并不是他们说的参数从左往右计算 func(x += 2, x)还是16

user: user-5
content: 从来不看这样的东西、问就是垃圾代码、永远不要写！

user: user-6
content: x += 2 不是1么

user: user-7
content: 我补充一点，每一个语言的传参约定不一样，因为C语言支持参数变长，所以需要从右往左。Pascal因为不支持，所以需要从左往右。

user: user-8
content: 引用 19 楼 自信男孩 的回复：跟参数入栈的顺序有关的，从结果来看，是从右向左入栈，因此传入的值是(8, 8);所以最终的结果r是16.对头，这才是最佳答案，很多人不知道。c99要求，运算是从右往左的、是运算，不是传参数！传参数不同CPU可能不一样，参数少，寄存器传，参数多堆栈传。

user: user-9
content: 这个函数传参顺序是从右到左，相当于你已经把x赋了8这个值，c=8+8

user: user-10
content: r应该等于16吧

user: user-11

user: user-12
content: 爬楼学习了半天，到底参数是不是从右向左啊

user: user-13
content: 引用 30 楼 qq_20679361 的回复:参数传值是从右向左传的。和传值没关系

user: user-14
content: 参数传值是从右向左传的。

user: user-15
content: EFS

user: user-16
content: 解释执行的C系统么？建议多多参加“confusingly C”学习。

user: user-10
content: x 等于8  然后8+8等于16

user: user-17
content: func(funcA(), funcB()) 不能假定funcA先执行或者funcB先执行，结果是未定义的 有的编译器答案是16，有的编译器答案是14，所以结果没有意义

user: user-18
content: 跟参数入栈的顺序有关的，从结果来看，是从右向左入栈，因此传入的值是(8, 8);所以最终的结果r是16.

user: user-19
content: 引用 1 楼 qq_44933110的回复:[quote=引用 楼主 qq_44933110的回复:]#include<stdio.h> int func(int a, int b) { 	int c; 	c = a + b; 	return c; } void  main() { 	int x = 6, r; 	r = func(x, x += 2); 	printf("%d   %d\n", x, r); 	system("pause"); } 说错了，为什么r是16[/quote] 目测x += 2直接给x赋值8了，再到形参引用的的时候已经都是8了
user-0 提问: 大佬们教一下

回复:
user: user-1
content: 啧啧，这种题目 你要区分：int  a[]={1,2,3,4}; 他考的是逗号运算符 你看看这个：printf("%d", (1,2,3,4,5)); 输出的结果是5，意思就是说，逗号运算符的运算结果是选择右边的值，所以“1,2”选择了2，然后“2,3”选择了3，以此类推，整个运算的结果就是最右边的值了，也就是5 而由于逗号运算符的优先级最低，所以它才能当做分隔用，而不是分隔就是它的功能 再看int a[1,2,3,4] 括号中就是个逗号运算，运算的结果是4，所以相当于int  a[4]，所以选A

user: user-2
content: ～ int a[1,2,3,4]; 是什么鬼？ 错误定义！题目本身有问题。
user-0 提问: 大佬们能帮忙看下是什么问题么

回复:
user: user-0
content: 1>  正在对“Debug\city.unsuccessfulbuild”执行 Touch 任务。 1>ClCompile: 1>  main.cpp 1>main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl CreatGraph(struct AdjMGraph *,int * const,int,struct RowColWeight * const,int)" (?CreatGraph@@YAXPAUAdjMGraph@@QAHHQAURowColWeight@@H@Z)，该符号在函数 _main 中被引用 1>G:\city\Debug\city.exe : fatal error LNK1120: 1 个无法解析的外部命令 1> 1>生成失败。
user-0 提问: c语音的排序法，升序，降序

回复:
user: user-1
content: 这里面有详细讲解哦！ sort函数排序 https://blog.csdn.net/weixin_43956598/article/details/90241551 冒泡排序 https://blog.csdn.net/weixin_43956598/article/details/90176251 选择排序 https://blog.csdn.net/weixin_43956598/article/details/90178197 插入排序 https://blog.csdn.net/weixin_43956598/article/details/90181567 快速排序 https://blog.csdn.net/weixin_43956598/article/details/90215135 希尔排序 https://blog.csdn.net/weixin_43956598/articledetails/90234480 堆排序https://blog.csdn.net/weixin_43956598/article/details/90343547
user-0 提问: C选择法排序学习

回复:
user: user-0
content: 谢谢😜，还没入门，一个一个来

user: user-1
content: 推荐学习排序算法 sort函数排序 https://blog.csdn.net/weixin_43956598/article/details/90241551 冒泡排序 https://blog.csdn.net/weixin_43956598/article/details/90176251 选择排序 https://blog.csdn.net/weixin_43956598/article/details/90178197 插入排序 https://blog.csdn.net/weixin_43956598/article/details/90181567 快速排序 https://blog.csdn.net/weixin_43956598/article/details/90215135 希尔排序 https://blog.csdn.net/weixin_43956598/articledetails/90234480 堆排序https://blog.csdn.net/weixin_43956598/article/details/90343547
user-0 提问: 这是什么问题啊？按照教程来写的代码，老是出现这种问题

回复:
user: user-1
content: 你的引号位置错了，应该是 scanf("%d", &i); 第24行printf也写错了

user: user-2
content: scanf格式不对，引号位置不对，printf写错了，对于初学者基础知识很重要，当然检查错误的能力也很重要，这篇文章对你以后也有好处https://blog.csdn.net/weixin_43956598/article/details/90062550

user: user-3
content: emmm 认真一点啊 教程可不背这锅

user: user-4
content: 24行，printf()

user: user-5
content: 你的引号位置错了，应该是 scanf("%d", &i);
user-0 提问: c语言程序设计

回复:
user: user-1
content: 先学学排序算法 sort函数排序 https://blog.csdn.net/weixin_43956598/article/details/90241551 冒泡排序 https://blog.csdn.net/weixin_43956598/article/details/90176251 选择排序 https://blog.csdn.net/weixin_43956598/article/details/90178197 插入排序 https://blog.csdn.net/weixin_43956598/article/details/90181567 快速排序 https://blog.csdn.net/weixin_43956598/article/details/90215135 希尔排序 https://blog.csdn.net/weixin_43956598/articledetails/90234480

user: user-2
content: 各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/
user-0 提问: 帮我看看哪里写错了谢谢大佬们！！！！

回复:
user: user-1
content: 我很久没写C++代码了，不过我觉得，按照你的想法，应该是这么玩的：  #include <iostream>  using namespace std;  int check(char* title, char* name, char* rightMessage, char* errorMessage, char* failedMessage, int target, int limit) {     int i = 0, temp = 0;     cout << title << endl;     while(true)     {         i++;         cout << name;         cin >> temp;         if(temp == target)         {             cout << rightMessage << endl;             return (0);         }         else if (i < limit)         {             cout << errorMessage << endl;         }         else         {             cout << failedMessage <<endl;             return (1);         }     } }  int main() {     const int USER = 201904, PSW = 123456, COUNT = 3;//const常量     if(0 != check("请输入账号", "USER:", "", "账号错误，请重试", "账号错误已满03次", USER, COUNT))     {         return (1);     }     if(0 != check("请输入密码", "PSW:", "", "密码错误，请重试", "密码错误已满03次", PSW, COUNT))     {         return (2);     }     cout << "登陆成功" << endl;     return 0; }

user: user-2
content: 程序基础设计就是错的，哪家的用户登录输入用户名就报错的？都是需要输入用户名和密码后才显示账号或者密码错误

user: user-3
content: 程序问题在于： 1、if和else混乱 2、程序的逻辑有问题，导致程序看起来很混乱，可以看看这篇文章，思维的重要性！！https://blog.csdn.net/weixin_43956598/article/details/90049508 修改后的程序如下，有备注说明的：  #include<iostream> using namespace std; int main() { 	const int USER=201904,PSW=123456;//const常量 	int user,psw,i; 	cout<<"请输入账号"<<endl<<"USER；"; 	cin>>user; 	if(user==USER) 		cout<<"请输入密码"<<endl<<"PSW；"; 	else { 		//while循环是在else的大括号里面的 		i=0;//初始化 		while(i<3) {  //这里i并没有赋值，你这个条件根本就无法成立。 			cout<<"账号错误，请重试"<<endl; 			cout<<"USER:"<<endl; 			cin>>user; 			i++;//统计输入的次数 			if(user==USER) 				break;//跳出循环 		} 		if(i==3) { //当已经输了3次，可以给出正确的账户 			cout<<"登录失败"<<endl; 			return 0;//终止程序  		} 		cout<<"请输入密码:"; 	} 	cin>>psw; 	if(psw==PSW) 		cout<<"登陆成功"<<endl; 	else { 		i=0;//重新初始化 		while(i<3) { 			cout<<"密码错误，请重试"<<endl; 			cout<<"PSW:"<<endl; 			cin>>psw; 			i++; 			if(psw==PSW) 				break;//跳出循环 			 		} 		if(i==3) { 			cout<<"登陆失败"<<endl; 			return 0;//终止程序  		} 		cout<<"登录成功，请稍后。"; 	} 	return 0; }

user: user-4
content: 你这个if-else看的我脑壳疼，还有那个变量i，用来干什么的，也不初始化就拿来用了
user-0 提问: 【C语言】大写字母转小写字母

回复:
user: user-1
content: c2 = c1 + 32;或c2 = c1 | (1u<<5);或tolower  第二种方法，当小写转大写时，用c2 = c1 ^ (1u<<5);

user: user-2
content: 告诉你个技巧，可以不用记32，凡32的地方都可以用（'a'-'A'）代替

user: user-3
content: #include <ctype.h>

user: user-4
content: 加油吧

user: user-0
content: 引用 1 楼 袁君元的回复:还可以用一个函数就可以了 tolower函数，不过要加头文件#include<string.h> 大佬好  (握手握手)

user: user-0
content: 引用 2 楼 拥抱Linux的回复:可喜可贺！ 另外，提一个无关代码的小疏忽：表达「输入」这个意思的英文单词可以用「 input 」或者「 enter 」，但是 「 inter 」确实没有 输入的意思哦。 ：） 好的！多谢提醒

user: user-5
content: 可喜可贺！ 另外，提一个无关代码的小疏忽：表达「输入」这个意思的英文单词可以用「 input 」或者「 enter 」，但是 「 inter 」确实没有 输入的意思哦。 ：）

user: user-6
content: 还可以用一个函数就可以了 tolower函数，不过要加头文件#include<string.h>
user-0 提问: 希望大佬帮助解答

回复:
user: user-0
content: 请问如何计算该文件的行数，并且全部存入结构体？

user: user-1
content: 文件的读写、结构体、结构体排序+重载运算符

user: user-2
content: 文件IO+结构体+排序
user-0 提问: 这个要怎么写？可以帮助一下吗

回复:
user: user-1
content: 你的else if中的条件写错了，程序中没有这种写法，应该写成x>＝-5&&x<=5，这里是小于5，不是10哦，看仔细

user: user-2
content: 没有1<=x<10的这种语法，请修改成1<=x && x<10
user-0 提问: if中的return有什么用

回复:
user: user-0
content: 引用 7 楼 拥抱Linux 的回复:[quote=引用 6 楼 bbcvb 的回复:] 明白了 我以为return的返回值是if 的 哦，原来如此。 if 不是函数， 只是 一个 关键字。  祝 C 语言学习进步、开心！ ：-） ～[/quote] 谢谢

user: user-1
content: 引用 6 楼 bbcvb 的回复:明白了 我以为return的返回值是if 的 哦，原来如此。 if 不是函数， 只是 一个 关键字。  祝 C 语言学习进步、开心！ ：-） ～

user: user-0
content: 明白了 我以为return的返回值是if 的

user: user-2
content: return是跳出整个函数吧？

user: user-1
content: 引用 2 楼 bbcvb 的回复:我意思是不明白这语句  if (!InitInstance (hInstance, nCmdShow))     {         return FALSE;     } 如果把它改成InitInstance (hInstance, nCmdShow)；不也一样吗？ 嗯，假设 「InitInstance (hInstance, nCmdShow);」的返回值是 0 ， 也就是说这个函数运行过程中失败了，那么不判断的话， 它这个函数的运行情况如何，函数外面的程序根本不知道啊，那么如果后面还有语句的话，程序仍然会继续往下执行，但是这样的话，后面语句的运行不是就会出问题了吗？ ～

user: user-3
content: 引用 2 楼 bbcvb 的回复:[quote=引用 1 楼 拥抱Linux 的回复:] 程序运行的流程变了吧？ 我意思是不明白这语句  if (!InitInstance (hInstance, nCmdShow))     {         return FALSE;     } 如果把它改成InitInstance (hInstance, nCmdShow)；不也一样吗？[/quote]  这么写 功能是一样的。但是你得考虑初始化失败的情况，失败了还继续往下运行，可能就会导致其他地方出错，然后代码多了可能还不好找原因

user: user-0
content: 引用 1 楼 拥抱Linux 的回复:程序运行的流程变了吧？ 我意思是不明白这语句  if (!InitInstance (hInstance, nCmdShow))     {         return FALSE;     } 如果把它改成InitInstance (hInstance, nCmdShow)；不也一样吗？

user: user-1
content: 程序运行的流程变了吧？  return 的话，运行的位置就返回到 return 的那个入口去了。  不 return 的话， 这句语句后面的 语句还会被执行。
user-0 提问: 是线程消息队列还是应用程序消息队列？

回复:
user: user-1
content: 应用程序可以开多个线程，每个线程里创建自己的窗口，自己的消息（MSG）循环。

user: user-0
content: 引用 1 楼 user-1 的回复: 应用程序可以开多个线程，每个线程里创建自己的窗口，自己的消息（MSG）循环。 这个消息队列是以进程为单位还是线程为单位？这里的应用程序是否是指进程？
user-0 提问: C语言

回复:
user: user-1
content: 可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90055036

user: user-2
content: 你想调用fun，需要跟sad一样，再main函数前面声明下

user: user-3
content: 就是你图片中的使用方式啊！ main是一个函数，printf是一个函数，fun是一个函数，sad是一个函数，你的图片里的代码不是已经调用了4个函数了么？ 这还是看得到的，背后还有看不到的呢！  不知道你是不是想问「函数名（参数，参数，……）」这样的使用？  其实就跟数学的函数一样，把自变量放进去，返回值就是因变量，只不过程序的函数还可以有一大堆副作用，而很多情况下程序都是为了得到这些一大堆副作用才使用函数的。：） ～

user: user-4
content: 图看不清，调用多个函数是很正常的事情，不会有问题
user-0 提问: 编写程序，大佬们帮帮忙，这个我实在不会

回复:
user: user-1
content: #include<stdio.h>  //定义队列结构体 struct queue{     int front;//队头     int endline;//队尾     int data[10];//数据 };  typedef struct queue Queue;  //初始化队列 void initQueue(Queue * p); //入队 void enQueue(Queue *pque, int data); //出队 void deQueue(Queue *pque); //遍历队列 void printfQueue(Queue *pque);  //数组队列只能使用一次，使用之后必须初始化后才可以继续使用  void main(){     Queue myQueue={0,6,{50,60,70,80,90,100}};     Queue *pque = &myQueue;     //插入队列     enQueue(pque,40);     enQueue(pque,30);     printfQueue(pque); }  //初始化队列 void initQueue(Queue *pque){     pque->front = 0;     pque->endline = 0;//清空队列 }  //入队 void enQueue(Queue *pque,int data){     //判断队列是否溢出     if (pque->endline<10)     {         //判断队列是否为空         if (pque->front == pque->endline)//队头和队尾重合表明没有元素         {             //初始化队列             initQueue(pque);         }         pque->data[pque->endline] = data;         pque->endline += 1;      }     else{         return;     }  }  //出队 void deQueue(Queue *pque){     //判断队列是否为空     if (pque->front == pque->endline)     {         //队列为空         return;     }     else{         //直接弹出最后一个         printf("弹出的元素是%d\n", pque->data[pque->front]);         pque->front+= 1;     } }  //遍历队列 void printfQueue(Queue *pque){     int i;     for (i = pque->front; i < pque->endline; i++)     {         printf("第%d门成绩为%d分\n",i+1,pque->data[i]);     } }

user: user-0
content: 引用 1 楼 user-1的回复: #include<stdio.h>  //定义队列结构体 struct queue{     int front;//队头     int endline;//队尾     int data[10];//数据 };  typedef struct queue Queue;  //初始化队列 void initQueue(Queue * p); //入队 void enQueue(Queue *pque, int data); //出队 void deQueue(Queue *pque); //遍历队列 void printfQueue(Queue *pque);  //数组队列只能使用一次，使用之后必须初始化后才可以继续使用  void main(){     Queue myQueue={0,6,{50,60,70,80,90,100}};     Queue *pque = &myQueue;     //插入队列     enQueue(pque,40);     enQueue(pque,30);     printfQueue(pque); }  //初始化队列 void initQueue(Queue *pque){     pque->front = 0;     pque->endline = 0;//清空队列 }  //入队 void enQueue(Queue *pque,int data){     //判断队列是否溢出     if (pque->endline<10)     {         //判断队列是否为空         if (pque->front == pque->endline)//队头和队尾重合表明没有元素         {             //初始化队列             initQueue(pque);         }         pque->data[pque->endline] = data;         pque->endline += 1;      }     else{         return;     }  }  //出队 void deQueue(Queue *pque){     //判断队列是否为空     if (pque->front == pque->endline)     {         //队列为空         return;     }     else{         //直接弹出最后一个         printf("弹出的元素是%d\n", pque->data[pque->front]);         pque->front+= 1;     } }  //遍历队列 void printfQueue(Queue *pque){     int i;     for (i = pque->front; i < pque->endline; i++)     {         printf("第%d门成绩为%d分\n",i+1,pque->data[i]);     } }   谢谢大佬的指点，我努力搞懂试试

user: user-0
content: 哇，谢谢谢谢，真的太谢谢了
user-0 提问: C语言实现线性列表

回复:
user: user-1
content: 前面几楼都正解。

user: user-0
content: 引用 2 楼 单眼皮的根号3的回复:create函数写错了，end指针没有递增，一直都是在head的位置，所以你即使输入5个数，但是只有head一个节点，修改如下：  感谢感谢，厉害厉害，原来是我create写错了。

user: user-0
content: 引用 1 楼 user-3的回复:问题在于create 函数，有个赋值搞反了 LinkList *create (int n) { LinkList *head, *node, *end; head = (LinkList *)malloc(sizeof(LinkList));  end = head; int i; for( i = 0; i < n; i++) { node = (LinkList *)malloc(sizeof(LinkList)); scanf("%d", &node->score); end->next = node; //node = end; end = node; } end->next = NULL; return head; } 谢谢你的的讲解，我明白了。

user: user-2
content: create函数写错了，end指针没有递增，一直都是在head的位置，所以你即使输入5个数，但是只有head一个节点，修改如下：

user: user-3
content: 问题在于create 函数，有个赋值搞反了 LinkList *create (int n) { LinkList *head, *node, *end; head = (LinkList *)malloc(sizeof(LinkList));  end = head; int i; for( i = 0; i < n; i++) { node = (LinkList *)malloc(sizeof(LinkList)); scanf("%d", &node->score); end->next = node; //node = end; end = node; } end->next = NULL; return head; }
user-0 提问: c语言

回复:
user: user-1
content: 引用 2 楼 表面镇定，心在滴血 的回复:[quote=引用 1 楼 jsx_SEVEN的回复:]  #include <stdio.h> #include <stdlib.h>  void swap(int *p1, int *p2) { 	int *p; 	p = *p1; 	*p1 = *p2; 	*p2 = p; } int main() { 	int i, x, y; 	int array[10]; 	int *p = array; 	for ( i = 0; i < 10; i++) 	{ 		scanf("%d", &array[i]); 	} 	printf("输入要交换的两个下标："); 	scanf("%d %d", &x, &y); 	 	swap(&array[x], &array[y]);  	for ( i = 0; i < 10; i++) 	{ 		printf("%d ", array[i]); 	} }  老哥，怎么运行不了的[/quote] 我用的VS2017，可以运行，你那边是显示编译错误还是答案错误？  #include <stdio.h> #include <stdlib.h>  void swap(int *p1, int *p2) { 	int *p; 	p = *p1; 	*p1 = *p2; 	*p2 = p; } int main() { 	int i, x, y; 	int array[10]; 	int *p = array; 	printf("输入10个数，以空格分开"); 	for (i = 0; i < 10; i++) 	{ 		scanf("%d", &array[i]); 	} 	printf("输入要交换的两个下标(以空格分开)："); 	scanf("%d %d", &x, &y);  	swap(&array[x], &array[y]);  	for (i = 0; i < 10; i++) 	{ 		printf("%d ", array[i]); 	} }

user: user-1
content: #include <stdio.h> #include <stdlib.h>  void swap(int *p1, int *p2) { 	int *p; 	p = *p1; 	*p1 = *p2; 	*p2 = p; } int main() { 	int i, x, y; 	int array[10]; 	int *p = array; 	for ( i = 0; i < 10; i++) 	{ 		scanf("%d", &array[i]); 	} 	printf("输入要交换的两个下标："); 	scanf("%d %d", &x, &y); 	 	swap(&array[x], &array[y]);  	for ( i = 0; i < 10; i++) 	{ 		printf("%d ", array[i]); 	} }

user: user-0
content: 引用 1 楼 jsx_SEVEN的回复:  #include <stdio.h> #include <stdlib.h>  void swap(int *p1, int *p2) { 	int *p; 	p = *p1; 	*p1 = *p2; 	*p2 = p; } int main() { 	int i, x, y; 	int array[10]; 	int *p = array; 	for ( i = 0; i < 10; i++) 	{ 		scanf("%d", &array[i]); 	} 	printf("输入要交换的两个下标："); 	scanf("%d %d", &x, &y); 	 	swap(&array[x], &array[y]);  	for ( i = 0; i < 10; i++) 	{ 		printf("%d ", array[i]); 	} }  老哥，怎么运行不了的
user-0 提问: 迫切求助

回复:
user: user-1
content: https://bbs.csdn.net/topics/390479595?_da0.05341788334771991  https://jingyan.baidu.com/article/3c48dd3492421ee10ae35869.html

user: user-2
content: 可以尝试以下方法： 1、关闭与杀毒软件、安全卫士相关的软件，再重新编译运行。（包括关闭任务进程里面与安全卫士、电脑管家类似的进程） 2、检查一下你是不是多次运行了这个程序，导致另外有一个运行程序的dos窗口 3、卸载软件，重装！！

user: user-3
content: 代码是没问题的，你有按顺序点击编译、链接、运行吗？ 如果有正确点击还是这样，那么你可以试试创建文件的时候不要用.cpp后缀，用.c后缀。 如果还是不行的话，你换个IDE吧，可以编译C的IDE一大把，比如DEV-C++
user-0 提问: C语言错误

回复:
user: user-0
content: 引用 4 楼 636f6c696e的回复:是的，请不要指望发现了个底层的bug [quote=引用 3 楼 CZzyw 的回复:] [quote=引用 2 楼 636f6c696e的回复:]不用看这一层调用栈，这种一般是你调用的传参有问题导致的 意思是参数错误？？？[/quote][/quote] 害的我虚惊一场

user: user-1
content: 是的，请不要指望发现了个底层的bug 引用 3 楼 CZzyw 的回复:[quote=引用 2 楼 636f6c696e的回复:]不用看这一层调用栈，这种一般是你调用的传参有问题导致的 意思是参数错误？？？[/quote]

user: user-0
content: 引用 2 楼 636f6c696e的回复:不用看这一层调用栈，这种一般是你调用的传参有问题导致的 意思是参数错误？？？

user: user-1
content: 不用看这一层调用栈，这种一般是你调用的传参有问题导致的

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

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

user: user-2
content: 建议自己先写写吧，创建一个链表至少要写出来。  排序方法：可以考虑交换数据，不改变next指向

user: user-3
content: 新建并维护有序链表
user-0 提问: 请问如何实现十进制转负二进制，请教我

回复:
user: user-1
content: -13（base10）=110111（base-2） 注:在负2为基底，(-2)^n为各个数位的权值的负二进制中，11转化为十进制，为-1 解一：易见-13=-16+4-1，故-13(base10tobase-2)=110000+100+11(base-2)=110111 解二：先将13转化，再乘以-1. 13=16-8+4+1=11101(base-2), 故-13=11101*11=111010+11101(base-2), 易见在负二进制中,11+1=0,     1+1=110(base-2), 故(111,010) + (11,101)=(1,010) + (1,101)=110111  解三：先将13转化，再求相反数. 13=16-8+4+1=11101(base-2), 易见在负二进制中,11+1=0，故11101+110111=0，故-13=110111(base-2)  相关：负二进制加法表中的不显然项目： 1+1=110; 11+01=0; 推出： 11+10=(1,1)+(1,0)=(110,1)=1101;  10+10=(110,0)=1110

user: user-0
content: 引用 1 楼 真相重于对错的回复:你转的不对。 没错吧，题目上是这么写的

user: user-2
content: 引用 7 楼 636f6c696e 的回复:负二进制不是求到2进制后取补码，而是： -13=1 * (-2)^0 + 1 * (-2)^1 + 1 * (-2)^2 + 0 * (-2)^3 + 1 * (-2)^4 + 1 * (-2)^5 所以-13的负二进制是110111 [quote=引用 6 楼 真相重于对错 的回复:] -13 如果存贮在一个字节中。 13的源码 00001101。 负数是用补码表示 按位去反+1 变成 11110011；[/quote] sorry，我看成2进制了

user: user-2
content: 引用 7 楼 636f6c696e 的回复:负二进制不是求到2进制后取补码，而是： -13=1 * (-2)^0 + 1 * (-2)^1 + 1 * (-2)^2 + 0 * (-2)^3 + 1 * (-2)^4 + 1 * (-2)^5 所以-13的负二进制是110111 [quote=引用 6 楼 真相重于对错 的回复:] -13 如果存贮在一个字节中。 13的源码 00001101。 负数是用补码表示 按位去反+1 变成 11110011；[/quote]

user: user-3
content: 负二进制不是求到2进制后取补码，而是： -13=1 * (-2)^0 + 1 * (-2)^1 + 1 * (-2)^2 + 0 * (-2)^3 + 1 * (-2)^4 + 1 * (-2)^5 所以-13的负二进制是110111 引用 6 楼 真相重于对错 的回复:-13 如果存贮在一个字节中。 13的源码 00001101。 负数是用补码表示 按位去反+1 变成 11110011；

user: user-2
content: -13 如果存贮在一个字节中。 13的源码 00001101。 负数是用补码表示 按位去反+1 变成 11110011；

user: user-3
content: 参考：https://blog.csdn.net/qq_36924696/article/details/81233519

user: user-0
content: 谢谢各位，我会做了。

user: user-4
content: 二进制没有正负吧，负整数在二进制看来，它之所以为负，是因为有个表示负数的比特位上有了1，所以这个数就被认为是负数。现在有负数的类型有char、short、int、long long，你要将-13（10）转换为110111（-2）是有问题的，也就是你规定了第一个1表示负数，然而你规定的并不行。要转也是转成1111 0011这样的char，或者1111 1111 1111 0011这样的short，或者1111 1111 1111 1111 1111 1111 1111 0011这样的int，或者1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0011这样的long long。至于转二进制的方法，和整型是一样的：  #include "stdio.h"  void main( void ) { 	unsigned n=0;			//利用unsigned，0xffffffff是可以正常计算的正数 	int m=0;				 	char result[32]={0};	        //保存二进制结果，视你要多少位而定 	printf("十进制："); 	scanf("%d",&n); 	printf("二进制："); 	for( ; n>0 ; n/=2 , m++) 		result[m]=n%2;	 	for(m-- ; m>=0 ; m-- )	//倒序输出 		printf("%d",  result[m]); }

user: user-5
content: 二进制有多种处理方案 源码补码反码说清楚

user: user-6
content: #include<stdio.h> int main(){ 	int n,result=0; 	int key = 0, count = 1; 	scanf("%d", &n); 	if (n < 0) { 		key = 1; 		n = -n; 	} 	while (n) { 		result += n % 2 * count; 		n /= 2; 		count *= 10; 	} 	if (key)  		result += count; 	printf("%d", result); 	return 0; }

user: user-2
content: 你转的不对。
user-0 提问: 这个第四个程序该怎么写的跟图片一样啊，急。

回复:
user: user-1
content: #include<stdio.h> #include<string.h>  #define     ROW     4 #define     COL     4  int main() {     int i, j;     int arr[ROW][COL], sum, cnt = 1;      for (i = 0; i < ROW-1; i++) {         sum = 0;         for (j = 0; j < COL-1; j++) {             arr[i][j] = cnt;             sum += cnt++;         }         arr[i][j] = sum;     }      j = 0;     while (j < COL) {         sum = 0;         for (i = 0; i < ROW-1; i++)             sum += arr[i][j];         arr[i][j] = sum;         j++;     }      for (i = 0; i < ROW; i++) {         for (j = 0; j < COL; j++)             printf("%4d", arr[i][j]);         putchar(10);     }      return 0; }  比较笨的方法，供参考～

user: user-2
content: 两个循环就可以了，先从行中找到最大值，然后再从对应列中判断是不是最小值，如果是，就找到了。
user-0 提问: C语言

回复:
user: user-1
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl   Audio Samples  Click to open or copy the files for the Audio samples.  Sample Description  ACMAPP Displays wave file format, and plays, records, and converts wave files. Demonstrates how to use the Audio Compression Manager API's in Windows. Can be used as an ACM driver test.  IDFEDIT MIDI IDF (Instrument Definition File) editor.   LOWPASS Low-pass filter for waveform audio.  MCIAPP MCI test application.  MCIPLAY Simple video playback application. Uses MCIWnd.  MCIPUZZL Application lets you make a 15-square puzzle of a playing video sequence. Shows how to use installable draw procedures.  MIDIMON Sample that displays textual listing of MIDI input messages.  MIDIPLYR Sample MIDI player.  MIXAPP Sample mixer application.  MMCAPS Sample that shows the multimedia capabilities of the hardware.  REVERSE Simple application that will play a waveform in reverse.  SOUNDAPP Simple application showing the SndPlaySound API.  WAVEFILE Sample AVIFile file handler for waveform audio files.  To install, execute dseqfile.reg and copy dll to system dir. Can be used with AVIEDIT or AVIVIEW.    See also, in the Video Samples section:  LANGPLAY Plays back multi-audio stream AVI files. MULTILNG.AVI is an example file found on the CD.    Building SDK Samples
user-0 提问: 求指教，为什么程序在vc上运行会出现乱码，在cf和vs上都可以成功运行

回复:
user: user-0
content: 引用 1 楼 赵4老师的回复:“多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？ 我知道问题在哪了，谢谢您

user: user-0
content: 引用 1 楼 赵4老师的回复:“多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？ 老师您好，谢谢你的指点，但是我发现问题是每一个数组的第一个都没有存储数据在里面，不知道是什么原因，希望您能指教

user: user-1
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？
user-0 提问: 数据结构的一道相关题目

回复:
user: user-1
content: 模糊查询稍稍修改一下条件

user: user-2
content: 思考2个问题： 1、单词库怎样存？用数组？链表？集合？还是树？这些集合的优缺点是什么？你题目的需求又是什么？ 2、怎样匹配？顺序匹配速度够快吗？如果不用顺序匹配，用什么匹配算法？要用到什么数据结构？

user: user-3
content: 使用链式结构 构造一棵搜索树，在单词匹配的时候使用搜索树进行匹配，不要用库，库的适用性很强，但针对性不强，单次使用效率很高，但重复性使用效率极低
user-0 提问: 我觉得是3

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> char buf[17]; union U {   unsigned short int aa;   struct {     unsigned int bb:7;//(bit 0-6)     unsigned int cc:6;//(bit 7-12)     unsigned int dd:3;//(bit 13-15)   }; } u; void main() {                 //bbbbbbbbbbbbbbbb                 //iiiiiiiiiiiiiiii                 //tttttttttttttttt                 //111111                 //5432109876543210                 //::::::::::::::::     u.aa=0xE07F;//1110000001111111     printf("bb==%d,cc==%d,dd==%d\n",u.bb,u.cc,u.dd);     u.bb=0x41;     u.cc=0x21;//dddccccccbbbbbbb     u.dd=5;   //1011000011000001     printf("aa==0x%04X==%016s(2)\n",u.aa,itoa(u.aa,buf,2)); } //bb==127,cc==0,dd==7 //aa==0xB0C1==1011000011000001(2)

user: user-2
content: 是5没问题，因为one和two公用同一个内存空间，最后赋值的5，所以输出的是5.

user: user-3
content: union是共用体，成员中的变量共享一个存储空间，因此，每次只能有一个成员占用空间，空间里存储的是最近的成员变量，所以是5

user: user-4
content: 在任意时刻，union联合中只能有一个数据成员可以有值。当给联合中某个成员赋值之后，该联合中的其它成员值就会发生改变。 所以，当 t.one=5; 时，因为one和two的类型都是int，所以，t.two的值也变成了5.  请参考《C++中union的使用方法》 希望能够帮到你！

user: user-5
content: 百度union结构吧。。。话说你union都不懂怎么就这么确认是3的

user: user-6
content: 百度百科：共用体

user: user-7
content: 没问题，是5，union是共用体，具体介绍你可以度娘，关于共用体，你只需要记住一点：最后一次赋值所得的值就是共用体的值

user: user-8
content: 说白了，你这个t是共用体类型，在你这个程序中，它只有1个int成员，one和two使用的都是这同一个，所以one先改变了这个int，two接着也改变了这个int，所以这个int的值肯定是后改变的那个值了，也就是5。
user-0 提问: 求大佬帮忙解释下代码含义

回复:
user: user-1
content: 这个是C语言的基础知识，可以先自己学一下。看懂别人的程序也是一种提升！

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

回复:
user: user-0
content: 引用 1 楼 user-3的回复:先要编译生成exe 好的，弄好了，谢谢

user: user-1
content: 能不能教教我怎么处理的，我被困扰很久了

user: user-0
content: 引用 2 楼 轻箬笠的回复:先编译，再调试。如果还是不行，可以把项目放到“无中文且无空格”的目录下，重新编译试试 好的，弄好了，谢谢

user: user-2
content: 先编译，再调试。如果还是不行，可以把项目放到“无中文且无空格”的目录下，重新编译试试

user: user-3
content: 先要编译生成exe
user-0 提问: 求助 最基本c语言题目

回复:
user: user-1
content: 最简单有效的办法：百度一下，你就知道。 当然了，也不排除论坛里有闲得蛋疼的大神帮你把代码整整齐齐地写出来，格式调整好，双手洗干净，最后恭恭敬敬地端到你的面前。
user-0 提问: 怎样添加管理员输入条件，对日期进行限制。让月数不超过12，天数不超过31

回复:
user: user-1
content: 简单点的办法：对输入的字符进行判断。不符合规则给出提示。 复杂点的办法：使用键盘钩子。
user-0 提问: 谁能帮我写个代码啊，用C语言，我是真的不会了

回复:
user: user-1
content: 难度在哪里？表映射就好了

user: user-0
content: 引用 1 楼 user-1的回复:难度在哪里？表映射就好了 就是如何把文件里面的相关东西弄到数组里面？

user: user-0
content: 就是如何把文件里面的相关东西弄到数组里面
user-0 提问: 数组问题

回复:
user: user-1
content: 引用 4 楼 自信男孩 的回复:[quote=引用 2 楼 csucxy 的回复:] #include <stdio.h> #include <math.h> int main(void) {     //double num[8];     double num[9];     int index;     double i;      //for (index = 0; index < 8; index++)     for (index = 0; index <= 8; index++)     {         i = index;         num[index] = pow(2, i);     }      //printf("%f\n", num[1]);      index = 0;     do     {         //printf("%f\n", num[index]);         printf("%d\t%d\n", index, int(num[index]));         index++;         //} while (index < 7);     } while (index <= 8);      return 0; } 注意，while的判断条件index <= 8不能等于8，否则数组越界了[/quote] 原题求2的前8次幂，我的理解是包括2的8次方，所以应该修改数组的长度，循环也应该等于8.

user: user-2
content: 引用 2 楼 csucxy 的回复:#include <stdio.h> #include <math.h> int main(void) {     //double num[8];     double num[9];     int index;     double i;      //for (index = 0; index < 8; index++)     for (index = 0; index <= 8; index++)     {         i = index;         num[index] = pow(2, i);     }      //printf("%f\n", num[1]);      index = 0;     do     {         //printf("%f\n", num[index]);         printf("%d\t%d\n", index, int(num[index]));         index++;         //} while (index < 7);     } while (index <= 8);      return 0; } 注意，while的判断条件index <= 8不能等于8，否则数组越界了

user: user-2
content: #include <stdio.h> #include <math.h>  int main(void) {     double num[8];     int index;     double i;      for (index = 0; index < 8; index++) {         i = index;         num[index] = pow (2 , i);     }     //printf("%f\n", num[1]);     index = 0;     do     {         printf("%.0f\n", num[index++]);     } while (index < 8);     return 0;  }  供参考！

user: user-1
content: #include <stdio.h> #include <math.h> int main(void) {     //double num[8];     double num[9];     int index;     double i;      //for (index = 0; index < 8; index++)     for (index = 0; index <= 8; index++)     {         i = index;         num[index] = pow(2, i);     }      //printf("%f\n", num[1]);      index = 0;     do     {         //printf("%f\n", num[index]);         printf("%d\t%d\n", index, int(num[index]));         index++;         //} while (index < 7);     } while (index <= 8);      return 0; }
user-0 提问: c语言运算问题

回复:
user: user-1
content: 既然这样的话，直接定义三个变量，int a,b; char  op ;//表示运算符 因此要考虑到一点，输出b时，应该是输出abs(b)，因为符号我们单独提取出来了，注意加abs的头文件#include<math.h> 修改后的代码如下：  #include<stdio.h> #include<math.h> //abs函数的头文件   int main() {     int a,b;     char op;     scanf("%d%d",&a,&b);     op=b>0?'+':'-';  //当b大于0时，op是+，当b小于0时，op是-     printf("%d%c%d=%d",a,op,abs(b),a+b);//由于当b小于0时，op为负号，所以这里取的是b的绝对值           return 0; }

user: user-2
content: printf("%d %c %d = %d\r\n",      a, b>=0?'+':'-', abs(b), a + b);

user: user-3
content: 引用 3 楼 wc2cwl48 的回复:[quote=引用 1 楼 拥抱Linux的回复:]输入的时候，中间的 英文半角的 逗号 输入了么？ 输入了，可是还是不行，第二个数只要是负数就不对[/quote] 你说的 正号 实际上只是 你的 printf 的 格式化字符串里面固化的那个  加号吧？  变量b输入的是负数的话，输出来的肯定是负数啊，只不过 printf  里不管正数负数都会照常输出中间的那个固化的  加号 啊。  比如，输入「10,-5」，输出结果是「10+-5=5」 ==》  「10 加号 -5 = 5 」。是这样的吧？ 简单的解决办法的话，就是根据b的值的正负情况，按不同的输出格式来输出喽。正数的话，就是 "%d+%d=%d"，负数的话，就是"%d%d=%d"。 ～

user: user-0
content: 引用 1 楼 拥抱Linux的回复:输入的时候，中间的 英文半角的 逗号 输入了么？ 输入了，可是还是不行，第二个数只要是负数就不对

user: user-0
content: 输入了，可是还是不行，第二个数只要是负数就不对

user: user-3
content: 输入的时候，中间的 英文半角的 逗号 输入了么？
user-0 提问: 调试一直无限循环

回复:
user: user-1
content: 你的程序存在以下问题： 1、for(;int i=0.i<N;i++) 修改为for(int i=0;i<N;i++) 2、你stu[i].sum=a;最好写在j的循环外面，因为你是把这个学生的所有成绩之和放在sum中，当然不放在循环体外也没有问题，只是多次赋值而已。 3、你的a初始化应该放在i的循环体内，因为a是存储每一位学生的总分，所以在计算每一位学生的总分前均要初始化为0. 4、stu[i].ave=stu[i].sum/3;改为stu[i].ave=stu[i].sum*1.0/3;因为平均分可能会有小数。 5、你的程序死循环是因为你的输入的学号和姓名没有按照你指定的格式输入，中间要有一个英文的逗号。有关scanf的使用可以看看这篇文章。https://blog.csdn.net/weixin_43956598/article/details/90416984 6、你缺少输出平均值的语句；printf("第%d名同学的平均成绩为：%f\n",i+1,stu[i].ave); 修改后的程序为：  #include<stdio.h> #include<string.h> #define N 5  struct student { 	int id; 	float score[3]; 	float sum,ave; 	char name[10]; 	student(){ 		sum=0; 		ave=0; 		for(int i=0;i<3;i++) 		score[i]=0; 	} } stu[N]; int main() { 	int i,j; 	float a; 	for(i=0; i<N; i++) { 		a=0;//在这里初始化 		printf("第%d名同学的学号和姓名",i+1); 		scanf("%d,%s",&stu[i].id,&stu[i].name); 		for(j=0; j<3; j++) { 			printf("请输入%s的第%d门成绩：\n",stu[i].name,j+1); 			scanf("%f",&stu[i].score[j]); 			a=a+stu[i].score[j]; 		} 		stu[i].sum=a;//写在循环外 		stu[i].ave=stu[i].sum*1.0/3;//这里必须乘以1.0才能得到有小数的结果  		printf("第%d名同学的平均成绩为：%f\n",i+1,stu[i].ave); 	}  	return 0; }

user: user-1
content: 为什么发图片呢？直接把代码粘贴上

user: user-2
content: 把第一张显示代码的照片，重新拍成跟后面的一样清晰的，然后发上来吧！ 全是噪音条纹没法儿看。 目前，只能顶着闪瞎的条纹隐约看到  for循环的圆括号里面的语句，写错位了！   （1）代码里面的错误写法是  for(;i =0, i<N;i++)  应该改成  for(i =0; i<N;i++)  因为错误的写法中，循环的判断条件，也就是中间那部分，永远都是成立的，所以是死循环。 ～ （2）输入学号和姓名的时候， scanf函数的格式化字符串里面是什么，就严格按照格式输入，按照你的代码是应该输入「学号」、「逗号（英文半角）」、「姓名」这三部分的，中间的「逗号」不能用空格或者回车来代替，否则scanf接收不到期望的输入值，会产生错误。 ～ 其它部分实在看不清楚了，你先把这个改了，测试一下再说吧。 ～ 如有帮助，烦请及时结帖、给分啊！ ：-） ～

user: user-0
content: 一直循环的原因找到了，没输逗号，但还是一直是第一名学生

user: user-0
content: 一直循环的原因找到了，没输逗号，但还是一直是第一名学生
user-0 提问: c语言示例

回复:
user: user-1
content: 一个小小的提醒：一般情况下，语句或者语句块里，都需要注意用分号来结尾，不要把语句末尾的分号遗漏了哦！  当然了，总有一些特殊的情况，偶尔也会有在花括号括起来的语句块里，不出现分号，但是也正常、合法地运行的代码。比如：  #include <stdio.h>  int main(void) { 	// if代码块中不必出现语句末尾的分号         if (printf("Hello, world!\n")) { 	}  	return 0; }   上面的代码权当是一个小玩笑吧！正式的代码，肯定不会这样写。  总之，还是想提醒一下：一般情况下，语句或者语句块里，都需要注意用分号来结尾，不要把语句末尾的分号遗漏了哦！ ～

user: user-2
content: 从基础学起，加油
user-0 提问: 在线求答案 急要 谢谢

回复:
user: user-1
content: https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E8%BF%9B%E5%88%B6%E8%BD%AC%E6%8D%A2&step_word=&hs=0&pn=110&spn=0&di=110990&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=295857233%2C1686668445&os=646411978%2C3357745401&simid=3487293951%2C200630556&adpicid=0&lpn=0&ln=1073&fr=&fmq=1558494541988_R&fm=index&ic=0&s=undefined&hd=undefined&latest=undefined©right=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fwww.wendangwang.com%2Fpic%2F4aa0c60db880936cd77b7127%2F2-500-png_6_0_0_404_607_488_527_892.979_1262.879-599-0-1268-599.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bojg1wg2owg2_z%26e3Bv54AzdH3F15vAzdH3F9wwavma1kbbalnmv100k08d0AzdH3Fd&gsm=3c&rpstart=0&rpnum=0&islist=&querylist=&force=undefined

user: user-2
content: 在线求人民币 急要 谢谢
user-0 提问: 编辑框消息EM_LINEINDEX是什么意思？

回复:
user: user-1
content: EM_LINEINDEX An application sends an EM_LINEINDEX message to retrieve the character index of a line in a multiline edit control. The character index is the number of characters from the beginning of the edit control to the specified line.   EM_LINEINDEX  wParam = (WPARAM) line; // line number  lParam = 0;             // not used; must be zero    Parameters line  Value of wParam. Specifies the zero-based line number. A value of –1 specifies the current line number (the line that contains the caret).  Return Values The return value is the character index of the line specified in the line parameter, or it is –1 if the specified line number is greater than the number of lines in the edit control.   QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winuser.h.  See Also Edit Controls Overview, Edit Control Messages, EM_LINEFROMCHAR
user-0 提问: C语言上#ifdef和#ifndef等宏定义为什么都不分级缩进？

回复:
user: user-1
content: 引用 11 楼 JhonDao 的回复:总共说了两句话，但是一句没在正题上。回答别人的问题就好像打擦边球，似是而非。看起来说的很有道理，但其实啥也没说，你到底知不知道啊？ 悄悄告诉你，你发现了一个真相，一个 隐藏 在这个论坛的 公开 的真相！  说回帖子问题，查询了一下，个人觉得大概是两个原因，（1）历史遗留原因，（2）可读性与易分辨的综合作用原因。  （1）历史遗留原因： 远古时期（ANSI-C之前）的C编译器只认 # 位于一行的开头才是宏定义，于是形成了一种风格。尽管后来至今的 C 标准以及编译器早就允许 # 的前面、后面可以有空格，但是还是有很多人有顶格写 # 的习惯， 包括很多文本编辑器的自动缩进方案也是把宏定义的 # 调整为顶格。  （2）可读性与易分辨的综合作用原因： 诚如楼主所言，把宏定义（条件编译命令）的 #ifdef 、#else 、 #endif 等采用 整体 分层缩进的形式，可读性很好，很容易看清楚层次。 不过，就楼主贴出来的代码片段本身，实际上也是采用了分层缩进的形式的呀，只不过不是整体缩进，而是对 # 后面的内容进行缩进而已。俺以为，觉得可读性不高的原因应该是 不同习惯的人，阅读的时候有不适应的感觉吧。这个嘛，还是偏主观方面多一些吧？  另外还有一种情况是宏定义（条件编译命令）不是在文件头部，而是混合在代码中间的情况，如果不顶格而是跟随一般代码采用同样的缩进的话，宏 与 一般代码 混合在一起，才更不容易发现、阅读。比如：  #include <stdio.h>  int main()  { 	#ifdef DEBUG 	printf("debug"); 	#else 	printf("notdebug"); 	#endif 	return 0; }  和  #include <stdio.h>  int main() { #ifdef DEBUG 	printf("debug"); #else 	printf("notdebug"); #endif 	return 0; }  当然了，这第二种情况和楼主说的分层缩进可能不完全是同一个意思，权且顺便一说。  总结一下：俺个人还是觉得这个问题更大的原因在于 个人的编程风格和习惯 ，分层缩进 只要不是在远古级别的编译器里应该都不会出错，所以应该是觉得哪种更顺手、顺眼就使用了哪种吧！一家之言，仅供参考！ ～

user: user-0
content: 引用 10 楼 赵4老师 的回复:[quote=引用 5 楼 赵4老师 的回复:] 代码被编译时编译宏的嵌套层次 和 代码运行时复合语句的嵌套层次 怎么能混为一谈呢？！  天仙投胎到人间前在仙班的座次 和 天仙投胎到人间后在人间的地位 怎么能混为一谈呢？！ [/quote]总共说了两句话，但是一句没在正题上。回答别人的问题就好像打擦边球，似是而非。看起来说的很有道理，但其实啥也没说，你到底知不知道啊？

user: user-2
content: 引用 5 楼 赵4老师 的回复:代码被编译时编译宏的嵌套层次 和 代码运行时复合语句的嵌套层次 怎么能混为一谈呢？！  天仙投胎到人间前在仙班的座次 和 天仙投胎到人间后在人间的地位 怎么能混为一谈呢？！

user: user-3
content: 编码风格，没有对错

user: user-0
content: 引用 5 楼 赵4老师 的回复:代码被编译时编译宏的嵌套层次 和 代码运行时复合语句的嵌套层次 怎么能混为一谈呢？！ 1.宏定义有可能出现多层次的嵌套，并且宏定义还比较长，至少一屛显示不完。2.前面加缩进不会导致编译问题，至少我的VS2005没出现这个问题。3.结合前面两点，得出结论，宏定义中采用分层缩进会增加代码的易读性。跟什么混为一谈没什么关系。

user: user-0
content: 引用 2 楼 袁君元 的回复:主要用于方便调试程序，举个简单的例子，当你程序有问题的时候，你需要通过输出中间结果来检查问题，当程序很复杂的时候，你输出的中间结果很多，最后调试正确后，你就需要把中间结果注释掉，这个时候用它的话，只需要把中间变量进行宏定义。就可以一次性把所有的中间结果注释掉。我问的是宏定义的分层缩进，你在回答宏定义的作用。

user: user-0
content: 引用 1 楼 user-6 的回复:因为一般都习惯#和命令挨着写 而#必须顶格看来你没实际操作过，不清楚到底能不能这么做。

user: user-2
content: 代码被编译时编译宏的嵌套层次 和 代码运行时复合语句的嵌套层次 怎么能混为一谈呢？！

user: user-4
content: 我也不知道为什么，我个人分析头文件的时候会习惯修改，加上缩进分层次。

user: user-4
content: 引用 1 楼 user-6 的回复:因为一般都习惯#和命令挨着写 而#必须顶格 #必须顶格？谁说的？没这回事。难道你在#include "stdio.h"前面敲个空格就没法编译了？

user: user-5
content: 主要用于方便调试程序，举个简单的例子，当你程序有问题的时候，你需要通过输出中间结果来检查问题，当程序很复杂的时候，你输出的中间结果很多，最后调试正确后，你就需要把中间结果注释掉，这个时候用它的话，只需要把中间变量进行宏定义。就可以一次性把所有的中间结果注释掉。

user: user-6
content: 因为一般都习惯#和命令挨着写 而#必须顶格
user-0 提问: 64位、32位系统问题

回复:
user: user-1
content: 我说的是PE头，不是什么SizeOfOptionalHeader，DOS Stub接下来就是PE头，PE头的开始标记是50 45 00 00，接下来一个16位字就是machine

user: user-0
content: 引用 3 楼 早打大打打核战争 的回复:最简单的方法，GetBinaryType 复杂一点，直接读PE头，第一个16位字就是Machine（CPU Type） 0x14c i386 0x14d i486 0x14e Pentium+ 0x8664 x64 还有很多，参考winnt.h  这个，表示怀疑中，pe文件的NT头里，SizeOfOptionalHeader，对于32位文件来说，它是224；对于64位文件来说，它是240

user: user-1
content: 最简单的方法，GetBinaryType 复杂一点，直接读PE头，第一个16位字就是Machine（CPU Type） 0x14c i386 0x14d i486 0x14e Pentium+ 0x8664 x64 还有很多，参考winnt.h

user: user-2
content: PE结构有区别 在可选头开始有一个Magic的WORD 32位和64位是不一样的

user: user-3
content: 當然可以了，網上搜一下就出來：  https://blog.csdn.net/reversalc/article/details/8022977
user-0 提问: C语言编程题

回复:
user: user-1
content: 指点谈不上，给你指条明路：百度一下，你就知道。 当然了，也不排除论坛里有闲得蛋疼的大神帮你把代码整整齐齐地写出来，格式调整好，双手洗干净，最后恭恭敬敬地端到你的面前。
user-0 提问: 这个错误怎么解决

回复:
user: user-0
content: 谢谢您的指导，万分感谢

user: user-1
content: struct people {         char name[10];         float basedmoney;         float floatmoney;         float output;     }a[50] = {" ", .basedmoney=0, .floatmoney=0, .output=0 }; 供参考！  另外，程序还有其他问题，数组越界，即a是50个成员，循环次数使用100； 第二个问题，name是数组，却用%c格式输入/输出。  最后，建议问问题直接贴代码，发图片没问题，只是发的清晰一些的图片

user: user-2
content: 麻烦你以后还是直接粘贴代码： 存在以下问题： 1、明明定义的结构体数组大小为50，怎么后面i循环到100了呢？数组越界 2、name是数组，用%s输入输出，%c只是针对单个字符 3、定义结构体数组的时候，可以不用赋值。直接写成：      struct people {         char name[10];         float basedmoney;         float floatmoney;         float output;     }a[50];
user-0 提问: 关于一个函数内五条打印的问题， 涉及性能，达人请进

回复:
user: user-1
content: 打印或输出log 都不要太频繁，不然降低性能。

user: user-2
content: 可以在run to complete的系统上run一下， 或者内核里面写同样的打印，试试效果。

user: user-3
content: 并发和单次调用是如何写的呢，是否与多核多线程工作有关？ 另外，for循环中调用怎么写的，是否与函数调用传参，高速缓存以及IO调用方式有关？

user: user-4
content: 可以通过绑核、核隔离来提升，确保不会出现cpu切换、cpu被抢占带来的耗时 引用 2 楼 szws 的回复:另外一个实验， 把5条打印， 放在for循环里， 循环1万次，  则 CPU会冲高到7%， 并且， 5条打印总耗时， 只有 13us。  恶的天啊， 为啥 相差这么大， 从197us 到 13us ？  能否始终提高 CPU的效率？ 让他一只很high的工作？

user: user-0
content: 另外一个实验， 把5条打印， 放在for循环里， 循环1万次，  则 CPU会冲高到7%， 并且， 5条打印总耗时， 只有 13us。  恶的天啊， 为啥 相差这么大， 从197us 到 13us ？  能否始终提高 CPU的效率？ 让他一只很high的工作？

user: user-0
content: 感觉是 cpu 使用率越高， 处理效率就越高

user: user-4
content: 可以设置下线程为FIFO试试 引用 5 楼 szws 的回复:[quote=引用 3 楼 636f6c696e 的回复:] 可以通过绑核、核隔离来提升，确保不会出现cpu切换、cpu被抢占带来的耗时 [quote=引用 2 楼 szws 的回复:] 另外一个实验， 把5条打印， 放在for循环里， 循环1万次，  则 CPU会冲高到7%， 并且， 5条打印总耗时， 只有 13us。  恶的天啊， 为啥 相差这么大， 从197us 到 13us ？  能否始终提高 CPU的效率？ 让他一只很high的工作？[/quote]  已经绑核，没啥改变~~~[/quote]

user: user-5
content: 这个就是windows分配时间片的策略啊 你的工作越忙,就越不可能CPU时间被分给其他的线程 你也可以手动提高线程的优先级

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

user: user-0
content: 引用 3 楼 636f6c696e 的回复:可以通过绑核、核隔离来提升，确保不会出现cpu切换、cpu被抢占带来的耗时 [quote=引用 2 楼 szws 的回复:] 另外一个实验， 把5条打印， 放在for循环里， 循环1万次，  则 CPU会冲高到7%， 并且， 5条打印总耗时， 只有 13us。  恶的天啊， 为啥 相差这么大， 从197us 到 13us ？  能否始终提高 CPU的效率？ 让他一只很high的工作？[/quote]  已经绑核，没啥改变~~~
user-0 提问: C语言 VS2019出现问题

回复:
user: user-1
content: 说错了哈哈哈，别介意

user: user-1
content: 你用C＋＋语言写程序却用C语言的去调试，肯定不行啊

user: user-2
content: test1.c改成test1.cpp 不然会按照c编译而不是c++
user-0 提问: 最近在自学c，向各位大佬求助一个程序，最好有完整的程序式，个人做做学习参考

回复:
user: user-1
content: 引用 1 楼 jsx_SEVEN 的回复:没写注释  #include <stdio.h>  struct Employee { 	char ID[30]; 	char Sex[10]; 	double Salary; };  int main() { 	struct Employee emp = {"zhangsan","Man",5000}; 	printf("%s\n", emp.ID); 	printf("%s\n", emp.Sex); 	printf("%f\n", emp.Salary); }  看到性别是 Man  笑出声了～

user: user-2
content: 引用 1 楼 jsx_SEVEN 的回复:没写注释  #include <stdio.h>  struct Employee { 	char ID[30]; 	char Sex[10]; 	double Salary; };  int main() { 	struct Employee emp = {"zhangsan","Man",5000}; 	printf("%s\n", emp.ID); 	printf("%s\n", emp.Sex); 	printf("%f\n", emp.Salary); }  salary建议用float就可以了。

user: user-3
content: 没写注释  #include <stdio.h>  struct Employee { 	char ID[30]; 	char Sex[10]; 	double Salary; };  int main() { 	struct Employee emp = {"zhangsan","Man",5000}; 	printf("%s\n", emp.ID); 	printf("%s\n", emp.Sex); 	printf("%f\n", emp.Salary); }
user-0 提问: 程序编译无误但是没有显示输出

回复:
user: user-1
content: 明显的野指针问题，根本就没有定义time的实体

user: user-2
content: 野指针使用。建议在main函数内加上这两句：struct time tm; time = &tm;

user: user-3
content: （1）代码中 只 定义了 一个 结构体指针 struct time *time ，注意了，是指针，而不是结构体变量，所以 time 这个指针只能指向一个结构体变量。也就是说， 代码没有定义任何一个 结构体变量， 系统也就没有分配内存单元给任何一个结构体变量，指针 time 也没有指向任何一个结构体变量， 所以 「time->成员」这样的行为是非法的，会访问一个未知的内存地址，从而引发了内存访问错误。 （2）最简单的修改办法是，在main 函数中先定义一个 struct time 的变量， 然后让 指针 time 指向它，然后后面的代码就不用改了。 （3）当然了，你也可以把 time 定义的前面的 * 去掉，让这个 time 成为一个结构体变量，只不过后面的 访问成员的表达式 要把 ->运算符 改成 . 运算符，麻烦一点。

user: user-4
content: 把代码粘贴出来

user: user-0
content: 引用 5 楼 袁君元 的回复：你这个定义的是结构体指针，但是这个指针系统并没有为它分配内存，就是楼上说的野指针，其实一般情况下能不用指针的地方就不用，新手很容易弄错的，你这里直接把*time改为time就可以了，把它变为一个结构体变量，然后后面用点.来访问其成员变量即可嗯嗯！！

user: user-0
content: 引用 3 楼 自信男孩 的回复：野指针使用。建议在main函数内加上这两句：struct time tm; time = &tm;谢谢！！

user: user-0
content: 引用 2 楼 拥抱Linux 的回复：（1）代码中 只 定义了 一个 结构体指针 struct time *time ，注意了，是指针，而不是结构体变量，所以 time 这个指针只能指向一个结构体变量。也就是说， 代码没有定义任何一个 结构体变量， 系统也就没有分配内存单元给任何一个结构体变量，指针 time 也没有指向任何一个结构体变量， 所以 「time->成员」这样的行为是非法的，会访问一个未知的内存地址，从而引发了内存访问错误。 （2）最简单的修改办法是，在main 函数中先定义一个 struct time 的变量， 然后让 指针 time 指向它，然后后面的代码就不用改了。 （3）当然了，你也可以把 time 定义的前面的 * 去掉，让这个 time 成为一个结构体变量，只不过后面的 访问成员的表达式 要把 ->运算符 改成 . 运算符，麻烦一点。谢谢！！！我知道了！！

user: user-4
content: 你这个定义的是结构体指针，但是这个指针系统并没有为它分配内存，就是楼上说的野指针，其实一般情况下能不用指针的地方就不用，新手很容易弄错的，你这里直接把*time改为time就可以了，把它变为一个结构体变量，然后后面用点.来访问其成员变量即可
user-0 提问: 萌新求助

回复:
user: user-1
content: 建议用字符串的方式处理读取的内容。楼主这种方式也就用来学习，还能接受

user: user-2
content: 请判断fscanf函数的返回值。

user: user-0
content: 那应该怎么解决，怎么删除这一空行呢

user: user-3
content: 可能是因为你文件结尾有一行空行吧
user-0 提问: 不知道能不能在这里找到人知道c语言作业。

回复:
user: user-1
content: 有个简单的思路就是你直接从后往前把字符存入到新的数组里面就可以了

user: user-2
content: （1）如果要求必须在原字符数组中操作，而不能定义新的数组来赋值转移的话，就把前6个字符按第1个与第6个、第2个与第5个、第3个与第4个逐对逐次交换的办法来获得逆序存放的结果。交换变量的值，你肯定会的嘛，就不细说了。最后输出字符数组就可以看到结果了。 （2）如果可以定义一个新的字符数组的话，更简单，不需要交换操作，直接把原数组的前6个元素按6个到第1个的顺序赋值给新数组的第1个到第6个，然后把剩下的元素按同样的顺序赋值给新数组就行了。 ～
user-0 提问: C语言问题

回复:
user: user-1
content: 这个9是随机值，因为你只是定义了s这个字符数组。但并没有给s这个字符数组赋值，而strlen是根据‘\0’来确定s的长度，既然你没有赋值，所以'\0'的位置不确定，因而它的长度就不确定的。

user: user-0
content: 引用 2 楼 Italink的回复:我这里还输出63了，初始化一下字符串，字符串以\0为终止字符，没有初始化的话，会访问字符串外的数据 ，直到访问到\0  # include"stdio.h" # include"string.h" void part(char* s) { 	printf("%d", strlen(s)); } int main() { 	char s[50]=""; 	part(s); }  嗯，谢谢，懂了       ！

user: user-0
content: 引用 1 楼 user-3的回复:不初始化你想要什么结果？ strlen遇到\0就截止了啊，任何结果都有可能 我还以为有什么特殊含义呢！原来是垃圾值，我说怎么连字符串都没输入，怎么有结果呢！谢谢

user: user-2
content: 我这里还输出63了，初始化一下字符串，字符串以\0为终止字符，没有初始化的话，会访问字符串外的数据 ，直到访问到\0  # include"stdio.h" # include"string.h" void part(char* s) { 	printf("%d", strlen(s)); } int main() { 	char s[50]=""; 	part(s); }

user: user-3
content: 不初始化你想要什么结果？ strlen遇到\0就截止了啊，任何结果都有可能
user-0 提问: 求教c语言基础题

回复:
user: user-0
content: 引用 3 楼 诉说丶淡黑色的回复:double吧，double 的等级比int高，int会向double转换 好像强制类型转换会把后边转换成int

user: user-1
content: 对，我看错了

user: user-2
content: 应该是C了，注意一下强制类型转换，把后面的看成int，前面char转int，所以最后是int

user: user-3
content: int，C，(int)强制转换

user: user-4
content: C 呀。如果你确定不了，就用 sizeof（w*x+(int)(z-y)）看看，结果为4就是int。 如果非要说4字节也有可能是unsigned int，我有办法验证这个常量是int还是unsigned，前提是你需要的话。

user: user-5
content: 引用 楼主 weixin_44091029 的回复:char w;int x;float y;double z；则表达式w*x+(int)(z-y)的结果类型为（） A。float   B。char  C。int D。double (int)(z-y)中无论（z-y）转成什么类型最后都被int强制截断 所以C

user: user-6
content: 选择C int类型

user: user-7
content: 应该是C，int型。 （1）隐式类型转换，也叫自动类型转换，纯粹由编译器自主完成，转换的方向是从小的数据类型向大的数据类型转换。 （2）显式类型转换，也叫强制类型转换，是由用户（程序员 / 代码）主动发起的类型转换行为，转换的方向与隐式类型转换正好相反：从大的数据类型向小的数据类型转换，否则也没必要进行显式转换了。 ～

user: user-8
content: 选C；原因如下： w*x中w是char型，x是int型，当char型变量用于运算的时候，一般都是用字符对应的ASCII码值参与运算的，而ASCII码值是int型，所以w*x也是int型； (int)(z-y)是把z-y的计算结果强制转化为int型。 所以最终结果是int型

user: user-1
content: double吧，double 的等级比int高，int会向double转换

user: user-0
content: 引用 1 楼 hzh_Beyond的回复:第一眼看过去，C 我也觉得是C但是室友说肯定是D，互相说服不了所以来问问大家

user: user-9
content: 第一眼看过去，C
user-0 提问: 菜鸡一枚，请大佬们帮下忙

回复:
user: user-1
content: 知道为什么没人回答你的问题吗？因为别人没义务帮你做作业，原则上说，我也不应该帮。但愿你只是不会，而不是不愿意动手  #include<stdio.h> #define  MAX 100 void assign(int a[], int len) { 	for (int i = 0; i < len; i++) 		scanf("%d", &a[i]); } int max(int a[], int len) { 	int max_value = a[0]; 	for (int i = 1; i < len; i++) 		if (a[i] > max_value) 			max_value = a[i]; 	return max_value; }int min(int a[], int len) { 	int value = a[0]; 	for (int i = 1; i < len; i++) 		if (a[i] < value) 			value = a[i]; 	return value; } int main(){ 	int a[MAX]; 	int len = 5;	//假设长度为5 	assign(a, len); 	printf("max = %d\n", max(a, len)); 	printf("min = %d\n", min(a, len)); 	return 0; }
user-0 提问: 求助!用c语言写一个超市管理系统要用到哪些东西？很急，在线等！

回复:
user: user-0
content: 引用 1 楼 老马何以识途的回复:c做這种應用有點費勁啊，你需要連接一個數據庫，在數據庫做增刪改查的操作 但是我们只学了c语言，老师让写的大作业

user: user-1
content: c做這种應用有點費勁啊，你需要連接一個數據庫，在數據庫做增刪改查的操作
user-0 提问: 教一下怎么做，谢谢！用c语言

回复:
user: user-1
content: 引用 3 楼 bin_shuaiwang 的回复：[quote=引用 2 楼 袁君元的回复:]这道题很简单，思路如下： 1、计算出第一个a...a（共n个a）的值，因为是在它的基础上进行减法的，所以它就作为初始值；这个计算其实就用一个for循环就可以得出。 2、由于后面每一个数的变化规律就是在前一个数的基础上少一位，这有个技巧，可以直接用/10的方法得到，因为程序中的除以10可以起到去掉最后一位的效果，这样就可以实现这种规律变化 3、最后在for循环中实现减法就可以了。有什么不懂再问哦！ 完整的代码和重要的标注如下：  #include<iostream> using namespace std; int main() { 	int a,n,i; 	scanf("%d%d",&a,&n); 	int result=0;//存储结果,初始化 	for(i=0; i<n; i++) { 		result=result*10+a; //计算a...a(共n个a）的值 	} 	int temp=result;//存储result的值 	for(i=0; i<n-1; i++) { 		temp=temp/10;  //存储下一个数 		result=result-temp; 	} 	printf("%d\n",result); 	return 0; }  看了你的代码后我知道怎么做了，谢谢[/quote]这里都是干货哦

user: user-0
content: 引用 2 楼 袁君元的回复:这道题很简单，思路如下： 1、计算出第一个a...a（共n个a）的值，因为是在它的基础上进行减法的，所以它就作为初始值；这个计算其实就用一个for循环就可以得出。 2、由于后面每一个数的变化规律就是在前一个数的基础上少一位，这有个技巧，可以直接用/10的方法得到，因为程序中的除以10可以起到去掉最后一位的效果，这样就可以实现这种规律变化 3、最后在for循环中实现减法就可以了。有什么不懂再问哦！ 完整的代码和重要的标注如下：  #include<iostream> using namespace std; int main() { 	int a,n,i; 	scanf("%d%d",&a,&n); 	int result=0;//存储结果,初始化 	for(i=0; i<n; i++) { 		result=result*10+a; //计算a...a(共n个a）的值 	} 	int temp=result;//存储result的值 	for(i=0; i<n-1; i++) { 		temp=temp/10;  //存储下一个数 		result=result-temp; 	} 	printf("%d\n",result); 	return 0; }  看了你的代码后我知道怎么做了，谢谢

user: user-1
content: 这道题很简单，思路如下： 1、计算出第一个a...a（共n个a）的值，因为是在它的基础上进行减法的，所以它就作为初始值；这个计算其实就用一个for循环就可以得出。 2、由于后面每一个数的变化规律就是在前一个数的基础上少一位，这有个技巧，可以直接用/10的方法得到，因为程序中的除以10可以起到去掉最后一位的效果，这样就可以实现这种规律变化 3、最后在for循环中实现减法就可以了。有什么不懂再问哦！ 完整的代码和重要的标注如下：  #include<iostream> using namespace std; int main() { 	int a,n,i; 	scanf("%d%d",&a,&n); 	int result=0;//存储结果,初始化 	for(i=0; i<n; i++) { 		result=result*10+a; //计算a...a(共n个a）的值 	} 	int temp=result;//存储result的值 	for(i=0; i<n-1; i++) { 		temp=temp/10;  //存储下一个数 		result=result-temp; 	} 	printf("%d\n",result); 	return 0; }

user: user-2
content: #include <stdio.h>  int main() { 	int n = 0; 	int a = 0; 	int rezult = 0; 	int temp = 0;		//计算用到的临时变量 	int arr[10] = { NULL }; 	int i = 0;			//控制循环变量 	printf("请输入a的值：\n"); 	scanf("%d", &a); 	printf("请输入n的值：\n"); 	scanf("%d", &n); 	for( i = 0 ; i < n ; i++){ 		arr[i] = a; 		rezult = rezult * 10 + arr[i]; 	}  	while (n != 1) { 		temp = 0; 		for (i = 1; i < n; i++) { 			temp = temp * 10 + arr[i]; 		} 		rezult -= temp;  		n--; 	}  	printf("rezult = %d\n", rezult); 	return 0; }  好像写的很麻烦，但是问题解决掉了~
user-0 提问: 作为一个C语言小白，计算 PI/4 = 1 - 1/3 + 1/5 - 1/7 +...，直到最后一项小于 10 负 6 次方

回复:
user: user-1
content: 题目要求最后一项小于10负6次方，你的程序中没有加该条件，由于最后一项前面的符号可能是+，也可能是减。所以它的条件应该写为： -1e-6<1.0/(i*j) && 1.0/(i*j)<1e-6，修改后的代码为：  #include <stdio.h> int main() {     double pi=0.0,i=1.0,j=1.0;       for(;i<1000000.0;i=i+2.0,j=-j)     {         if (-1e-6<1.0/(i*j) && 1.0/(i*j)<1e-6) break;         pi = pi+(1.0/(i*j));     } pi = pi*4; printf("%lf\n",pi);//注意这里是%lf，而不是%fl     return 0; }

user: user-2
content: #include <stdio.h> int main() {     double pi=0.0,i=1.0,j=1.0;      for(;i<1000000.0;i=i+2.0,j=-j)     {         if (-1e-6<1.0/(i*j) && 1.0/(i*j)<1e-6) break;         pi = pi+(1.0/(i*j));     }     printf("%.6lf\n",pi);     printf("%.6lf\n",pi*4.0);     return 0; } //0.785398 //3.141591 //
user-0 提问: 用easyX写了个小软件，vs下一开始debug可以，换成release就不行了，现在debug也不行了

回复:
user: user-0
content: 引用 6 楼 ooolinux的回复:用相对路径。十个字。。 没事，我自己查查吧，，，，，，，，

user: user-0
content: 引用 6 楼 ooolinux的回复:用相对路径。十个字。。 怎么用呀。。。。。。。。。。

user: user-1
content: 用相对路径。十个字。。

user: user-0
content: 引用 1 楼 老马何以识途 的回复:這樣很難幫到你，不如你貼一些報錯信息和關鍵代碼 szName是已经用_getcwd获取过了

user: user-0
content: 引用 1 楼 老马何以识途 的回复:這樣很難幫到你，不如你貼一些報錯信息和關鍵代碼 它没有报错，就是不能运行了。其实是这样的，我不会用vs添加资源，所以就一直用easyX里的loadimage手动添加路径加载图片，现在写好了其实没问题，但是才想起来别人电脑上不好找路径了。现在就是想用_getcwd来获取目录路径，然后打开图片（其中char*转TCHAR*也弄得很头疼），但是用这个方法程序就无法运行了，也不知道为什么，部分代码我贴在下面了，其他部分本来都可以正常运行的

user: user-0
content: 引用 2 楼 赵4老师 的回复:建议换GDI或MFC或Qt 初学者啊，以后肯定会去学的，但目前这个东西已经写了一个多礼拜了，抛弃实在舍不得

user: user-2
content: 建议换GDI或MFC或Qt

user: user-3
content: 這樣很難幫到你，不如你貼一些報錯信息和關鍵代碼

user: user-4
content: strcat(szName, name).  //前后顺序错误。

user: user-3
content: 你好像用錯strcat了，這個函數是把第二個參數添加到第一個參數的末尾，另外要留意第一個參數的空間，避免溢出。

user: user-5
content: 你这个肯定是路径不对 首先你可以获取本身exe所在目录 然后拼接一个相对路径来引用那些图片文件,就不会有问题了
user-0 提问: cpp第一章的编程练习，各位大佬给我看看有没有错呗？

回复:
user: user-0
content: 引用 1 楼 袁君元 的回复:程序设计还可以输出用户输入的英寸值等于多少厘米 更改答案，程序设计，可以在程序里打印一句话提醒用户输入英寸值，之后根据用户输入的英寸值计算出厘米值并输出到屏幕上。 谢谢大佬指导

user: user-1
content: 程序设计还可以输出用户输入的英寸值等于多少厘米
user-0 提问: vc6.0运行出错

回复:
user: user-1
content: 无法解决你的问题，你还是先看一下你的编译器

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

user: user-3
content: 死循环了，建议检查两个break，条件是否会满足。另外，p和n的值都没有找到变化指出。另外，p = i/2;那么p是0，因为i为0.

user: user-4
content: 你的fun函数中i的外层循环是个死循环，应该给i加一个条件
user-0 提问: c 地址变量

回复:
user: user-0
content: 引用 2 楼 user-8 的回复:void *啊 需要用什么数据类型就强转 Thanks.

user: user-1
content: 地址就是指针，&a是指针常量，int *p，p的指针变量，你说的地址变量就是指针变量吧，指向的数据类型不定的话，你可以用void *p，这样p可指向任何地方，与其他类型地址运算可自动转换类型，你也可以手动转。 比如  #include <stdio.h> int main() { 	int a=5; 	double b=7; 	void *p=&a; 	printf("%d ",*(int*)p);		//将指针强制转换为int*型再访问  	p=&b; 	printf("%f ",*(double*)p); 	return 0; }  void*指针用得最多的地方是函数形参，这样不管传什么类型的指针都能接收。

user: user-2
content: 如果是函数调用时，想用不同类型的参数实例化，可以用类模板 template <class T> //T为类型的别名  #include<iostream> using namespace std; template <class T> T add(T& left, T& right) { 	return left + right; }  int main() { 	int a = 3, b = 2; 	double c = 5.0, d = 1.0; 	printf("%d\n",add(a, b)); 		printf("%lf\n",add(c, d)); }

user: user-3
content: 使用malloc为一个数据类型创建一块内存再保存数据你就明白了

user: user-4
content: 不确定类型，那么怎么知道应该给分配多少内存呢？

user: user-5
content: 先用空类型，后续再转换类型

user: user-6
content: 引用 2 楼 user-8 的回复:void *啊 需要用什么数据类型就强转

user: user-7
content: 其實char *應該都可以，它只要指向一個字節的地址就夠了，只要保證有足夠的連續空間存放不同的數據類型。

user: user-8
content: void *啊 需要用什么数据类型就强转

user: user-0
content: 引用 楼主 benny.xuthus的回复:可否定义一个地址变量，该地址指向的地方数据类型不定。 int ? ... ...
user-0 提问: 笔记-筛选法找素数

回复:
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-2
content: 所以你只是来秀一段代码而不是提问？

user: user-0
content: 引用 1 楼 user-2的回复:所以你只是来秀一段代码而不是提问？ 我只是来记录一下而已