Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 一个关于键盘实时读入的问题

回复:
user: user-1
content: #include <conio.h> #include <windows.h> int main() {     int k;      while (1) {         if (kbhit()) {             k=getch();             if (0==k || 0xE0==k) k=k<<8|getch();             if (27==k) break;//按Esc键退出             cprintf("\r\n%04X\r\n",k);         }         Sleep(200);         cprintf(".");     }     return 0; }  #include<iostream> #include<conio.h> #include<stdlib.h> #include<windows.h> using namespace std; int main() {     int c;     while(1)     {         if(kbhit()!=0) {             c=getch();             if (0==c || 0xE0==c) c=c<<8|getch();             if (27==c) break;//按Esc键退出             cout<<c;             while (kbhit()!=0) {                 c=getch();                 if (0==c || 0xE0==c) c=c<<8|getch();             }         }         Sleep(1000);         system("cls");     }     return 0; }  如果还是满足不了你的需求，参考 GetKeyState GetKeyboardState

user: user-2
content: while (1) 	{ 		//if (kbhit() != 0) 		c = getch(); 		cout << (int)c; 		Sleep(1000); 		while (kbhit()!=0) {//----使用while()语句把Sleep()期间所有的按键读取出来 			getch(); 		}; 		system("cls"); 	}
user-0 提问: 这个程序运行不了，小白求指教

回复:
user: user-1
content: 《C++Primer第五版中文版》中提到 含有typedef的声明语句定义的不再是变量而是类型别名。 所以，在代码 typedef struct persons {	char name[20]; int age; int height; int weight; }person; 中，person并不是变量，而是类型别名。 所以，在main()函数中所有对person的操作都是错误的，因为person不是变量。 解决的方法 typedef struct persons {	char name[20]; int age; int height; int weight; }; persons person;

user: user-2
content: 楼主的person不是结构体变量，而是结构体类型的别名。因此编译时肯定会出错。解决办法是去掉typedef，然后再加上string.h，因为strcpy要用到这个头文件里的函数声明。  #include <stdio.h> #include <string.h>  struct persons { char name[20];     int age;     int height;     int weight; }person;  int main() {     strcpy(person.name, "李刚");     person.age = 21;     person.height = 175;     person.weight = 65;     printf("姓名：%s\n", person.name);     printf("年龄：%d\n", person.age);     printf("身高：%d\n", person.height);     printf("体重：%d\n", person.weight);     return 0;  }

user: user-3
content: #include <stdio.h> #include<string.h> struct persons {	 	char name[20]; 	int age; 	int height; 	int weight; }person;  //persons person;  int main() { 	strcpy(person.name, "李刚"); 	person.age = 21; 	person.height = 175; 	person.weight = 65; 	printf("姓名：%s\n", person.name); 	printf("年龄：%d\n", person.age); 	printf("身高：%d\n", person.height); 	printf("体重：%d\n", person.weight); 	return 0;  } 不用typedef也可以，如上。

user: user-3
content: #include <stdio.h> #include<string.h> typedef struct persons {	 	char name[20]; 	int age; 	int height; 	int weight; }persons;  persons person;  int main() { 	strcpy(person.name, "李刚"); 	person.age = 21; 	person.height = 175; 	person.weight = 65; 	printf("姓名：%s\n", person.name); 	printf("年龄：%d\n", person.age); 	printf("身高：%d\n", person.height); 	printf("体重：%d\n", person.weight); 	return 0;  } 少了strcpy()函数需要头文件string.h 对typedef的理解有偏差，看看书。
user-0 提问: 求助新手小白用VC++运行C，编译无错误 执行有错误 麻烦详解谢谢

回复:
user: user-1
content: 运行按钮的左边的两个按钮   点了吗  没点的话试一下

user: user-2
content: 路径配置不对，关断工程，重新创建，如果还是不行的话，就要去修改系统路径，网上有教程，或者直接卸载，重新安装，但切记安装时的路径与工程文件的路径的区别

user: user-3
content: 路径配置不对路径配置不对，关工程，重创建

user: user-4
content: 编译失败。修正代码，重新编译

user: user-5
content: 关闭UAC、防火墙、杀毒软件、…… 以管理员身份运行 ……

user: user-6
content: Visual C++与Windows不兼容，未正确安装也会出现这种问题

user: user-7
content: 路径不正确， VC配置输出路径出错 或者把debug 删除再编译链接， 要不重建工程吧

user: user-8
content: 又见VC++6.0，我最喜欢的编译器，没有之一。 在创建控制台程序时，选择一个空项目，然后把代码写入到cpp文件中，即可。
user-0 提问: 这是一个逆波兰式的程序，但是输入加括号的表达式如(a+b)，得不出结果，求神指教！

回复:
user: user-0
content: 尴尬，谢谢🙏

user: user-1
content: while(!sop.empty()&&sop.top!='(')这里不少东西么。。sop.top()
user-0 提问: 一个大的长方体里摆放不同规格小长方体问题

回复:
user: user-1
content: 难道dp正解？

user: user-1
content: 引用 6 楼 qq_37543978 的回复：你们可以下一个“装箱大师”，官网的应用不太好用，可以去淘宝买一个破解版的，装箱大师还是很适合这种题目的。望采纳，谢谢。人才啊！

user: user-2
content: 你们可以下一个“装箱大师”，官网的应用不太好用，可以去淘宝买一个破解版的，装箱大师还是很适合这种题目的。望采纳，谢谢。

user: user-3
content: 2019年美赛B题

user: user-4
content: 暴力枚举 （问题不一定在30分钟内就解决的，一般要1~3小时，要写代码的一般要3~5小时，以后提问题不用再喊有没有人了）

user: user-0
content: + 结果飞机返回房间都是
user-0 提问: 为啥用VS2015控制台啥信息也没有？

回复:
user: user-1
content: 等你输入两个整数，不过c未初始化，而且交换数的if语句块也有问题  #include <stdio.h> #include <stdlib.h>  int main() { 	int a, b, c; 	printf("请输入两个数字"); 	scanf("%d%d", &a, &b); 	if (a > b) 	{ 		c = a; 		a = b; 		b = c; 	} 	printf("%d,%d", a, b); 	system("pause"); 	return 0; }
user-0 提问: 以菜单的方式工作：学籍查询系统

回复:
user: user-0
content: 引用 3 楼 zzuli111的回复:你已经做出来了吗 我毕业了，做出来了

user: user-1
content: 你已经做出来了吗

user: user-2
content: 我这里有个类似的，但是代码太长，不好上传。你可以先写，不会的可以问。

user: user-3
content: 不知道如何帮你，把代码写出来，不过这样似乎不合适。
user-0 提问: 小白，求教各位大佬

回复:
user: user-1
content: void main改成 int main

user: user-2
content: [Error] C:\Users\Administrator\Documents\C-Free\Temp\未命名1.cpp:4: error: `main' must return `int' [Error] C:\Users\Administrator\Documents\C-Free\Temp\未命名1.cpp:8: error: `Printf' was not declared in this scope 分析错误，第一个，1.cpp冒号4，就是第四行，main必须return    int，那么void定义的main函数不行，需要改成int  main 第二个 1.cpp冒号8，第8行，Printf在这个没有声明，那就是错误写法了。改成printf小写。

user: user-3
content: 3.保存的格式是.c不是.cpp  .cpp是C++了。

user: user-3
content: 2.printf小写

user: user-3
content: 1.没有返回值return语句。

user: user-4
content: 你好，这题呢你可以自己分析一下人家给出的error，尝试去翻译理解，找出问题所在，其中的乐趣是尤为有趣的。 这里的错误有两个 第一个  main 必须返回一个整型  说明你这个void 人家不认可  所以你可以定义为  int main（） 然后返回一个值 第二个  Printf在该行没有定义    你是想输出   但是 p大写了   在编程语言中  大写和小写是有区别的，平时要多注意一些 还有就是  你这是c语言   文件的后缀要改为 .c  而不是.cpp  .cpp是c++的文件后缀

user: user-5
content: 首先，要避免使用返回值为空的main()函数，可以使返回值为int,在函数结尾return 0;即可； 其次，printf需要小写， 最后，.cpp后缀是C++编译器编译，.c是C编译器编译。当然，C语言程序用.cpp后缀大部分情况下是可以编译成功的，前提是无语法错误。 耐心点仔细点，你可以的，加油！

user: user-6
content: return语句呢

user: user-7
content: #include <stdio.h>  int main (void) {     int b=-130,c;      c=(30+b)/2;     printf("c=%d\n",c);      return 0; } 供参考！  编译器已经给指出问题所在，因此编程需要首先明白编译器提示的error和warning

user: user-8
content: 不懂英文请去谷歌翻译 第一句话是main函数必须返回int类型 第二句话是找不到Printf函数的声明

user: user-9
content: Ptintf的P要小写
user-0 提问: 求助dalao

回复:
user: user-1
content: 这是最最基础的动态规划，看不懂的话自行百度，这里说再多你也无法完全理解

user: user-0
content: 有没有大佬能帮帮我啊

user: user-2
content: 写了一个简单的，趁着上班没事做。  #include <stdio.h> #include <stdlib.h> #include <time.h>  //10*10的地图  int cur = 0; //初始化地图，和打印地图。sign标志是打印还是初始化 void init_map(int pmap[10][10], int sign) {     int i=0, j=0;     for(i=0; i<10; i++)     {         for(j=0; j<10; j++)         {             if(sign){                 pmap[i][j] = 0;             }             printf("%d ", pmap[i][j]);         }         printf("\n");     }       }  void add_mine(int pmap[10][10], int num) {     srand(1);     int i=0, j=0, k=0;     //手动加地雷     pmap[3][0] = 1;     pmap[0][4] = 1;     pmap[4][2] = 1;     pmap[2][1] = 1;     pmap[1][6] = 1;     pmap[2][9] = 1;     pmap[6][1] = 1;     pmap[8][6] = 1;     pmap[5][6] = 1;      //随机加地雷     //for(k=0; k<num; k++)     //{     //    i = rand()%9;     //    j = rand()%10;     //    pmap[i][j] = 1;     //} }  //添加结果，走过那些格子 int add(int *arr, int i, int j) {     int last_i = arr[cur-1] / 100;     if(last_i > i)     {         cur -= 1;     }     arr[cur] = i*100 + j;     printf("static value cur %d %d:\n", cur, arr[cur]);     cur += 1; }  int walk(int pmap[10][10], int *arr) {     int i=0,j=0;     while(i<10 || j<10)     {                  if(pmap[i+1][j] != 1 && i <10) //默认向下走         {             //先向下移动             i += 1;             add(arr, i, j);         }         else if(pmap[i][j+1] != 1 && j < 10) //向下不行向右走         {             j += 1;                 add(arr, i, j);         }          else if(pmap[i+1][j] == 1 && pmap[i][j+1] == 1) //如果下面和右面都有地雷，退回去,还有很多种可能，只考虑了一种 从开始的向下错误的一步改为向右         {             i -= 1;             j += 1;             add(arr, i, j);         }         else         {             printf("堵死了，右下都不能走");             break;             return 0;         }     }         return 1; }  int main() {     int map[10][10];     int arr_res[100] = {0}; //保存行走的路径      //初始化地图     init_map(map, 1);     //添加地雷     add_mine(map, 10);     //查看结果     printf("=================\n");     init_map(map, 0);      int i = 0;     //     int res = walk(map, arr_res);      if(res)     {         printf("可以到达，路径如下:\n");         for(i = 0;i<100; i++)         {             if(arr_res[i]==0)             {                 break;             }             else             {                 printf("[%d][%d] ", arr_res[i]/100, arr_res[i]%100);             }         }         printf("\n");     }     return 0; }

user: user-0
content: 引用 1 楼 user-3的回复:基础入门的动态规划 到达边缘坐标的方法只有 1 种  到达非边缘左边有两种 从左边或者上边过来 所以到达这一点的方法种数是 到达左边节点的个数 加上 到达上边节点的个数  再注意一下跳过地雷就好了 我不是特别的懂

user: user-3
content: 基础入门的动态规划 到达边缘坐标的方法只有 1 种  到达非边缘左边有两种 从左边或者上边过来 所以到达这一点的方法种数是 到达左边节点的个数 加上 到达上边节点的个数  再注意一下跳过地雷就好了
user-0 提问: PTA程序设计

回复:
user: user-1
content: pta的格式比较严格，比如让你输出的值之间的空格个数不对就会说你格式错误

user: user-0
content: 好的，谢谢了。

user: user-2
content: 主函数没有返回值 一定要记得return 啊

user: user-3
content: 贴题目  完整的

user: user-0
content: 需要提交的格式就是三楼运算出来的结果那样

user: user-0
content: 就是我写的那个程序在PTA上的那道题提交后，他反馈给我的结果就是格式错误，而我并不清楚错在哪。

user: user-4

user: user-5
content: 要求什么格式呢？
user-0 提问: 关于opencv中phaseCorrelate函数运行速度的问题

回复:
user: user-0
content: 算了 沉了就沉了吧

user: user-0

user: user-0
content: 难道沉了..?

user: user-1
content: 硬件不同，你希望怎么样~~~

user: user-0
user-0 提问: 小白求助

回复:
user: user-1
content: 首先str的每个元素都是一个char*指针，你为它们装入内容之前没有分配内存。所以需要利用malloc分配内存。 其次， str+i的类型是 char**, 它的意思是数组的第i个元素的地址，而第i个元素本身是char*, 所以它的类型是char **. 去掉这个警告，修改为 str[i]就可以了。 str[i]表示数组的第i个元素，所以类型为char*. 或者用*(str+i) 也可以。修改代码如下：  #include<stdio.h> #include <stdlib.h>  int main() {     char *str[7];     int i;     for(i=0; i<7; i++)     {         printf("请输入第%d个学生的姓名：\n",i+1);         str[i] = (char*)malloc(100);  //分配内存。估计长度100够用。         scanf("%s",str[i]);         //scanf("%s",*(str+i));   这个也可以     }     for(i=0; i<7; i++)     {         printf("第%d个学生的姓名为%s\n",i+1,str[i]);         //printf("第%d个学生的姓名为%s\n",i+1,*(str+i));  这个也可以     }    //这里需要释放内存     return 0; }

user: user-2
content: %s表示输出一个char *的变量，类型不匹配 你可以试一试改成    printf("第%d个学生的姓名为%s\n",i+1,(char*)str+i);

user: user-3
content: 取出警告的方法:  scanf("%s",str[i]); printf("第%d个学生的姓名为%s\n",i+1, str[i]); 这只是取出警告。不能保证程序正常运行。因为你没有给str[i]分配有效的空间。  解决方法： #include<stdio.h> #include <stdlib.h>  #define MAX_STR_SIZE    32  int main() {     char *str[7];     int i;     for(i=0;i<7;i++)     {         printf("请输入第%d个学生的姓名：\n",i+1);         str[i] = (char *)malloc(sizeof(char) * MAX_STR_SIZE);         if (!str[i])             return -1;         scanf("%s",str[i]);     }     for(i=0;i<7;i++)     {         printf("第%d个学生的姓名为%s\n",i+1, str[i]);         free(str[i]);     }      return 0; } 供参考！
user-0 提问: hdoj1002大数相加WA不知道哪儿错了求解

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110
user-0 提问: 求助，关于C语言中函数调用结构体的问题，帮帮小弟

回复:
user: user-1
content: Init(MakeEmpty(PtrL)); 以上代码并没有改变PtrL的值，此时PtrL的值是NULL，所以在运行时会报错！ 可以修改为 PtrL = Init(MakeEmpty(PtrL)); 以下是运行效果图

user: user-2
content: #include<stdio.h> #include<stdlib.h> #include<iostream>  #define MAXSIZE 100  typedef struct LNode* List;  List PtrL; //typedef struct LNode{ struct LNode{     int Data[MAXSIZE];     int Last; };  List MakeEmpty(List PtrL) {      PtrL = (List)malloc(sizeof(struct LNode));     PtrL->Last = -1;      return PtrL; }  List Init(List PtrL) {     int k;     for(k=1; k<10;++k){         PtrL->Data[k-1] = k;         printf("%d\t",PtrL->Data[k-1]);         //PtrL->Last = PtrL->Last+1;         PtrL->Last++;     }     printf("\n最后元素位置=%d\n", PtrL->Last);      return PtrL; }  int Find(int x,List PtrL) {     int i = 1;     for (i=1;i<PtrL->Last;++i)         if (x == PtrL->Data[i] )             return 1;      return -1;  }  void Insert(int x,int i, List PtrL) {     int t=1,k=1;     printf("旧表内容：");     //for (k=1;k<10;++k)     for (k=0; k <= PtrL->Last; ++k)         printf("%d\t",PtrL->Data[k]);     printf("\n");     //if (i <= 0 || i>100)     if (i <= 0 || i > MAXSIZE) {         printf("overflow!");         return;     }     if (PtrL->Last > 100) {         printf("表满！");         return;     }     if (i >= PtrL->Last + 1) {         PtrL->Data[PtrL->Last+1] = x;         return;     }      //if(i<100 && i>0) {     for (k = PtrL->Last; k >= i; k--)         PtrL->Data[k+1] = PtrL->Data[k];       PtrL->Data[i] = x;     PtrL->Last = PtrL->Last+1;     printf("新表内容：");     for (t = 0; t <= PtrL->Last;++t)         printf("%d", PtrL->Data[t]);     //} }  int main(void){      PtrL = Init(MakeEmpty(PtrL));    //这个地方需要将Init的返回值给PtrL     Insert(1,1,PtrL);     system("pause");     return 0; }  供参考！

user: user-3
content: Init和MakeEmpty函数形参是一个临时指针，在调用函数时只是把传入实参的值复制给形参，在函数中的操作都是针对形参，未改变实参的值，即未实现初始化PtrL。 有两种解决方案，第一种使用二级指针，把函数参数改为List*，传入Ptrl的地址，这样通过二级指针寻址，改变Ptrl的值。 第二种，既然PtrL已经定义为全局变量，那就不必进行参数传递步骤。

user: user-0
content: 为什么索引-1是错误的呢？-1只是last的值啊 而且在初始化的时候last不是已经变成了8吗？ 抱歉我是新手上路 实在想不明白 还望指点

user: user-4
content: 你的问题在于LAST一开始赋值是-1，直接访问数组索引-1就错了 但深层次讲，既然你可以支持任意位置插入元素，你LAST的作用就完全没有意义了

user: user-5
content: 黃色在哪裏？

user: user-0
content: 为什么我编辑不了颜色啊 抱歉各位 出错的代码在48行  printf（“旧表内容%d”，PtrL->Data） 引用Ptrl->data的时候报错了
user-0 提问: 对于侯捷深度探索c++对象模型译注的疑问

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

回复:
user: user-0
content: 果然文件后缀名换成.cpp就可以了，谢谢各位！

user: user-0
content: 引用 10 楼 棉猴 的回复:VS2015运行没问题。  请问你的文件名的后缀是.c还是.cpp？

user: user-1
content: 引用 8 楼 user-3 的回复:你的文件名后缀是 .c 这是C语言代码 哪里来的 stack模板给你用  文件名1.c改为1.cpp再试试。

user: user-2
content: VS2015运行没问题。

user: user-0
content: 引用 8 楼 user-3 的回复:你的文件名后缀是 .c 这是C语言代码 哪里来的 stack模板给你用  也就是不可用？那C语言中栈需要自己定义，操作也要自己写吗？

user: user-3
content: 你的文件名后缀是 .c 这是C语言代码 哪里来的 stack模板给你用

user: user-1
content: 关闭UAC、防火墙、杀毒软件、…… 以管理员身份运行 ……

user: user-0
content: 引用 5 楼 赵4老师 的回复:VC6EN http://pan.baidu.com/s/1jImOtAe赵老师，安装失败

user: user-1
content: VC6EN http://pan.baidu.com/s/1jImOtAe

user: user-0
content: 引用 3 楼 赵4老师 的回复:Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt 赵老师，针对VC++6.0这个版本，这个问题应该怎么解决，因为我的考试必须使用这个版本

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

user: user-0
content: 再补一张

user: user-0
content: 有两张图未显示，现补上
user-0 提问: 麻烦大佬帮忙看看这个链表问题的错误在哪儿？

回复:
user: user-0
content: 我自己解决了，分享给大家看看 #define LEN sizeof(struct Student) #define NULL 0  struct Student {     int num;     float score;             //这里之前复制错了，不影响     struct Student* next; };  int Unit9_10() {     struct Student* linenage_creation(void);     void linenage_printer(struct Student* head);         //函数之前也是复制错了     struct Student* linenage_delete_thesame(struct Student* from, struct Student* to);      struct Student *ahead, *bhead, *abhead;      ahead=linenage_creation();     linenage_printer(ahead);      bhead=linenage_creation();     linenage_printer(bhead);      abhead=linenage_delete_thesame(bhead,ahead);     linenage_printer(abhead);      return 0; }  struct Student* linenage_delete_thesame(struct Student* from, struct Student* to) {     struct Student *f1,*f2;     struct Student *t1,*t2,*thead;      f1=f2=from;     thead=t1=t2=to;     while(f1!=NULL && thead!=NULL)     {         while(t1!=NULL)         {             if(f1->num!=t1->num)                 t2=t1;             else             {                 if(t1==thead)                     {t2=t1->next; thead=t2;}      //这里前驱结点指针之前有问题                 else                     t2->next=t1->next;             }             t1=t1->next;         }         t1=thead; t2=t1;         //每次指针回归链首需要保持一致         f1=f1->next;     }      return thead; }

user: user-1

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
user-0 提问: C语言：使用字符指针的问题

回复:
user: user-1
content: str = "hello word!" ; "hello world!"是字符常量，因此不能修改，但是str_cut函数是对str进行写操作（因为是修改），所以会出现问题。解决办法：  char str[] = "hello word!"; 因为由指针编程数组，数组是在栈上的空间，因此可以进行读写。

user: user-2
content: main函数中应是*str="hello world!"

user: user-3
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-4
content: 注意这句话 char *str = "hello word!"; str存放于栈区 "hello word!"存放于常量区，不允许随意修改 如果要测试的话，使用下面定义和初始化 char str[] = "hello word!";
user-0 提问: 大佬们帮我看下这题，结果正确，但却Runtime Error(ACCESS_VIOLATION)

回复:
user: user-1
content: VS2015运行没有错误

user: user-2
content: memset(dp, 0, sizeof(dp)); 这行可以去掉的，因为全局变量数组编译器会给初始化为0.因此这句是重复做一件事情。  if(j>=mo[i]) dp[j] = dp[j] > (dp[j - mo[i]] + mo[i] )? dp[j] : (dp[j - mo[i]] + mo[i]); else if(j>=mo[i]) dp[j] = dp[j] > (dp[j - mo[i]] + mo[i] )? dp[j] : (dp[j - mo[i]] + mo[i]); else dp[j] = dp[j]; 这里的else内容是不是也是无用的。或者不是你的想法所在。建议改一下。 dp[j] = dp[j];

user: user-3
content: 本来就没有错误。 但是在评测系统会检测main函数的返回值是否为0，不为0的话系统会以为程序出了问题，于是报RE。 可以在最后加一行 return 0; 。
user-0 提问: 全局变量与局部变量的疑问？

回复:
user: user-1
content: 这个问题我的确不知道，如果有知道的请讲解讲解，谢谢。  下面的回答是猜的。  在全局变量下，编译器只是简单的对表达式进行静态求值，然后把表达式替换为值。也就是5-6=-1.。  在局部变量下，编译器不能进行静态求值，值是在运行时取得，所以求值结果就是 6-6=0.。

user: user-2
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-3
content: 按照我的理解是：a-=++a,可以分成两 步：1.a=a+1; 2. a=a-a; 如果a为局部变量，那么a=a+1=5+1=6;此时a=6, 那么a=a-a=6-6=0； 如果a为全局变量，那么a=a+1=5+1=6,但此时的a的含义并不等于全局变量a,而是系统中有一个中间变量如t存储了这个值(6),所以当执行a=a-a时，就变成了a=a-t=5-6=-1; 但不同编译器会有不同的结果，你这个应该是在UNIX系统的Shell编译器吧

user: user-4
content: 新手都喜欢玩这个 ++,--,还研究的一本正经

user: user-5
content: 什么版本gcc？虽然说求值顺序未定义，但是同一个编译器，只是全局变量和局部变量的不同，对同一个表达式就出现不同的求值结果，也是比较奇葩的。就我的测试结果，C++Builder 7.3、VC++ 14.0、intel c++ 15.0、gcc 5.1.0，32位/64位、开/不开优化，输出都是0

user: user-6
content: 不同位置作用域不同

user: user-7
content: 编译器不同，得到的结果就不同

user: user-8
content: 不要把精力放在这种牛角尖上，写语法清晰的代码。

user: user-1
content: 是啊，为什么同一个编译器编译结果不一致尼

user: user-9
content: 这种式子不建议用，也不建议去深度研究，根据编译器的不同，给出的结果也是不同的，总之不太建议去用或者写这种式子。

user: user-10
content: 最近这种日经帖特别多，请百度序列点 在一个序列点对同一个变量多次赋值产生的结果是不可预期的。

user: user-11
content: 引用 2 楼 qq_34300249 的回复:定义的地方不一样，。。。。 和定义的地方没关系 a -= ++a这个表达式是未定义行为  结果没意义  如果写的是符合要求的表达式  这段代码 不管是全局变量还是局部变量结果都是一样的

user: user-12
content: 定义的地方不一样，。。。。

user: user-13
content: a -= ++a 这样的表达式不建议写，也不建议深究。因为这样的表达式具有歧义性，不同的编译器可能处理不一样。
user-0 提问: 多线程环境下，传入指针后，函数里打印出传入的指针发现地址变了！！！！！

回复:
user: user-1
content: 贴上那个函数的操作！

user: user-0
content: 想明白了，谢谢各位

user: user-0
content: 引用 4 楼 niiiloc 的回复:你的日志应该打印下第一个入参，不然很可能会误导你，从现场看，根本看不出这日志是哪一个调用打印的  你看我日志开头就打印了第一个参数，最后面的地址是第二个参数打印出来的，giReadParam函数内部我没加锁，但没加锁也不应该导致地址变动了呀，百思不得其解

user: user-2
content: 你的日志应该打印下第一个入参，不然很可能会误导你，从现场看，根本看不出这日志是哪一个调用打印的

user: user-3
content: 换我这个土造MyLog再试试：#include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef _MSC_VER     #pragma warning(disable:4996)     #include <windows.h>     #include <io.h> #else     #include <unistd.h>     #include <sys/time.h>     #include <pthread.h>     #define  CRITICAL_SECTION   pthread_mutex_t     #define  _vsnprintf         vsnprintf #endif //Log{ #define MAXLOGSIZE 20000000 #define MAXLINSIZE 16000 #include <time.h> #include <sys/timeb.h> #include <stdarg.h> char logfilename1[]="MyLog1.log"; char logfilename2[]="MyLog2.log"; static char logstr[MAXLINSIZE+1]; char datestr[16]; char timestr[16]; char mss[4]; CRITICAL_SECTION cs_log; FILE *flog; #ifdef _MSC_VER void Lock(CRITICAL_SECTION *l) {     EnterCriticalSection(l); } void Unlock(CRITICAL_SECTION *l) {     LeaveCriticalSection(l); } #else void Lock(CRITICAL_SECTION *l) {     pthread_mutex_lock(l); } void Unlock(CRITICAL_SECTION *l) {     pthread_mutex_unlock(l); } #endif void LogV(const char *pszFmt,va_list argp) {     struct tm *now;     struct timeb tb;      if (NULL==pszFmt||0==pszFmt[0]) return;     _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);     ftime(&tb);     now=localtime(&tb.time);     sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);     sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );     sprintf(mss,"%03d",tb.millitm);     printf("%s %s.%s %s",datestr,timestr,mss,logstr);     flog=fopen(logfilename1,"a");     if (NULL!=flog) {         fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);         if (ftell(flog)>MAXLOGSIZE) {             fclose(flog);             if (rename(logfilename1,logfilename2)) {                 remove(logfilename2);                 rename(logfilename1,logfilename2);             }         } else {             fclose(flog);         }     } } void Log(const char *pszFmt,...) {     va_list argp;      Lock(&cs_log);     va_start(argp,pszFmt);     LogV(pszFmt,argp);     va_end(argp);     Unlock(&cs_log); } //Log} int main(int argc,char * argv[]) {     int i; #ifdef _MSC_VER     InitializeCriticalSection(&cs_log); #else     pthread_mutex_init(&cs_log,NULL); #endif     for (i=0;i<10000;i++) {         Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);     } #ifdef _MSC_VER     DeleteCriticalSection(&cs_log); #else     pthread_mutex_destroy(&cs_log); #endif     return 0; } //1-79行添加到你带main的.c或.cpp的那个文件的最前面 //81-86行添加到你的main函数开头 //90-94行添加到你的main函数结束前 //在要写LOG的地方仿照第88行的写法写LOG到文件MyLog1.log中

user: user-0
content: 自己顶一顶，麻烦有了解的朋解答下

user: user-0
content: 自己顶一顶，麻烦有了解的朋解答下

user: user-0
content: 自己顶一顶，麻烦有了解的朋解答下
user-0 提问: PC对硬件的操控都是通过BIOS中断例程吗？为什么windows可以控制显示24位色，而中断例程只能控制16位色（还是8位色来着）

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:Windows 不通过 BIOS 来控制硬件。 只有系统在启动的时候，由 BIOS 加载并启动，Windows 接管之后有自己的处理硬件方式。 只有早年的 DOS 之类的操作系统使用 BIOS 例程来处理硬件。 那请问BIOS可以算是一个操作系统吗？中断向量表是指向驱动程序的函数指针的数组吗？

user: user-1
content: Windows 不通过 BIOS 来控制硬件。 只有系统在启动的时候，由 BIOS 加载并启动，Windows 接管之后有自己的处理硬件方式。 只有早年的 DOS 之类的操作系统使用 BIOS 例程来处理硬件。
user-0 提问: 编程题

回复:
user: user-0
content: 好的谢谢大佬

user: user-1
content: 首先一点，unsigned定义的数组先要明白是什么类型的，默认是的unsigned int类型，那么strlen是否可以呢。建议看一下字符串函数。  第二点，sscanf的第一个参数是什么类型，建议查一下；  第三点，大数相乘，你输入的%s格式的数是字符串，那么你需要了解'1'和1的关系，你的理解是1* 1等价于'1' * '1'，建议查一下是否等价；  最重要的一点，楼主的大数乘法的算法是否正确，是否有理论参考的？
user-0 提问: 求助: c 语言字符数组赋值和函数声明问题

回复:
user: user-1
content: 用memcpy

user: user-2
content: 字符赋值或拷贝以及函数的定义，这应该是基本的语法知识。建议网上查一下。

user: user-3
content: 参考一下自己写的strcpy  char *strcpy(char *d, constchar *s) {  char *p = d;  while (1)  {  *p = *s;  if (*p == '\0') break;   p++;  s++;  }   return p; }

user: user-4
content: 这些都是最基本的库函数了，单片机里面肯定有啊

user: user-0
content: 如果不用 strcpy ，怎么写 因为我要移植到单片机里  有些怕没有这个函数  谢谢！

user: user-0
content: void bb(char ss) { }  这个函数 我是要定义为  void bb(char *ss) { }  还是 void bb(char ss[]) { }

user: user-5
content: 你所有的问题都可以通过strcpy并加一句调试来解决 请百度strcpy的用法

user: user-6
content: char sendBuf[7] = {"通道1"};
user-0 提问: 希望大家能指导一下

回复:
user: user-0
content: 引用 4 楼 独孤由过的回复:运行了一下，加没加都可以正常输出 谢谢了 刚看到 没能及时回复 很抱歉

user: user-1
content: 运行了一下，加没加都可以正常输出

user: user-0
content: 比如说我输入个小写的英文字母 ch不加括号的时候就可以正常输出了但是加上括号以后就成了个问号 这是为什么啊？

user: user-2
content: 先学会把问题说清楚，什么输入下输出是错的

user: user-0
content: 没有人吗？？？唉~
user-0 提问: 关于j=j++的运算问题

回复:
user: user-1
content: 引用 18 楼 qq_44300926的回复:要清楚j++和++j的区别，j++是 先用后加与先加后用的区别

user: user-2
content: 输出的就是2吧，楼主确认代码没拷贝错？

user: user-3
content: 结果可能和编译器有关吧，不同的编译器可能结果不一祥。

user: user-4
content: 引用 56 楼 小熊之怒 的回复:j++   和 ++j  是不同的。 a = j++ j首先把值赋给a，然后自增。   a = ++j 首先j自增，然后赋值给a。       先后顺序不同影响语意。这个要看，c语言的符号结合先后顺序。无关

user: user-5
content: j++   和 ++j  是不同的。 a = j++ j首先把值赋给a，然后自增。   a = ++j 首先j自增，然后赋值给a。       先后顺序不同影响语意。这个要看，c语言的符号结合先后顺序。

user: user-6
content: 引用 48 楼 liangxin509 的回复:[quote=引用 47 楼 john_liqinghan 的回复:] 和编译器有关系，最好直接看汇编！不过这种就属于垃圾代码了。项目中不会有人写这样子代码的，写了也通不过审核的。 为啥这样写就算垃圾代码了呢？[/quote]  1、表意不清， 2、维护不便， 3、在开启编译器优化的时候，有些代码执行的顺序并非我们所看写的代码顺序。在于编译器优化程度以及编译器的类型，GCC和MSVC就有区别。

user: user-4
content: 引用 59 楼 weixin_41827723 的回复:[quote=引用 58 楼 weixin_41827723的回复:]编译环境不一样结果可能不一样。 按语法规则理解，这种写法是先赋值，后加一，但你用的是同一个变量名来接收赋值和自增后的值，所以下一条语句要接收的值具体是多少就取决于编译器版本对这一点语法规则的处理方式了。[/quote]按照语法规则 这是未定义行为 你不了解语法规则

user: user-7
content: 引用 8 楼 liangxin509的回复:j=j++是先赋值，再加1，没错的 问题就在于，printf已经是下一条语句了，此时赋值结束，j的值应该已经增加到2，这样理解此时应该输出2。

user: user-7
content: 引用 58 楼 weixin_41827723的回复:编译环境不一样结果可能不一样。 按语法规则理解，这种写法是先赋值，后加一，但你用的是同一个变量名来接收赋值和自增后的值，所以下一条语句要接收的值具体是多少就取决于编译器版本对这一点语法规则的处理方式了。

user: user-7
content: 编译环境不一样结果可能不一样。

user: user-8
content: ++在前，++在后的问题，避免这种写法

user: user-9
content: 大部分回答全都是错的，特别是那些强行用结果去解释的 正解是结果不可预知 在一个序列点对同个变量多次赋值的结果是不可预知的 j = ++j 是一个序列点，有两次赋值，所以结果是不可预知的，可能是1也可能是2，具体看编译器怎么生成汇编语言的

user: user-10
content: 引用 47 楼 john_liqinghan 的回复:和编译器有关系，最好直接看汇编！不过这种就属于垃圾代码了。项目中不会有人写这样子代码的，写了也通不过审核的。 为啥这样写就算垃圾代码了呢？

user: user-6
content: 和编译器有关系，最好直接看汇编！不过这种就属于垃圾代码了。项目中不会有人写这样子代码的，写了也通不过审核的。

user: user-11
content: i++ 先赋值再加一 ++i 先加一再赋值

user: user-12
content: 引用 楼主 weixin_44566068的回复:#include<stdio.h> main() { 	int j=1; 	j=j++; 	printf("%d",j);  }  结果j为什么等于1呢？ 先运算j啊，然后再算++，如果是j=++j的话，输出就是2了

user: user-13
content: j＝j＋＋（先赋值然后自增）

user: user-14
content: j++是自身赋值然后在进行+1。++j是自身+1后然后在进行赋值。j--和--j同理

user: user-15
content: j++  表示  先把原来的值先赋值给j  然后在自增   ++j就表示原值先加1   赋值给j   通俗就是一个是先赋值在加一  一个是先加一再赋值

user: user-16
content: # include <stdio.h>  int main(void) { 	int j = 1 ;  	j = j++ ; 	printf("%d\n" , j);  	return 0 ; }  ———————————— 执行结果：  2 Press any key to continue ————————————  兄弟你什么编译器。
user-0 提问: C语言编程

回复:
user: user-1
content: 如果你密码长度已经限制在一定范围，而且比较小（16位或32位），递归应该是没有什么问题的，毕竟算法的体量和需要使用的栈内存很小

user: user-1
content: 匹配该密码是指跟什么数据比较？数量多大？ 还有不是很清楚你目的是要生成字符串还是仅仅比较字符串  （1）比较字符串 如果数据量很大，做两个Key，一个Key为密码长度，一个Key为密码本身，并且是有序存储 先比较长度再比较密码本身（二分查找或快速查找）  （2）生成字符串 先把可能的字符串字符用数组指出，然后随机0~（N-1)的整形数，直接提取字符数组对应的下标的字符填充 循环次数等于要生成的字符串长度 然后根据（1）的办法匹配数据库，如果已经存在再次调用（2）生成一个新的个字符串

user: user-2
content: 不用递归 也不用嵌套多层for 一层循环就好了 十进制 转换 62进制 遍历

user: user-3
content: 用递归是可以的，但是递归也有其弊端。因为递归是不停的申请自身函数栈，若是无穷或者特别多次的递归调用，可能会导致栈溢出。
user-0 提问: 请问如何计算出#QNAN

回复:
user: user-1
content: 这就是C库函数，不支持C99的编译器可以用NAN常量，C++中有quiet_NaN（#include <limits>）

user: user-2
content: 对浮点异常值NAN、QNAN、 SNAN、 IND、 INF的处理 https://blog.csdn.net/lisai17/article/details/14649419

user: user-2
content: _isnan Checks given double-precision floating-point value for not a number (NaN).  int _isnan( double x );  Routine Required Header Compatibility  _isnan <float.h> Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  _isnan returns a nonzero value (TRUE) if the argument x is a NaN; otherwise it returns 0 (FALSE).  Parameter  x  Double-precision floating-point value  Remarks  The _isnan function tests a given double-precision floating-point value x, returning a nonzero value if x is a NaN. A NaN is generated when the result of a floating-point operation cannot be represented in Institute of Electrical and Electronics Engineers (IEEE) format. For information about how a NaN is represented for output, see printf.  Floating-Point Support Routines  See Also   _finite, _fpclass

user: user-3
content: 引用 4 楼 六道佩恩 的回复:[quote=引用 3 楼 _ZGq 的回复:] 0.0/0.0==#QNAN ; #INF*0.0==#QNAN 我测试0.0/0.0是#IND[/quote] #INF*0.0 呢？（1.0/0.0*0.0）

user: user-0
content: 引用 9 楼 早打大打打核战争 的回复:#include <math.h> double x = nan(""); 请问这个nan函数是干什么的？C标准库没查到，MSDN里只有寥寥几句，没看懂

user: user-0
content: 引用 10 楼 _ZGq 的回复:[quote=引用 8 楼 六道佩恩 的回复:] [quote=引用 7 楼 _ZGq 的回复:] [quote=引用 4 楼 六道佩恩 的回复:] [quote=引用 3 楼 _ZGq 的回复:] 0.0/0.0==#QNAN ; #INF*0.0==#QNAN 我测试0.0/0.0是#IND[/quote] #INF*0.0 呢？（1.0/0.0*0.0）[/quote] #INF只是输出时的错误表示吧。。。。还可以用来乘吗？都编译不通过[/quote] 不是已经得出了#INF==1.0/0.0吗？带进去就行了：1.0/0.0*0.0[/quote] 结果是#IND

user: user-2
content: 电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、#QNAN、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-3
content: 引用 8 楼 六道佩恩 的回复:[quote=引用 7 楼 _ZGq 的回复:] [quote=引用 4 楼 六道佩恩 的回复:] [quote=引用 3 楼 _ZGq 的回复:] 0.0/0.0==#QNAN ; #INF*0.0==#QNAN 我测试0.0/0.0是#IND[/quote] #INF*0.0 呢？（1.0/0.0*0.0）[/quote] #INF只是输出时的错误表示吧。。。。还可以用来乘吗？都编译不通过[/quote] 不是已经得出了#INF==1.0/0.0吗？带进去就行了：1.0/0.0*0.0

user: user-1
content: #include <math.h> double x = nan("");

user: user-0
content: 引用 7 楼 _ZGq 的回复:[quote=引用 4 楼 六道佩恩 的回复:] [quote=引用 3 楼 _ZGq 的回复:] 0.0/0.0==#QNAN ; #INF*0.0==#QNAN 我测试0.0/0.0是#IND[/quote] #INF*0.0 呢？（1.0/0.0*0.0）[/quote] #INF只是输出时的错误表示吧。。。。还可以用来乘吗？都编译不通过

user: user-0
content: 引用 1 楼 user-4 的回复:为啥要得到这个数呢？有什么具体的用途吗？ 我确实有我的需要，但不方便说。

user: user-0
content: 引用 2 楼 赵4老师 的回复:浮点数格式 http://bbs.csdn.net/topics/390676437 赵老师，这个帖子里并没有错误浮点数相关的呀。浮点数的结构我是知道的，我只是想如何计算才能得出#QNAN

user: user-0
content: 引用 3 楼 _ZGq 的回复:0.0/0.0==#QNAN ; #INF*0.0==#QNAN 我测试0.0/0.0是#IND

user: user-3
content: 0.0/0.0==#QNAN ; #INF*0.0==#QNAN

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

user: user-4
content: 为啥要得到这个数呢？有什么具体的用途吗？
user-0 提问: FOR函数跳出循环的条件能不能用==，我试了好像没效果

回复:
user: user-1
content: 可以的，属于判断条件

user: user-2
content: 基本的语句还是要先搞懂的

user: user-0
content: 引用 1 楼 老马何以识途 的回复:for裏面的條件是指“符合條件則進入”，所以你搞反了。 是满足FOR中间的条件就进去，不满足出来对吧  是我搞反了   我理解成满足出来 不满足进去

user: user-3
content: 肯定是不会进入循环，执行循环体的。因为fact初始化为1，而不是5。  可以考虑这样  for (i = 2; ; i++)     if ((fact = n % i) == 5)         break;   或者  for (i = 2; fact != 5; i++)     fact = n % i;   不过，楼主的这个算法是求素数的？

user: user-4
content: for裏面的條件是指“符合條件則進入”，所以你搞反了。
user-0 提问: 关于贪心法钓鱼的鱼量计算过程的输出

回复:
user: user-1
content: 会写算法不会写打印？有点假了吧 12+(12-4)+(12-4*2)=24 这个不就是printf("%d+(%d-%d)+(%d-%d*%d)=%d", ……)么？
user-0 提问: 请问我的代码为什么会runtime erorr?

回复:
user: user-0
content: 这道题用c++就能过，用对应的c语言版本就euntime erorr，不知道为什么，哎，菜是原罪~

user: user-1
content: Visual Studio 6 ： vc6 Visual Studio 2003 ： vc7 Visual Studio 2005 ： vc8 Visual Studio 2008 ： vc9 Visual Studio 2010 ： vc10 Visual Studio 2012 ： vc11 Visual Studio 2013 ： vc12 Visual Studio 2015 ： vc14

user: user-1
content: 没有对应的安装c++运行库？

user: user-2
content: 你输入了什么 怎么输入的

user: user-3
content: char dna[55][1005]; int acgt[55][1005]={0}; char maxx[1005]={0}; 两个问题： 1.全局变量不需要初始化为0，因为编译器默认会给初始化为0.因为是全局变量。 2. 定义的长度，(55 × 1005 + 55 ×1005) * 4 + 1005 * 4 ==xxxx Bytes 这么多个字节，首先你能用这么多，另外，这么大的空间，系统需要有这么大。这也可能是runtime error的主要原因。 建议使用动态申请空间的形式完成，因为是需要多少申请多少，用完需要手动释放。

user: user-4
content: 引用 赵4老师 的回复:C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817  计算机组成原理→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-5
content: 内存溢出了？單步調試一下，或者關鍵位置寫一些輸出語句。
user-0 提问: 如何把含有字母数字和符号的文件，提取出数字坐标，并保存到TXT文件中

回复:
user: user-1
content: plt文件中的PW指令是什么含义啊？？

user: user-2
content: fscanf就支持简单的正则的

user: user-3
content: 引用 7 楼 lwd2wl 的回复:建议读取之后，以';'为分隔符，分别分割。然后再用strncmp比较，选择出PD或PU，然后再对其使用' '（空格）分割，最后atoi转换为整型，即坐标值。这个思路想到了，想到了用分号分割了，但是每行的长度不相同，总是只能出现第一行的效果，下面还是没用。不过没有用strncmp比较，而且atoi不知道是没用好还是没效果，出来的是空的。还是感谢大家的提醒  那就每行读取一个固定长度，如果没有读取完全，可以考虑把这行的最后一个;组放到下一行里。

user: user-0
content: 建议读取之后，以';'为分隔符，分别分割。然后再用strncmp比较，选择出PD或PU，然后再对其使用' '（空格）分割，最后atoi转换为整型，即坐标值。这个思路想到了，想到了用分号分割了，但是每行的长度不相同，总是只能出现第一行的效果，下面还是没用。不过没有用strncmp比较，而且atoi不知道是没用好还是没效果，出来的是空的。还是感谢大家的提醒

user: user-4
content: 正则表达式可以吗

user: user-3
content: 建议读取之后，以';'为分隔符，分别分割。然后再用strncmp比较，选择出PD或PU，然后再对其使用' '（空格）分割，最后atoi转换为整型，即坐标值。

user: user-0
content: 谢谢大家，已经写出来了

user: user-5
content: 试试正则表达式。

user: user-0
content: 没有效果呀，出来的还是整体的东西， #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>  int main() { 	FILE *fp; 	char str[1024][1024]; 	char ch; 	FILE *fpt; 	fpt = fopen("C.txt","w"); 	if ((fp = fopen("char.plt", "r")) == NULL) 	{ 		perror("fail to read"); 		exit(1); 	}  	while(!feof(fp))     {        fscanf(fp,"%*[^(-9)-9]%d",str);             while((ch=fgetc(fp))!=EOF)             {                 fputc(ch,fpt);             }             printf("%s\n",str,fpt);     }     fclose(fp);     fclose(fpt); 	return 0; }

user: user-6
content: fscanf %*[^0-9]%g 就可以了

user: user-7
content: 先用分号(;)分割成好多子字符串,然后查找PU，PD开头的字符串，找到后截取后面的坐标
user-0 提问: 关于 负数补码的二进制表示有个疑问

回复:
user: user-1
content: 数制表示是以计算机中数制表示为准，若是32位，则-8的原码是10000000  00000000  00000000  00000111，除符号位外取反加一，得到11111111  11111111  11111111  11111000。

user: user-2
content: 因为原先前面都是0,32位的数，前面都是0，反码后就都是1了。
user-0 提问: 编译原理课设

回复:
user: user-1
content: 研究一下tiny c compiler或者gcc源代码中对应功能？

user: user-2
content: 你可以先定一個規則，如何定義全局變量、靜態變量等。比如在函數外部的就是全局變量，static開頭的就是靜態。  那麽搜索變量的時候，如果發現當前搜索範圍是在函數中，那麽他就不是全局變量，反之則是。而搜索到static開頭的則都是靜態變量。  沒用到的變量稍複雜點，可以分全局或局部變量，建立語句樹，每個語句又有一個變量列表。在變量的作用域中有語句提到了變量就是用到了。  其他關於變量的規則，可以繼續補充，思路就是要有一個總的框架先。
user-0 提问: 为什么同一个程序运行结果和调试结果不一样？

回复:
user: user-1
content: 首先编译器不会检查数组越界的问题，越界访问运行中结果是未定义的，即越界访问可能会影响后面变量的值（如果后面还有变量）。

user: user-2
content: 其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。
user-0 提问: 数据结构与算法

回复:
user: user-1
content: ， 就像是数据结构里的堆在逻辑结构上是完全二叉树，但是在实现上可以通过动态顺序表，链表的方式实现

user: user-2
content: 数据的逻辑结构是指各数据元素之间的逻辑关系，是按使用需要而建立的。 数据的物理结构是指数据在计算机内实际的存储形式。
user-0 提问: 问一下以下代码的流程图怎么做？明天就要收了！！！！！

回复:
user: user-1
content: https://blog.csdn.net/langhonglin/article/details/81091727

user: user-2
content: 你能用中文描述一下你的代码逻辑吗，能的话把那段话中的关键词拿出来去画流程图

user: user-0
content: 自己顶一下自己
user-0 提问: 做一个酒店管理系统   中间有些没放上去 然后其他输入没问题 在输入姓名的时候就出现这种情况

回复:
user: user-1
content: scanf_s("%s", guest[count - num + i].name, xxx); xxx的地方需要加一个参数，即name数组的长度。这是scanf_s函数必须要加上的。

user: user-2
content: scanf_s應該是要帶一個空間大小參數的。
user-0 提问: 有大神做过UVA上的题么？小白不知道怎么回事，好好的代码提交上去就是WA，没AC一条.....

回复:
user: user-0
content: 已经可以了，问题出在我提交代码时选了C++5导致的，选C++11就没问题了。谢谢。

user: user-1
content: #include<stdio.h> char s[85]; int main() {     int n, score, cnt;     int i;      scanf("%d",&n);      while(n--)     {          scanf("%s", s);         cnt = 0, score = 0;         for(i = 0; s[i]; i++)         {             if(s[i] == 'X') {                 score = 0;                 continue;             }             score++;             cnt += score;         }         printf("%d\n",cnt);     } }  试试这个。
user-0 提问: 大佬们  哪里错了

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

user: user-2
content: 你的输入不对啊

user: user-3
content: 去掉scanf中的'\n'，因为scanf是格式化输入，没有匹配'\n'。  另外，对于浮点数和0比较不能按照整型数与0比较方法。  浮点数比较方法(float): if (x > 0 && x > 1e-6)     printf("x大于0\n"); if (x < 0 && fabs(x) > 1e-6)     printf("x 小于0\n"); if (fabs(x) < 1e-6)     printf("x等于0\n");

user: user-4
content: scanf("%f\n",&x);  的意思是，scanf()读取了缓冲区中的数据之后，继续读取缓冲区下一行的数据。如果缓冲区的下一行没有数据，则scanf()就会阻塞。所以此时没有数据输出，需要“再输入一个随便的数字”，scanf()函数才会返回程序才会向下继续运行。

user: user-4
content: scanf("%f\n",&x);   改为 scanf("%f",&x);

user: user-0
content: 输入一个数字之后     还要再输入一个随便的数字才能出现结果
user-0 提问: sprintf使用中的奇怪现象

回复:
user: user-1
content: 第一个sprintf没有越界，但是第二个file缓存已经越界了。越界操作的结果是未定的。因此建议考虑使用snprintf，这样通过输入数组的长度，来防止有越界访问。  另外，可以把file的长度扩大一倍试试。数组的长度建议定义为2的n次方长度。即扩大一倍变成64

user: user-2
content: 字符串越界了。dir长度不够, file 长度不够。 定义这种数组的时候，一定要确保长度足够。
user-0 提问: 老师们帮忙看一下这倒C语言题目哪里错了，非常感谢！

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  int main() {     long int n,i,j,t,count=0;     unsigned int k;      scanf("%ld",&n);     scanf("%d",&k);     int *arr = (int *)malloc(sizeof(int) * n);     if (!arr)         return -1;     for(i=0; i<n; i++)     {         scanf("%d",&arr[i]);     }     for(i=0; i<n-1; i++)     {         for(j=i+1; j<n; j++)         {             for(t=j;t>i;t--)             {                 if(arr[i]==arr[t])    //这儿的arr[j]改成arr[i]即可。                     break;             }             if(t==i&&(arr[i]-arr[j] == k || arr[j]-arr[i] == k))                 count++;         }     }     printf("%ld\n",count);      free(arr);      return 0; }  参考一下吧。在你的基础上只改了一个地方就能得到正确的结果了（不过仅用了一个测试用例，就是你提供的，不确定在其他区用例上能否正确得到结果）。  另外，又改了一下可变数组的的申请方式。C语言里不支持可变数组组，但是可以通过malloc/free来代替。

user: user-2
content: 标准做法： 1. 排序 2. 去重 3. 遍历

user: user-3
content: 引用 4 楼 KarivV 的回复:找到差值为k的数字对 求出去掉重复数组对后的 数字对个数 也就是 1-3 3-5 2-4 输出3   #include <stdio.h> #include <malloc.h>  int main() { 	long n, i, j, count = 0; 	unsigned int k = 0; 	int *arr; 	scanf("%d %d", &n, &k); 	rewind(stdin); 	arr = (int *)malloc(n * sizeof(int)); 	 	for (i = 0; i < n; ++i) 	{ 		scanf("%d", arr + i); 	} 	rewind(stdin);  	for (i = 0; i < n; ++i) 	{ 		for (j = 0; j < n; ++j) 		{ 			if (arr[j] == arr[i] + 2) 				++count; 		} 	}  	printf("%ld", count); 	return 0; }  不要嫌弃 代码丑陋  忘记free了... printf下面加个free(arr);

user: user-3
content: 找到差值为k的数字对 求出去掉重复数组对后的 数字对个数 也就是 1-3 3-5 2-4 输出3   #include <stdio.h> #include <malloc.h>  int main() { 	long n, i, j, count = 0; 	unsigned int k = 0; 	int *arr; 	scanf("%d %d", &n, &k); 	rewind(stdin); 	arr = (int *)malloc(n * sizeof(int)); 	 	for (i = 0; i < n; ++i) 	{ 		scanf("%d", arr + i); 	} 	rewind(stdin);  	for (i = 0; i < n; ++i) 	{ 		for (j = 0; j < n; ++j) 		{ 			if (arr[j] == arr[i] + 2) 				++count; 		} 	}  	printf("%ld", count); 	return 0; }  不要嫌弃 代码丑陋

user: user-4
content: #include<stdio.h> //我理解的是你想把差值为n-k，或k-n的数字对去掉，还剩下的数字 int main() {     long int n,i,j,t,count=0;     unsigned int k; 	printf("please input n:");     scanf("%ld",&n); 	printf("please input k:");     scanf("%d",&k);     int arr[100];//这里不能用变量的     for(i=0; i<n; i++)     {	printf("input arr[%d]",i);         scanf("%d",&arr[i]);     }     for(i=0; i<n-1; i++)     {         for(j=i+1; j<n; j++)         {             if(arr[i]-arr[j]==n-k||arr[j]-arr[i]==n-k)                 count++;         }     }     printf("%ld",n-count*2);     return 0; }

user: user-4
content: 能把你说的去重说的清楚一点吗？

user: user-4
content: 你这个问题是什么啊？
user-0 提问: 数列排序  请各位大神看看有什么问题？

回复:
user: user-0
content: 引用 1 楼 user-5的回复:遇到什么问题说清楚 编译错误贴错误提示  运行错误贴运行截图  代码要用[c o d e = c] [ / c o d e ] 去掉空格包起来 请问怎么用代码要用[c o d e = c] [ / c o d e ] 去掉空格包起来？

user: user-1
content: 你这个是数组输入几个元素，最后让数组按从小到大的顺序输出，

user: user-2
content: 12行似乎错了 应该是for(int j=i+1;j<n;j++)

user: user-3
content: #include <stdio.h> #include <stdlib.h>  int main() {     int n,i,j;      scanf("%d", &n);     //int a[n],temp;     int temp;     int *a = (int *)malloc(sizeof(int) * n);     if (!a)         return -1;      for(i=0;i<n;i++) {         scanf("%d",&a[i]);     }      for(i=0;i<n;i++)     {         //for(j=i+1;j<n+1;j++)         for(j=i+1;j < n; j++)         {             if(a[i]>a[j])             {                 temp=a[i];                 a[i]=a[j];                 a[j]=temp;             }         }     }     for(i=0;i<n;i++)     {         printf("%d ",a[i]);     }     putchar(10);     free(a);     return 0; }  参考一下吧  C语言不支持动态数组，那么可以考虑malloc/free来动态申请空间。 另外，注意数组越界的问题。即排序的第二层循环里，注意j的循环最大值。

user: user-4
content: 感觉没问题，选择排序。就是老一点的不支持动态数组。 还有建议输出加个换行或者 \t 什么的。

user: user-5
content: 遇到什么问题说清楚 编译错误贴错误提示  运行错误贴运行截图  代码要用[c o d e = c] [ / c o d e ] 去掉空格包起来
user-0 提问: 求助，怎么把内存中的16进制0x00显示出来？

回复:
user: user-1
content: 可以参考下博文 我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《常见数据格式转换处理的代码实现》, 一起来围观吧 https://blog.csdn.net/szullc/article/details/85009998 里面有很多现成的格式数据常用形式转换，你的这种需求，我们叫“BCD形式转ASCII形式”

user: user-2
content: #include <stdio.h>  char MACDZ[] = { (char)0x00, (char)0x12, (char)0x4B, (char)0x00, (char)0x19, (char)0xAB, (char)0xF0, (char)0x66 };  int main() { 	unsigned length = sizeof(MACDZ); 	char buffer[BUFSIZ]; 	for (unsigned i = 0; i < length; ++i) 		sprintf(buffer + (i << 1), "%02X", (unsigned char)MACDZ[i]); 	buffer[length << 1] = 0; 	printf("%s", buffer); 	return 0; }
user-0 提问: 为什么无法进行下一步调试了

回复:
user: user-1
content: 你的这个scanf，要在输入数据的时候输入逗号，而不能是其他字符才行，当然你可以把%d间的字符删除，输入时用空格隔开就好

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

user: user-3
content: 又见VC++6.0，这是我最喜欢的调试器！ 正如楼上几位朋友所说，scanf输入格式和输入的内容不匹配，有5个%d，而后面只有4个参数。把代码修改为 scanf("%d,%d,%d,%d", &a, &b, &c, &d); 还需要注意的是在控制台中输入数字的格式，应该如下图所示  数字与数字中间要有一个英文格式的逗号，此时的输出结果为  如果不想在输入时加入逗号，应该把scanf()函数的代码改为 scanf("%d %d %d %d", &a, &b, &c, &d);//此时d%之间没有逗号 此时在控制台中输入输出的效果如图所示

user: user-4
content: scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d);

user: user-5
content: 无法继续调试，应该是没有输入完全。scanf输入格式和输入的内容不匹配。%d（5个），参数个数是4个。

user: user-6
content: 你前面是五个%d，后面是四个输入

user: user-0
content: 我输入了，但是为什么不行啊，是我输入的地方不对吗

user: user-7
content: scanf函数是阻塞，等待用户输入数据才能继续

user: user-8
content: 应该是逗号吧，把逗号去掉
user-0 提问: 如何要求用户输入的scanf("%d",&num);必须是数字1.2.0啊，这里如果用户输入字符的话会进入死循环

回复:
user: user-1
content: 引用 1 楼 独孤由过 的回复: #include <stdio.h>  int main() { 	int num; 	do 	{ 		if (scanf("%d", &num) != 1) 			fseek(stdin, 0, SEEK_END); 	} while (num < 0 || num > 2); 	printf("%d", num); 	return 0; }  之前的代码链接 没体现出问题 换一个代码连接  点开有惊喜

user: user-1
content: 引用 1 楼 独孤由过 的回复: #include <stdio.h>  int main() { 	int num; 	do 	{ 		if (scanf("%d", &num) != 1) 			fseek(stdin, 0, SEEK_END); 	} while (num < 0 || num > 2); 	printf("%d", num); 	return 0; }  真是不幸 踩雷了 stdin不能fseek 就算在你的运行环境可以  换一个运行环境可能就不行 这是地雷区 什么时候踩到地雷 怎么踩的都不知道  https://ideone.com/Qcq0WC

user: user-2
content: 再供参考：#include <stdio.h> int main() {     int IP[4];     int i;     char c;      printf("请输入一个ip地址:");fflush(stdout);     while (1) {         rewind(stdin);         if (5==scanf("%d.%d.%d.%d%c",&IP[0],&IP[1],&IP[2],&IP[3],&c)) {             if (0<=IP[0] && IP[0]<=255              && 0<=IP[1] && IP[1]<=255              && 0<=IP[2] && IP[2]<=255              && 0<=IP[3] && IP[3]<=255              && '\n'==c) {                 break;             } else printf("输入的ip地址格式不对!\n请重新输入:\n");         } else printf("输入的ip地址格式不对!\n请重新输入:\n");     }     for (i=0;i<4;i++) {         printf("IP[%d]=%d\n",i,IP[i]);     }     return 0; }

user: user-2
content: 仅供参考：#include <stdio.h> #include <string.h> char s[80]; int i; char c; int main() {     while (1) {         printf("Input a integer:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin); 		if (strlen(s)>10) { 			printf("Input too long(>9)!\n"); 			continue; 		}         if (2==sscanf(s,"%d%c",&i,&c)) {             if ('\n'==c) {                 printf("%d is a integer.\n",i);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a integer!\n",s);     }     return 0; }

user: user-3
content: 引用 2 楼 自信男孩 的回复:因为%d匹配的是数字，如果输入1.2.0，那么'.'是不匹配%d。但是'.'不会从内存中刷走，而是还在输入缓存里，所以等下次循环时，scanf还是会匹配1.2.0，这样就一直死循环了。 建议判断scanf的 返回值，如果返回值不是1（因为%d只有一个），则清空输入缓冲区并让用户继续输入，

user: user-3
content: 因为%d匹配的是数字，如果输入1.2.0，那么'.'是不匹配%d。但是'.'不会从内存中刷走，而是还在输入缓存里，所以等下次循环时，scanf还是会匹配1.2.0，这样就一直死循环了。

user: user-4
content: 用char类型，char c=getchar()，如果c=='1'……，否则如果c=='2'……，否则如果c=='0'……，否则就不符合要求。

user: user-5
content: #include <stdio.h>  int main() { 	int num; 	do 	{ 		if (scanf("%d", &num) != 1) 			fseek(stdin, 0, SEEK_END); 	} while (num < 0 || num > 2); 	printf("%d", num); 	return 0; }
user-0 提问: epoll问题

回复:
user: user-1
content: 可以通过设置心跳机制来控制 用setsockopt来设置探测间隔、发包间隔、次数

user: user-0
content: 引用 1 楼 northwesternwind的回复:应该会作为事件返回。需要注册相应的事件：  EPOLLIN：            触发该事件，表示对应的文件描述符上有可读数据。(包括对端SOCKET正常关闭)；          EPOLLOUT：         触发该事件，表示对应的文件描述符上可以写数据；         EPOLLPRI：           表示对应的文件描述符有紧急的数据可读（这里应该表示有带外数据到来）；         EPOLLERR：        表示对应的文件描述符发生错误；          EPOLLHUP：        表示对应的文件描述符被挂断；         EPOLLET：           将EPOLL设为边缘触发(Edge Triggered)模式，这是相对于水平触发(Level Triggered)来说的。         EPOLLONESHOT：  只监听一次事件，当监听完这次事件之后，如果还需要继续监听这个socket的话，需要再次把 谢谢，网络中断或者客户端关机，这些事件触发不了

user: user-2
content: 应该会作为事件返回。需要注册相应的事件：  EPOLLIN：            触发该事件，表示对应的文件描述符上有可读数据。(包括对端SOCKET正常关闭)；          EPOLLOUT：         触发该事件，表示对应的文件描述符上可以写数据；         EPOLLPRI：           表示对应的文件描述符有紧急的数据可读（这里应该表示有带外数据到来）；         EPOLLERR：        表示对应的文件描述符发生错误；          EPOLLHUP：        表示对应的文件描述符被挂断；         EPOLLET：           将EPOLL设为边缘触发(Edge Triggered)模式，这是相对于水平触发(Level Triggered)来说的。         EPOLLONESHOT：  只监听一次事件，当监听完这次事件之后，如果还需要继续监听这个socket的话，需要再次把

user: user-2
content: 引用 2 楼 focuslight 的回复:有 超时机制吧 下面内容从stackoverflow抄来的，应该 有用： Sounds like you're trying to write an event loop (if so have a look at libev btw).  epoll will not help you there, you have to keep track of socket inactivity yourself (clock_gettime() or gettimeofday() for instance), then wake up several times a second and check everything you need.  Some pseudo code  while (1) {     n = epoll_wait(..., 5);     if (n > 0) {         /* process activity */     } else {         /* process inactivity */     } } This will wake you up 200 times a second if all sockets are inactive.  The inactivity check requires a list of the sockets to be examined along with timestamps of the last inactivity:  struct sockstamp_s {     /* socket descriptor */     int sockfd;     /* last active */     struct timeval tv; };  /* check which socket has been inactive */ for (struct sockstamp_s *i = socklist; ...; i = next(i)) {     if (diff(s->tv, now()) > 500) {         /* socket s->sockfd was inactive for more than 500 ms */         ...     } } where diff() gives you the difference of 2 struct timevals and now() gives you the current timestamp.

user: user-3
content: 有 超时机制吧
user-0 提问: 这个算不对啊，求详细介绍一下，谢谢

回复:
user: user-0
content: 引用 4 楼 niiiloc的回复:a[0]=1 a[1]=0 a[2]=a[2]+a[1]+a[0]=1+0+1=2 a[3]=a[3]+a[2]+a[1]=0+2+0=2 a[4]=a[4]+a[3]+a[2]=1+2+2=5 a[5]=a[5]+a[4]+a[3]=0+5+2=7 以此类推 最后输出是1 0 2 2 5 7 13 20 100分怎么给你，没经历过过

user: user-1
content: a[0]=1 a[1]=0 a[2]=a[2]+a[1]+a[0]=1+0+1=2 a[3]=a[3]+a[2]+a[1]=0+2+0=2 a[4]=a[4]+a[3]+a[2]=1+2+2=5 a[5]=a[5]+a[4]+a[3]=0+5+2=7 以此类推 最后输出是1 0 2 2 5 7 13 20

user: user-0
content: 引用 1 楼 niiiloc的回复:注意a[i]+=a[i-1]+a[i-2]; 就好了，其他没啥难点吧 他的运行结果，我算不对

user: user-0
content: 引用 1 楼 niiiloc的回复:注意a[i]+=a[i-1]+a[i-2]; 就好了，其他没啥难点吧 详细说一下详细介绍一下

user: user-1
content: 注意a[i]+=a[i-1]+a[i-2]; 就好了，其他没啥难点吧
user-0 提问: STM32控制WIFI模块ESP8266发送数据到TCP Server

回复:
user: user-0
content: 你好！上面的问题已经解决了 现在是我能实现局域网内部的通信 但是互联网通信还不能实现 卡在连接服务器上 ESP8266能够连接到WIFI 但是下一步连接服务器就一直报连接超时的问题 恳请大哥能帮下小弟

user: user-1
content: 定时器中断 就好了
user-0 提问: 十进制转化为十六进制输入整数大于等于2^32的问题，如何解决？

回复:
user: user-1
content: 用long，再不行用long long，再不行，字符串模拟大数计算。

user: user-2
content: 引用 1 楼 独孤由过 的回复:任意进制之间的相互转换  #include<iostream>  char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };  int hexConversion(char *str, char *istr, int x, int n) { 	int sum = 0, lengh = strlen(str); 	for (int i = lengh - 1; i >= 0; --i) 	for (int j = 0; j < 16; ++j) 	if (str[i] == hex[j]) 		sum += j*pow(x, lengh - i - 1); 	int count = 0; 	do 	{ 		istr[count] = hex[sum%n]; 		sum /= n; 		++count; 	} while (sum != 0); 	return count; }  int main() { 	char str[100], istr[100]; 	int x, n; 	std::cout << "输入数和进制："; 	std::cin >> str >> x; 	std::cout << "输入转换的进制："; 	std::cin >> n; 	int count = hexConversion(str, istr, x, n); 	std::cout << "结果为："; 	for (int i = count - 1; i >= 0; --i) 		std::cout << istr[i]; 	return 0; } 你都没看题主遇到的问题是什么 怎么转换题主知道并且代码都写出来了 题主的问题是 溢出 如果数据 超过int的取值范围 代码结果错 想知道怎么处理 而你的代码 会出现和题主一样的问题 解决的是题主并不关心的任意进制转换到任意进制  另外2个问题 1. pow没写头文件 2. 任意进制转十进制的时候从后往前计算又掉low 从前往后计算方便多了

user: user-3
content: char * __cdecl _ui64toa(unsigned __int64, char *, int);

user: user-4
content: 任意进制之间的相互转换  #include<iostream>  char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };  int hexConversion(char *str, char *istr, int x, int n) { 	int sum = 0, lengh = strlen(str); 	for (int i = lengh - 1; i >= 0; --i) 	for (int j = 0; j < 16; ++j) 	if (str[i] == hex[j]) 		sum += j*pow(x, lengh - i - 1); 	int count = 0; 	do 	{ 		istr[count] = hex[sum%n]; 		sum /= n; 		++count; 	} while (sum != 0); 	return count; }  int main() { 	char str[100], istr[100]; 	int x, n; 	std::cout << "输入数和进制："; 	std::cin >> str >> x; 	std::cout << "输入转换的进制："; 	std::cin >> n; 	int count = hexConversion(str, istr, x, n); 	std::cout << "结果为："; 	for (int i = count - 1; i >= 0; --i) 		std::cout << istr[i]; 	return 0; }