Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 猴子选大王·C语言

回复:
user: user-1
content: #include<bits/stdc++.h> using namespace std;  const int N = 1000000 + 10; queue<int> q; int x[N]; int n, m;  int main(){ 	cin >> n; 	 	for (int i = 1; i <= n; ++i) { 		q.push(i); 		scanf("%d", &x[i]); 	} 	 	while (q.size() - 1){	 		int b = x[q.front()]; 		for (int i = 1; i <= b - 1; ++i) { 			q.push(q.front()); 			q.pop(); 		} 	//	cout << q.front() << " "; 		q.pop(); 	} 	 	cout << q.front() << endl; 	return 0; }  自己在一本通上面做的

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

user: user-3
content: n大于2吗？

user: user-4
content: ...你这个退出之后从哪一只猴子开始数 1 ？

user: user-5
content: 仅供参考：//假设有n个人团团围做，从第1个人开始数数，数到第m个人时候，第m个人出列， //然后继续从1开始数数，数到第m个人退出 #include <stdio.h> #include <conio.h> int i,k,t; int n,m; static char f[1001];//0该座位未出圈,1该座位已出圈 void main() {     while (1) {         printf("Input n m(1000>=n>=m>=1):");         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1000>=n && n>=m && m>=1) break;         }     }     t=0;//已出圈总人数     i=1;//座位编号     k=1;//当前要数的数     while (1) {         if (0==f[i]) {             if (m==k) {                 t++;                 f[i]=1;                 printf("%3d ",i);                 if (0==t%10) printf("\n");                 if (t>=n) break;             }             k++;if (k>m) k=1;         }         i++;if (i>n) i=1;     }     cprintf("Press any key ...");     getch(); }
user-0 提问: C语言：如何将16进制形式的字符串，转化为相同的16进制的整型。

回复:
user: user-1
content: long int strtol(const char *nptr, char **endptr, int base);         long long int strtoll(const char *nptr, char **endptr, int base); 了解一下这两个函数～

user: user-0
content: 问题已解决，可以满足需求

user: user-0
content: 引用 1 楼 user-2 的回复:仅供参考： #include <stdio.h>  int main(void) { 	char *str = "0x123"; 	int data; 	sscanf(str, "%x", &data); 	printf("%#x\n", data); 	 	return 0; }

user: user-2
content: 仅供参考： #include <stdio.h>  int main(void) { 	char *str = "0x123"; 	int data; 	sscanf(str, "%x", &data); 	printf("%#x\n", data); 	 	return 0; }
user-0 提问: 求大神carry！！！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #include <stdio.h> #include <stdlib.h>   void bubble_sort(int *arr, int len); int main() {      int n, *arr, i;      scanf("%d", &n);      arr = (int *)malloc(sizeof(int) * (n));     if (!arr)         return -1;      for (i = 0; i < n; i++)         scanf("%d", &arr[i]);      bubble_sort(arr, n);      for (i = 0; i < n; i += 1)         printf("%d ", arr[i]);     putchar(10);      /*        for (i = 1; i < n+1; i += 2)        printf("%d ", arr[i]);        putchar(10);        for (i = 2; i < n+1; i += 2)        printf("%d ", arr[i]);        putchar(10);        */      return 0; }  void bubble_sort(int *arr, int len) {     int i, j;     int tmp;      for (i = 0; i < len; i++) {         for (j = 0; j < len-1; j++) {             if (arr[j] > arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             }         }     } } 供参考～

user: user-3
content: 方案一，使用变长数组，需要编译器支持C99  #include "stdio.h" #include "stdlib.h" #include "time.h" int main( void ) { 	int num=0,i=0; 	printf("输入数组长度："); 	scanf( "%d", &num  ); 	int arr[num]; 	srand( time(0) ); 	for( i=0 ; i<num ; i++ ) 	{ 		arr[i] = rand()%100; 		printf("%d ", arr[i] ); 	}  	return 0; }   方案二，申请内存，C90亦可  #include "stdio.h" #include "stdlib.h" #include "time.h" int main( void ) { 	int num=0,i=0; 	printf("输入数组长度："); 	scanf( "%d", &num  ); 	int* arr = calloc( num, sizeof(int) );; 	srand( time(0) ); 	for( i=0 ; i<num ; i++ ) 	{ 		arr[i] = rand()%100; 		printf("%d ", arr[i] ); 	}  	return 0; }
user-0 提问: 关于链接动态库的一个问题

回复:
user: user-0
content: 引用 6 楼 Intel0011 的回复:[quote=引用 4 楼 六道佩恩 的回复:][quote=引用 1 楼 user-2 的回复:]https://www.cnblogs.com/johngu/p/7877939.html  这个“隐式链接”不是链接静态库吗？[/quote] lib有两种 一种是静态库，里面包含功能函数 另一种是导入库，里面包含DLL中函数的信息，供链接器去寻找调用的函数 这两种库的后缀都是lib，但功能和内容不一样  [/quote]  抱歉哈，上次有事就把这茬给忘了，非常感谢老哥，我把分都加上

user: user-1
content: 引用 4 楼 六道佩恩 的回复:[quote=引用 1 楼 user-2 的回复:]https://www.cnblogs.com/johngu/p/7877939.html  这个“隐式链接”不是链接静态库吗？[/quote] lib有两种 一种是静态库，里面包含功能函数 另一种是导入库，里面包含DLL中函数的信息，供链接器去寻找调用的函数 这两种库的后缀都是lib，但功能和内容不一样 ---------------------------------------------- Windows中，动态库包括xx.dll和xx.lib两部分。静态库包含yy.lib。  此处有两种lib，一种称为动态库的导入库xx.lib。一种称为静态库yy.lib，如何来进行区分呢。 第一看大小，导入库一般都很小，大的也只有几K，而静态库则很大，小则几M，大则几十M。 第二就要能过命令的方式来查看了。命令行使用方式如下： -------------------------------------------------------- 1、用dumpbin /exports xxx.lib查看导出的函数接口，如果有导出的话就是动态库的lib文件，如果看不到导出函数就是静态库。 -------------------------------------------------------- 2、使用lib.exe来查看 如果该Demo.lib是静态库，输出如下： lib /list Demo.lib  Microsoft (R) Library Manager Version 8.00.50727.42 Copyright (C) Microsoft Corporation. All rights reserved.  .\Debug\Demo.obj .\Debug\Person.obj .\Debug\stdafx.obj .\Debug\Demo.res  如果该Demo.lib是导入库，输出如下： lib /list Demo.lib  Microsoft (R) Library Manager Version 8.00.50727.42 Copyright (C) Microsoft Corporation.  All rights reserved.  Demo.dll Demo.dll Demo.dll Demo.dll Demo.dll

user: user-2
content: 如果lib是静态库 就是静态链接（不需要DLL），如果是动态库，系统就在装载时会加载对应的DLL

user: user-0
content: 引用 1 楼 user-2 的回复:https://www.cnblogs.com/johngu/p/7877939.html  这个“隐式链接”不是链接静态库吗？

user: user-0
content: 引用 2 楼 Intel0011 的回复:VC也可以使用链接选项指定 或在源码中指定，这属于隐式调用 #pragma comment(lib, "XXX.lib") 代码中手写LoadLibrary是属于显式调用 这不是静态库吗？

user: user-1
content: VC也可以使用链接选项指定 或在源码中指定，这属于隐式调用 #pragma comment(lib, "XXX.lib") 代码中手写LoadLibrary是属于显式调用

user: user-2
content: https://www.cnblogs.com/johngu/p/7877939.html
user-0 提问: 英文本文件的处理（小白求助）

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 需用C语言程序写我不会呀

user: user-2
content: K&R C，修改一下即可。

user: user-3
content: 文本文件处理  https://blog.csdn.net/zhanghaiyang9999/article/details/107032563
user-0 提问: 为什么我的冒泡排序不起作用。

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

user: user-2
content: void sort(int x[], int n) {   int i,j,t;   for(i=0; x && i<n-1; i++)   {     for(j=i+1; j<n; j++)     {       if(x[i] > x[j])       {         t=x[i]; x[i]=x[j]; x[j]=t;       }     }   } }

user: user-3
content: 路过围观，学习

user: user-4
content: https://blog.csdn.net/zhanghaiyang9999/article/details/107102728  C语言基础排序算法-冒泡排序

user: user-5
content: 引用 2 楼 qq_53643374 的回复:[quote=引用 1 楼 自信男孩的回复:]select_sort函数里操作的是局部变量a数组，不是用的x，因此排序的是局部数据a排序了，没有对x开始的内存排序，x指向即main函数里的a数组。  另外，冒泡bubble_sort建议改一下函数名；  select_sort是选择排序。 改了提高代码的可读性～ 那要怎么改那[/quote]  把select_sort函数里的a用x替换；  另外，去掉a[20]的定义吧。用到的数组。

user: user-0
content: 引用 1 楼 自信男孩的回复:select_sort函数里操作的是局部变量a数组，不是用的x，因此排序的是局部数据a排序了，没有对x开始的内存排序，x指向即main函数里的a数组。  另外，冒泡bubble_sort建议改一下函数名；  select_sort是选择排序。 改了提高代码的可读性～ 那要怎么改那

user: user-5
content: select_sort函数里操作的是局部变量a数组，不是用的x，因此排序的是局部数据a排序了，没有对x开始的内存排序，x指向即main函数里的a数组。  另外，冒泡bubble_sort建议改一下函数名；  select_sort是选择排序。 改了提高代码的可读性～
user-0 提问: C中将字符串转uint8

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

user: user-2
content: uint8_t n;     const  char* str = "0xff";     sscanf(str, "%hhx", &n);

user: user-3
content: 不用转，因为char和uint8都是1个字节的长度。如果说要转的话，可能是类型强制转换了，但是这样不会改变内存里的内容。

user: user-0
content: 比如说 char *a ＝"0xff" 怎么转成uint8_t类型？

user: user-4
content: 请上代码来说明问题。

user: user-3
content: 引用 10 楼 prprrrr 的回复:[quote=引用 9 楼 自信男孩的回复:][quote=引用 2 楼 prprrrr 的回复:]比如说 char *a ＝"0xff" 怎么转成uint8_t类型？ 当然char *a  = "0xff";和uint8_t *b = "0xff";是一样的。  同理char a[] = "0xff"和uint8_t b[] = "0xff";内存是一样的（即数组a和数组b中的内容是一样的）[/quote] 相当于写了一个uint8的指针指向了"0xff"吗[/quote] 对

user: user-4
content: 所以说不上代码的话，楼主你的原始说法容易造成误解哦。

user: user-0
content: 引用 7 楼 prprrrr的回复:[quote=引用 4 楼 真相重于对错的回复:]uint8_t n;     const  char* str = "0xff";     sscanf(str, "%hhx", &n); 我这就去试试[/quote] 太好了可以，谢谢

user: user-0
content: 引用 9 楼 自信男孩的回复:[quote=引用 2 楼 prprrrr 的回复:]比如说 char *a ＝"0xff" 怎么转成uint8_t类型？ 当然char *a  = "0xff";和uint8_t *b = "0xff";是一样的。  同理char a[] = "0xff"和uint8_t b[] = "0xff";内存是一样的（即数组a和数组b中的内容是一样的）[/quote] 相当于写了一个uint8的指针指向了"0xff"吗

user: user-3
content: 引用 2 楼 prprrrr 的回复:比如说 char *a ＝"0xff" 怎么转成uint8_t类型？ 当然char *a  = "0xff";和uint8_t *b = "0xff";是一样的。  同理char a[] = "0xff"和uint8_t b[] = "0xff";内存是一样的（即数组a和数组b中的内容是一样的）

user: user-3
content: 引用 2 楼 prprrrr 的回复:比如说 char *a ＝"0xff" 怎么转成uint8_t类型？  这不一样呢，a是指向的字符串，0xff和"0xff"是不一样的。  我说的一样是这样的:char a = 0xff; uint8_t b = a;或者uint8_t b = 0xff;此时的a和b是一样的在内存里。

user: user-0
content: 引用 4 楼 真相重于对错的回复:uint8_t n;     const  char* str = "0xff";     sscanf(str, "%hhx", &n); 我这就去试试

user: user-0
content: 引用 3 楼 自信男孩的回复:不用转，因为char和uint8都是1个字节的长度。如果说要转的话，可能是类型强制转换了，但是这样不会改变内存里的内容。 噢，那就直接强转就可以了吧

user: user-5
content: 电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
user-0 提问: ～a|a为什么是-1

回复:
user: user-0
content: 引用 7 楼 it_xiangqiang的回复:C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html 哇塞，谢谢大佬

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

user: user-2
content: ~a&a为什么是0

user: user-0
content: 引用 5 楼 突触的回复:a=1  0000 0000 0000 0001  ~a  1111 1111 1111 1110  a | ~a  1111 1111 1111 1111 明白了，谢谢

user: user-3
content: a=1  0000 0000 0000 0001  ~a  1111 1111 1111 1110  a | ~a  1111 1111 1111 1111

user: user-0
content: 引用 楼主 weixin_51397022的回复:～a|a为什么是-1 a=1，～a是-2，二进制应该是最高位和第二低位是1吧，1是最低位是1，那两个按位与运算，应该是-3吧

user: user-4
content: 因为二者的位模式都是二进制全1 好巧啊。
user-0 提问: 终端的输出怎么保存到日志文件

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: ./可执行文件 >>~/mylog1.txt 或 ./脚本文件.sh >>~/mylog1.txt

user: user-3
content: 写一个日志类，直接写文件写进去不就得了

user: user-4
content: 不是串口，是ssh连上去的。

user: user-0
content: 引用 10 楼 user-5 的回复:./MRAPP 2>&1 | tee -i -a ./log.txt 这样？好像问题不在这个2>&1   我看很多打印都没能正常打印出来   printf的都没打出来，像这种： (sensor/imx307.c 688): stEVAttr.s32EV=0 stEVAttr.u32Grad=1 (sensor/imx307.c 424): isp_antiflicker = 1 (sensor/imx307.c 719): gainlimit = 3 (sen  打印到这就卡在缓冲区了？ 显然下面应该还有打印才对啊

user: user-0
content: 引用 11 楼 forever74 的回复:也就是跳出系统来记录。 在系统内记录的总有一部分缓冲区上的内容在死机时尚未写盘，这个很正常吧。用tee 的话，正常运行，有很多都是卡在了缓存区的，都没能记录下来

user: user-0
content: 引用 9 楼 forever74 的回复:如果是pts系的终端，你让连接用的那个软件直接记录就好了。 我用SecureCRT，随便记。机器装好的，转高温箱测试，接不了串口线哦

user: user-4
content: 也就是跳出系统来记录。 在系统内记录的总有一部分缓冲区上的内容在死机时尚未写盘，这个很正常吧。

user: user-5
content: ./MRAPP 2>&1 | tee -i -a ./log.txt 这样？

user: user-4
content: 如果是pts系的终端，你让连接用的那个软件直接记录就好了。 我用SecureCRT，随便记。

user: user-2
content: 参考本网页下面CSDN自动生成的链接。

user: user-0
content: 引用 5 楼 赵4老师 的回复:加出错打印： >>~/mylog1.txt 2>>~/mylog1.txt 驱动打印是啥东东？程序崩的时候打印的些东西吧，比如下面的打印： / #  / # (uvccom/st_uvc.c 1032):  ----- Isoc UVC_EVENT_STREAMOFF -----       -->1         @RxDET 3        -->2         @Ux 3              -->3 [APP WRN][dev:/dev/video0]: _UVC_QBuf[281]: Unable to queue buffer: No such device (19).    -->4 [APP WRN][dev:/dev/video0]: _UVC_QBuf[281]: Unable to queue buffer: No such device (19).    -->5 [APP WRN][dev:/dev/video0]: _UVC_QBuf[281]: Unable to queue buffer: No such device (19).    -->6 [APP WRN][dev:/dev/video0]: _UVC_QBuf[281]: Unable to queue buffer: No such device (19).    -->7 UVC: 3 buffers free.                                            -->8 UVC: Stop video stream Successfully.                -->9 (sigmastar/tsk_uvc.c 744):  UVC_StopCapture   -->10  1、8、9、10是我自己应用程序加的打印，2、3应该是驱动加的打印，4、5、6、7应该是原厂SDK加的打印，我想要的是，有没有什么操作或者指令，把这些打印全部保存到文件里面，以便机器跑死的时候我知道它的log？ 另外，我测试了下tee，./MRAPP | tee -i -a ./log.txt 好像还行，但是日志保存不完全，最后都会丢一段，不知道怎么回事

user: user-5
content: 你说的驱动进程是谁启动的？只要是在终端启动的都可以将输出重定向到文件里啊

user: user-2
content: 加出错打印： >>~/mylog1.txt 2>>~/mylog1.txt 驱动打印是啥东东？

user: user-0
content: 引用 1 楼 xian0-666 的回复:写一个日志类，直接写文件写进去不就得了可否具体点啊

user: user-0
content: 引用 2 楼 赵4老师 的回复:./可执行文件 >>~/mylog1.txt 或 ./脚本文件.sh >>~/mylog1.txt 你这个追加只是追加的该文件/脚本执行打印的东西，我要的是我机器全部的终端输出，包括驱动打印，以及出错打印
user-0 提问: 请问有人知道为什么利用freetype生成的贝塞尔曲线来形成的汉字是倒置的吗

回复:
user: user-0
content: const FT_Fixed multiplier = 65536L; FT_Matrix matrix; matrix.xx = 1L * multiplier; matrix.xy = 0L * multiplier; matrix.yx = 0L * multiplier; matrix.yy = -1L * multiplier; FT_GlyphSlot slot = face->glyph; FT_Outline &outline = slot->outline; FT_Outline_Transform(&outline, &matrix); 复制代码 将matrix.yy的值变成负的就好了

user: user-0
content: 引用 3 楼 赵4老师 的回复:int moveto(const FT_Vector* to, void* user){      printf("M %d %d\n", to->x, 100-to->y);     return 0; }  int lineto(const FT_Vector* to, void* user){      printf("L %d %d\n", to->x, 100-to->y);     return 0 ; }  int  conicto(const FT_Vector* control, const FT_Vector* to,void* user){      printf("Q %d %d %d %d\n", control->x, 100-control->y, to->x, 100-to->y);     return 0; }  int  cubicto(const FT_Vector* control1,const FT_Vector* control2, const FT_Vector* to,void* user){      printf("C %d %d %d %d %d %d\n", control1->x, 100-control1->y, control2->x, 100-control2->y ,to->x, 100-to->y);     return 0; }   该方法无效，不过我已解决了

user: user-1
content: int moveto(const FT_Vector* to, void* user){      printf("M %d %d\n", to->x, 100-to->y);     return 0; }  int lineto(const FT_Vector* to, void* user){      printf("L %d %d\n", to->x, 100-to->y);     return 0 ; }  int  conicto(const FT_Vector* control, const FT_Vector* to,void* user){      printf("Q %d %d %d %d\n", control->x, 100-control->y, to->x, 100-to->y);     return 0; }  int  cubicto(const FT_Vector* control1,const FT_Vector* control2, const FT_Vector* to,void* user){      printf("C %d %d %d %d %d %d\n", control1->x, 100-control1->y, control2->x, 100-control2->y ,to->x, 100-to->y);     return 0; }
user-0 提问: 求助

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 供参考：#include <stdio.h> #include <conio.h> //getch()函数头文件 void main() {     float A,B,C,S;      printf("输入A和B：");      scanf("%f %f",&A,&B);//scanf("%f,%f",&A,&B); 输入格式还是取消','号更方便      C = A + A + B + B;      S = A * B;      printf("周长为:%f,面积为:%f",C,S);      getch();  }  //输入A和B：1.2 2.3 //周长为:7.000000,面积为:2.760000

user: user-0
content: 引用 3 楼 qzjhjxj的回复:这两句前后不搭的，scanf("%f,%f",&A,&B); 修改之后显示:	LNK2005	_main 已经在ConsoleApplication1.obj中定义（第一行） 	LNK1169	找到一个或多个多重定义的符号（第一行）

user: user-2
content: 这两句前后不搭的，scanf("%f,%f",&A,&B);

user: user-0
content: 引用 1 楼 一颗白面馒头的回复:提醒你不安全了嘛，所以把scanf函数改为scnaf_s函数 可是我加了以后依然不可以

user: user-3
content: 提醒你不安全了嘛，所以把scanf函数改为scnaf_s函数
user-0 提问: 请问大佬在哪输入

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 虽然它叫输出，但是你要看输出，还是切到终端去吧
user-0 提问: 关于CRC16_MODBUS校验问题

回复:
user: user-0
content: CMscomm1.put_Output  引用 4 楼 it_xiangqiang 的回复:希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html感谢  这是让我从头开始学习呀

user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: https://www.baidu.com/s?wd=crc16%E7%AE%97%E6%B3%95%E5%8E%9F%E7%90%86

user: user-0
content: 还有人知道些其他的吗

user: user-3
content: 校验是为了发现数据传输错误，为什么用CRC16，因为简单、快速、易于硬件实现，以太网、PCIe底层都使用CRC16用于检验数据传输的正确性
user-0 提问: Linux VSCode调试c语言出现“无法加载源”问题

回复:
user: user-1
content: 可能需要在launch.json中加入            "sourceFileMap": {                "src": "${workspaceFolder}/src"            },

user: user-2
content: 我也出现了相同的问题，现在解决了吗

user: user-0
content: 这帖子都快一年了哈哈哈哈哈哈，解决了解决了

user: user-2
content: 怎么解决的，大佬求教。

user: user-3
content: 怎么解决的啊 这问题

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

user: user-5
content: 眼不见为净。
user-0 提问: 用指针判断大小，为什出不来结果？

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

user: user-2
content: 这个代码的精神内核相当于： 宿舍老二（乙）身高没有老大（甲）的高。 后来发现老二的年龄弄错了，实际上他年龄更大，所以他才是老大，原来的老大应该是老二。 这和身高没啥关系呀。

user: user-3
content: if(*p1<*p2) {      p3=p1;    p1=p2;       p2=p3; }  这个swap（交换）只是交换了局部变量p1, p2里面的值（地址值），并没有把交换调用函数里的p1, p2指向的内存内容；

user: user-4
content: 深入学学指针和引用，以及函数作用域和返回值

user: user-5
content: 供参考：#include<stdio.h> void adjust1(int *p1,int *p2)//指针p1 p2作用域在本函数内，所以改变他们的值，                             //并不能传回给math1 math2,所以是无效的。 {     int *p3;     if( *p1 < *p2)     {         p3 = p1;         p1 = p2;         p2 = p3;     } }  void adjust2(int *p1,int *p2)//对指针所指向的值操作是有效的 {     int p3;     if(*p1<*p2)     {          p3 = *p1;         *p1 = *p2;         *p2 = p3;     } }  int main() {    int a1,a2,*math1,*math2;    math1=&a1;    math2=&a2;    scanf("%d %d",&a1,&a2);//scanf("%d%d\n",&a1,&a2);这里多了'\n'        adjust1(math1,math2);    printf("adjust1:%d %d\n",*math1,*math2);     adjust2(math1,math2);    printf("adjust2:%d %d\n",*math1,*math2);        return 0; }
user-0 提问: 找出二维数组中的最大值

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

user: user-0
content: 引用 1 楼 自信男孩的回复:#include <stdio.h>  #define N 100  int main() {     int a[N][N],n1,n2,i,j,max,t;     scanf("%d%d",&n1,&n2);            //输入数组的行和列     if (n1 > N)         n1 = N;     if (n2 > N)         n2 = N;     for(i=0;i<n1;i++)                 //输入数组         for(j=0;j<n2;j++)             scanf("%d",&a[i][j]);      max=a[0][0];     for(i=0;i<n1;i++)                 //找出数组中最大的数         for(j=0;j<n2;j++)             if(max<a[i][j])             {                 max = a[i][j];                 /*                 t=a[i][j];                 a[i][j]=max;                 max=t;                 */             }     printf("%d\n",max);               //输出数组中最大的数 } 供参考～ 多谢，这位大佬助我改正！

user: user-2
content: #include <stdio.h>  #define N 100  int main() {     int a[N][N],n1,n2,i,j,max,t;     scanf("%d%d",&n1,&n2);            //输入数组的行和列     if (n1 > N)         n1 = N;     if (n2 > N)         n2 = N;     for(i=0;i<n1;i++)                 //输入数组         for(j=0;j<n2;j++)             scanf("%d",&a[i][j]);      max=a[0][0];     for(i=0;i<n1;i++)                 //找出数组中最大的数         for(j=0;j<n2;j++)             if(max<a[i][j])             {                 max = a[i][j];                 /*                 t=a[i][j];                 a[i][j]=max;                 max=t;                 */             }     printf("%d\n",max);               //输出数组中最大的数 } 供参考～
user-0 提问: 求大神解决一道C语言问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <string.h>  int main(void) {     int i, n;     int j, m;     char s[100 + 1];     /*      *         ---      .  ---   ---  .   .  ---    ---   ---   ---   ---      *        |   |     |     |     | |   | |      |         | |   | |   |      *        |   |     |  ---   ---   ---   ---    ---      .  ---   ---      *        |   |     | |         |     |     |  |   |     | |   |     |      *         ---      '  ---   ---      '  ---    ---      '  ---   ---      *      *        ----- ----- ----- ----- -----  ----- ----- ----- ----- -----      */     int h[] = { 2,    0,    3,    3,    1,     3,    3,    1,    3,    3};     int v[] = { 4,    2,    2,    2,    3,     2,    3,    2,    4,    4};     int hs, vs;      assert(1 == scanf("%d", &n));     assert(n > 0);      for (i = 0; i < n; i++) {         assert(1 == scanf("%s", s));         m = strlen(s);         if (0 == m)             continue;         hs = 0;         vs = 0;         for (j = 0; j < m; j++) {             hs += h[s[j] - '0'];             vs += v[s[j] - '0'];         }         printf("%d %d\n", hs, vs);     }      return 0; }

user: user-3
content: 样例不给7，7的数码管字体有争议啊。
user-0 提问: 怎么用C程序读取文本文件，并把原始文件打印在屏幕上？

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

user: user-2
content: open -> read -> 处理 -> write

user: user-3
content: fopen(); fread()
user-0 提问: 求问这个结果是怎么得出的？能讲解一下吗？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 出题者的意图是考察小端字节序。 然而相差1字节的两个指针要强制转换类型，我怀疑至少有一个要产生总线对齐错误啊。
user-0 提问: 为什么结果是这样？？？求教！！！

回复:
user: user-1
content: #include "stdio.h" void main() {     printf("******************************\n");     printf("       1---------ADD(+)       \n");     printf("       2---------SUB(-)       \n");     printf("       3---------MUL(*)       \n");     printf("       4---------DIV(/)       \n");     printf("******************************\n");      }  //****************************** //       1---------ADD(+) //       2---------SUB(-) //       3---------MUL(*) //       4---------DIV(/) //****************************** //请按任意键继续. .

user: user-2
content: 你都\n回车了，又加空格不是有毒吗

user: user-3
content: printf("******************************\n"            "       1---------ADD(+)       \n"            "       2---------SUB(-)       \n"            "       3---------MUL(*)       \n"            "       4---------DIV(/)       \n"            "******************************\n");

user: user-4
content: 前一个\n后面那些空格理所当然地被挤到下一行开头了。
user-0 提问: HELP

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 最好还是自己写，迟早的事

user: user-3
content: 引用 2 楼 qzjhjxj 的回复:供参考：#include<stdio.h> #include <math.h>  int is_prime(int n);  int main() {     int i,cnt =0,sum=0;     for (i=1000;i<=9999;i++){         if (is_prime(i)) {             cnt++;             sum += i;             printf("%-6d%c", i,cnt%10 ? ' ':'\n');         }     }     printf("\ncount=%d,sum=%d",cnt,sum);          return 0; }  int is_prime(int n) {     int i;     if (n <= 1)         return 0;     for (i = 2; i <= sqrt(n); i++) {         if (n % i == 0)             return 0;     }     return 1; }我一点都不赞成给这样的贴子回帖。发这种贴子的多半时学生，这么轻易的告诉他们答案岂不是害了他们。

user: user-4
content: 供参考：#include<stdio.h> #include <math.h>  int is_prime(int n);  int main() {     int i,cnt =0,sum=0;     for (i=1000;i<=9999;i++){         if (is_prime(i)) {             cnt++;             sum += i;             printf("%-6d%c", i,cnt%10 ? ' ':'\n');         }     }     printf("\ncount=%d,sum=%d",cnt,sum);          return 0; }  int is_prime(int n) {     int i;     if (n <= 1)         return 0;     for (i = 2; i <= sqrt(n); i++) {         if (n % i == 0)             return 0;     }     return 1; }

user: user-5
content: 网上很多例子，自己下载下来试试，改一改。总得自己动动手吧
user-0 提问: help

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 不建议当伸手党呢～
user-0 提问: C语言求解

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

user: user-2
content: 娃，好好学习，论坛里面时答疑解惑的，没人帮你做题。
user-0 提问: vc 问题，为什么输出这样的结果？

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

user: user-2
content: 如果你是要用冒泡排序，可以写成 for (l = 0; l < 5; l++)     {         for (n = 0; n < 5 - l - 1; n++)         {             if (a[n] > a[n + 1])             {                 k = a[n];                 a[n] = a[n + 1];                 a[n + 1] = k;             }         }     }

user: user-2
content: 这是冒泡排序吗？看的我一愣一愣的

user: user-3
content: a[n+1]下标越界
user-0 提问: 纯小白，请问大佬在VScode上配置c语言环境时出现这种情况怎么解决

回复:
user: user-1
content: 把F5扣下来

user: user-2
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-3
content: 引用 4 楼 weideha 的回复:我摁F5运行就会自动跳到调试控制台，有什么办法点F5时不会跳到调试控制台吗 你把左边的调试控制台，鼠标左键按住“调试控制台”几个字，然后拖动它到屏幕下面，然后就能看到一排好几个tap，切到“输出”窗口

user: user-0
content: 我摁F5运行就会自动跳到调试控制台，有什么办法点F5时不会跳到调试控制台吗

user: user-4
content: 没什么问题，你没有断点，程序执行完毕，退出状态为0表示程序正常退出。你要是想看输出，应该把调试控制台那儿切到终端窗口

user: user-3
content: 遇到啥问题了？看起来是好的呀

user: user-0
content: 大佬们帮个忙吧
user-0 提问: 想走嵌入式方向，大佬有建议吗

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

user: user-2
content: 嵌入式前景好，因为和硬件结合紧密，所以你嵌入式学到的技术都是实打实的，包括程序和电路方面

user: user-0
content: 听你们这样说前景不好呀

user: user-3
content: 对学生来说，如何学一门知识往往都是简单的问题，真正的问题在于大方向的把握。 所以，建议你看看来自己学校招聘的单位，然后考虑要不要考研，再考虑要不要报辅导班

user: user-4
content: 嵌入式方向可以进一步分硬件方向和软件方向。 硬件方向：看数据手册，设计电路等等。 软件方向：和PC没本质区别。 如果是小项目，纯裸机程序。硬件电路和裸机驱动，也可能一个人搞定。。

user: user-5
content: 嵌入式内地发展缓慢，建议去深圳，嵌入式门槛高，得有过硬水平

user: user-6
content: 浏览一下本网页下面CSDN自动生成的博文。
user-0 提问: C语言：二进制数转换为十进制数

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

user: user-0
content: 多谢，楼客们！！！

user: user-2
content: 如果不调用现成函数要自己写的话就要写函数式的，本示例适用任意进制。    十六进制的话：fa += x * 乘方(16, c++)；

user: user-3
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-4
content: 当输入超过5位时，计算出错，修改如下，供参考：#include <stdio.h> void main() {     int n,twn,ten=0,v=1;//权值     int a,b,c,d,e;     scanf("%d%d",&n,&twn);     b=twn;     while(n--){           a = b % 10;           ten += a*v;           v *= 2;           b /= 10;     }    /*if(n>4)     {         a=twn/10000;         b=twn%10000/1000;            c=twn%1000/100;         d=twn%100/10;         e=twn%10;         ten=a*16+b*8+c*4+d*2+e;        }     else if(n>3)     {         a=twn/1000;         b=twn%1000/100;         c=twn%100/10;         d=twn%10;         ten=a*8+b*4+c*2+d;           }     else if(n>2)     {         a=twn/100;         b=twn%100/10;         c=twn%10;         ten=a*4+b*2+c;     }     else if(n>1)     {         a=twn/10;         b=twn%10;         ten=a*2+b;     }     else if(n>0)     {         ten=twn;     }*/     printf("二进制序列(%d)的值为:%d\n",twn,ten);      }
user-0 提问: C语言系统问题

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

user: user-2
content: 这是没有打开项目，打开项目就可以了

user: user-3
content: 啊这，因为这是写c++的IDE，所以不能打开c语言系统

user: user-4
content: 鼠标点击左边SHIXUN，展开项目，找到源代码，双击。
user-0 提问: VC   error C2660: 'ge' : function does not take 3 parameters

回复:
user: user-0
content: 引用 4 楼 自信男孩的回复:#include <stdio.h> #include <math.h>  //void main() int main(void) {     double ge(double, double, double);     double a,b,c,d;     a=2;     b=5;     c=2;     ge(a,b,c); }  double ge(double a,double b,double c) {     double m;     m=(-b+sqrt(b*b-4*a*c))/2*a;     return(m); } 供参考～  函数声明有问题，楼主的声明更像调用，但是又加上了返回值，又不是函数调用。函数声明要确定参数，即使没有参数，建议用void。如果有参数，至少填上参数类型，参数名可以不用～ 好的👌了解了

user: user-0
content: 引用 2 楼 qzjhjxj的回复:问题见注释，供参考:#include"stdio.h" #include"math.h" void main() {     double ge(double a,double b,double c);//函数声明必须函数实现写法一致     double a,b,c,d;     a=2;     b=5;     c=2;     d=ge(a,b,c);     //函数返回赋值给d     printf("%f\n",d);//输出看结果      }  double ge(double a,double b,double c)//函数实现 {     double m;     m=(-b+sqrt(b*b-4*a*c))/2*a;     return(m); } okok谢谢大佬

user: user-0
content: 引用 1 楼 墨梅无痕的回复:void main() { double ge(); double a,b,c,d; …………  红色的这句是啥用意？ 我的声明有问题，get it

user: user-1
content: #include <stdio.h> #include <math.h>  //void main() int main(void) {     double ge(double, double, double);     double a,b,c,d;     a=2;     b=5;     c=2;     ge(a,b,c); }  double ge(double a,double b,double c) {     double m;     m=(-b+sqrt(b*b-4*a*c))/2*a;     return(m); } 供参考～  函数声明有问题，楼主的声明更像调用，但是又加上了返回值，又不是函数调用。函数声明要确定参数，即使没有参数，建议用void。如果有参数，至少填上参数类型，参数名可以不用～

user: user-2
content: double get（）。声明是没有参数的，后面调用的时候给了三个参数。

user: user-3
content: 问题见注释，供参考:#include"stdio.h" #include"math.h" void main() {     double ge(double a,double b,double c);//函数声明必须函数实现写法一致     double a,b,c,d;     a=2;     b=5;     c=2;     d=ge(a,b,c);     //函数返回赋值给d     printf("%f\n",d);//输出看结果      }  double ge(double a,double b,double c)//函数实现 {     double m;     m=(-b+sqrt(b*b-4*a*c))/2*a;     return(m); }

user: user-4
content: void main() { double ge(); double a,b,c,d; …………  红色的这句是啥用意？
user-0 提问: C语言中指针

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

user: user-2
content: m=1; n=2; r = &m; p=r; q=&n; 初始态是这样的，我帮你翻译下吧： p=p+1=r+1；到此结束，由于指针前没加解引用，因此这里是地址加1，此时p的值已经不是m的地址了。相当&m的地址基值，再加4个字节 再继续下去，其实p是个局部变量，对他再怎么改，也不会影响main函数的值，除非加上解引用，就是*  再看*q=*q+1，分2部分，一个看前面左值，一个看后面右值 *q=*(&n)=n ，于是得到*q为n   //*和&互为逆运算 *q+1=*(&n)+1=n+1 ，于是得到*q+1 为n+1 于是：*q=*q+1就相当于：n=n+1

user: user-3
content: 因为p = p +1是地址值加1，不是地址值指向的内容加1. 与此不同的*q = *q + 1;就是q指向的内容加1.
user-0 提问: 请问一下这个指针数组为什么一定要有大小才能运行出来啊？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 8 楼 lin5161678 的回复:引用 2 楼 paena 的回复:这样写：int** p = &test2;不行 好吧，前面我随手打了，sorry。 #include<stdio.h> int main() { 	int test2[9]={1,2,3,4,5,6,7,8,9}; 	int* p = test2; 	int** p1 = &p;  	for(int i=0;i<9;i++) 		printf("%d\n",*(*p1+i)); 	return 0; }

user: user-3
content: 引用 2 楼 paena 的回复:这样写：int** p = &test2;不行

user: user-4
content: &test2就基本上看成是二维数组了。因为test2是一维数组。  所以int (*p)[9] = &test2；后面的9是指该指针指向的是长度是9的数组。

user: user-4
content: 引用 1 楼 forever74 的回复:因为它就不是个指针数组 它是个指针，要正确赋值，必须类型兼容。 这是一个数组指针；数组指针和指针数组还是有区别的，要看谁修饰谁，数组指针，是数组修饰指针，最终的名字是指针，指针数组，是指针修饰数组，最终是数组，数组元素都是指针。

user: user-5
content: 事实上面对负责一些的编译器，这个程序如果改为int **p是会引出warning的，而程序员不应该只满足于消灭编译error。 那样的写法在后续操作中会出乱子的。

user: user-6
content: 这是数组指针，指向数组的指针。

user: user-7
content: 引用 楼主 qq_53317242的回复:这里（*p）【】里面必须要填上9才能运行出来，不填或者填更大都不可以，请问这是为什么啊？ 参见《C++程序设计精要教程》类型等价性证明。取test2的地址，相当于用一个指针指向test2, 而test2的定义int test2[9]=int (test2)[9]，故取test2的地址对应的类型为int(&test2)[9]=int(*)[9]，该类型应和被赋值的变量p的类型相同，即p应该定义为int (*)[9]类型，定义形式应为int (*p)[9]。设Q的类型为(*)，则p的类型int(*)[9]=int Q[9]，且因一维数组[9]可视为单重指针*，则int Q[9]=int *Q=int *(*)。鉴于两个*的优先级相同，且结合性为自右至左，故去掉( )并不影响运算顺序，即int *(*)=int **, 因此p的类型int (*)[9]=int**类型，故p也可以定义为int **p。

user: user-2
content: 这样写：int** p = &test2;

user: user-5
content: 因为它就不是个指针数组 它是个指针，要正确赋值，必须类型兼容。
user-0 提问: 洛谷新手村程序练习题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 楼主的代码，第一图和第二图差了输出的语句printf("%d", m); ，第二图当然没输出了，逻辑上没有错， for (j = 0; j < n-1; j++) 这里，应该是 for (j = 0; j < n; j++) 。

user: user-3
content: #include<stdio.h> #define MAX_SIZE 100 int main() { 	int n,num; 	int array[MAX_SIZE]; 	char isused[MAX_SIZE]; 	scanf("%d",&n); 	for(int i=0;i<n;i++) 		scanf("%d",&array[i]),isused[i]=0; 	num=0; 	for(int i=0;i<n-1;i++) 		for(int j=i+1;j<n;j++) 			for(int k=0;k<n;k++) 				if(isused[k]== 0 && array[k] == array[i]+array[j]) 					num++, isused[k] = 1; 	printf("%d",num); 	return 0;	 }

user: user-4
content: #include <stdio.h> #include <stdlib.h>  int main() {     int i, j, k, n;     int *arr, m = 0;      scanf("%d", &n);       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; i++) {         for (j = 0; j < n; j++) {             if (i == j)                 continue;             for (k = j+1; k < n; k++) {                 if (k == i || k == j)                     continue;                 if (arr[i] == arr[j] + arr[k]) {                     printf("%d = %d + %d\n", arr[i], arr[k], arr[j]);                     m++;                 }             }         }     }     printf("%d\n", m);     free(arr);      return 0; } 供参考～  试试这个版本～
user-0 提问: 请问哪里出错了,字符都是英文状态，实在找不到了，求教！！！！

回复:
user: user-1
content: 这么简单个程序，找不到就重新打一遍

user: user-2
content: printf("字符个数为：%d"，d);

user: user-3
content: 对啊，就是我早先说的那个逗号是中文的。

user: user-4
content: 最后一个printf中，d前面那个，改为,就行了

user: user-0
content: 多次验证没有字符大小写错误 求解！！！

user: user-0
content: 引用 1 楼 forever74 的回复:来，把文本复制过来。  #include"stdio.h" int nu()//求统计输入字符的个数 { int a; for(a=0;getchar()!='@';a++); return a; } main() { int d; d=nu(); printf("字符个数为：%d"，d); }

user: user-5
content: 貌似：你printf函数左括号是不是大一点。是不是有一边括号用中午输入法输入了。重新输入一遍试试。

user: user-3
content: 另外，把出错信息那个扁窗口向上滚动一下看看还藏着什么。

user: user-2
content: 供参考：#include <stdio.h> int nu() {    int a;    for(a=0;(getchar())!='@';a++);//注意这里的变化getchar()!='@'    return a; }  int main() {    int d;    d = nu();    printf("字符个数为:%d",d);//注意这行的符号及' )'       return 0; }

user: user-3
content: 来，把文本复制过来。
user-0 提问: 数据储存到文件为什么乱码？求大佬解答。

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 修正楼上第51行fscanf(fp,"%s %s %s %s %s %s",p1->number,p1->name,p1->sex,p1->age,p1->speciaity,p1->Class);

user: user-2
content: 楼主说的乱码，主要是最后的保存链表信息到文件并释放内存空间void Saveandfree()函数和文件信打开void Open()函数写入和读出的格式不同，对这两函数修改如下，问题见注释，供参考：//保存链表信息到文件并释放内存空间 void Saveandfree() {      TEL  *p=NULL;      FILE *fp;      char *Book="books.txt";      if (head==NULL){          printf("\n记录为空！\n");          return;      }      else p=head->next;      if ((fp=fopen(Book,"wb+"))==NULL){          printf("\n打不开文件!\n");          return;      }      while (p!=NULL){                     //保存信息            //fwrite(p,1,sizeof(TEL),fp); //这个写法是把结构体第7项 p->Telephone *next;也写入文件了                                          //所谓的乱码就是这部分的内容。            fprintf(fp,"%s %s %s %s %s %s ",p->number,p->name,p->sex,p->age,p->speciaity,p->Class);            p=p->next;      }      printf("保存完毕!");      fclose(fp);      //*****释放链表空间*****      for(;head->next!=NULL;){          p=head->next;          head->next=head->next->next;          free(p);      }      free(head); }  //文件信息输出到链表 void Open() {      FILE *fp;      TEL  *p1=NULL,*p2=NULL,*temp=NULL;      if ((fp=fopen("books.txt","rb+"))==NULL){         printf("\n****************这是一个新的学生信息管理系统******************\n");         return;      }      head=(TEL *)malloc(sizeof(TEL));      head->next=NULL;      temp=p2=head;      while (! feof(fp)){         //循环读取            p1=(TEL *)malloc(sizeof(TEL));            temp=p2;            p2->next=p1;            p2=p1;            //fread(p1,sizeof(TEL),1,fp); //对应的读出文件信息的方法也不一样            fscanf(fp,"%s %s %s %s %s %s",&p1->number,&p1->name,&p1->sex,&p1->age,&p1->speciaity,&p1->Class);      }      temp->next=NULL;      fclose(fp);               //关闭文件 }

user: user-3
content: 因为保存文件选的是wb也就是二进制文件，所以看上去是乱码
user-0 提问: C语言指针部分

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

user: user-0
content: 引用 1 楼 user-5的回复:n的地址固然不会变，但是n的值变了呀。 谢谢，明白了。。

user: user-0
content: 引用 2 楼 gouyanfen的回复:这个代码怎么看都是8吧 n=m; (*p)++; n不是改变了吗？ A00000:n的地址(值为A0000C) . . . A0000C:m起始地址 值1 A00010:                  值8  函数传入了n的址址 A00000 *p值类型为int 读取内容为A0000C 然后++ 结果为 A00010 存入到A00000 n的存放在址没变，指向变了 最后结果  地址:A00000: 存放内容 A00010 指向结果为8 谢谢我明白了

user: user-2
content: 因为n的地址向后偏移的一个元素的长度，因此n指向了m[1]的位置，因此是8；  注意(*p) ++即n++;因为*p和n指向的位置是相同的，且类型一样；

user: user-3
content: n=m           //指针指向数组m的首地址（m[0]的地址） testf(&n)    //指针移动到m[1]的地址

user: user-4
content: 这个代码怎么看都是8吧 n=m; (*p)++; n不是改变了吗？ A00000:n的地址(值为A0000C) . . . A0000C:m起始地址 值1 A00010:                  值8  函数传入了n的址址 A00000 *p值类型为int 读取内容为A0000C 然后++ 结果为 A00010 存入到A00000 n的存放在址没变，指向变了 最后结果  地址:A00000: 存放内容 A00010 指向结果为8

user: user-5
content: n的地址固然不会变，但是n的值变了呀。
user-0 提问: 请问错误在哪里，求教！！！

回复:
user: user-1
content: 出现中文的右括号了吧  建议注意下括号的中英文。  另外， main的返回值类型加一下，根据你的编译器来定，可以用void，也可以用int，根据你的编译器来定吧～

user: user-2
content: 看编译窗口的错误提示，error 那行告诉你错哪了

user: user-3
content: 你那行的 ) 是否是中文字符？ 猜的

user: user-4
content: 你的printf后面括号里中间部位的逗号太胖了，大概率是中文的。

user: user-4
content: 引用 2 楼 focuslight 的回复:你那行的 ) 是否是中文字符？ 猜的  如果括号是中文的，那么VC6这么老的编译器就不会认识它，只会用十六进制内码来表示它。
user-0 提问: 使用fprintf函数录入文件无法空格和换行是怎么回事

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

user: user-2
content: 好了，不要再猜了，可能性太多。 例如，如果他写入的是个.html文件，双击打开后本来就应该是这样子的。

user: user-3
content: 写文件时，与你打开文件时的方式相关，FILE *fp = fopen("filename","a")： r 打开只读文件，该文件必须存在。 r+ 打开可读写的文件，该文件必须存在。 w 打开只写文件，若文件存在则文件长度清为0，即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件，若文件存在则文件长度清为零，即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在，则会建立该文件，如果文件存在，写入的数据会被加到文件尾，即文件原先的内容会被保留。 a+ 以附加方式打开可读写的文件。若文件不存在，则会建立该文件，如果文件存在，写入的数据会被加到文件尾后，即文件原先的内容会被保留。

user: user-3
content: https://blog.csdn.net/weixin_44586473/article/details/90482476?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161499563416780357220048%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161499563416780357220048&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-90482476.pc_search_result_no_baidu_js&utm_term=devc%2B%2B+%E4%BD%BF%E7%94%A8fprintf%E5%87%BD%E6%95%B0%E5%BD%95%E5%85%A5%E6%96%87%E4%BB%B6%E6%97%A0%E6%B3%95%E7%A9%BA%E6%A0%BC%E5%92%8C%E6%8D%A2%E8%A1%8C

user: user-3
content: 引用 5 楼 ㌀㍿936 的回复:[quote=引用 1 楼 user-3 的回复:]供参考：{     fprintf(fp,"%s  %d\n",pMove->data.name,pMove->data.price);     pMove = pMove->next; } 我用的是dev c++ 与开发环境有没有关系？ [/quote]这段代码去试过了吗?和你用的dev c++与开发环境无关的。  参考：https://blog.csdn.net/shiroidea/article/details/113697496?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-0&spm=1001.2101.3001.4242

user: user-0
content: 引用 1 楼 user-3 的回复:供参考：{     fprintf(fp,"%s  %d\n",pMove->data.name,pMove->data.price);     pMove = pMove->next; } 我用的是dev c++ 与开发环境有没有关系？

user: user-0
content: 引用 1 楼 user-3 的回复:供参考：{     fprintf(fp,"%s  %d\n",pMove->data.name,pMove->data.price);     pMove = pMove->next; } 没用啊。。。

user: user-0

user: user-2
content: fopen在哪？

user: user-3
content: 供参考：{     fprintf(fp,"%s  %d\n",pMove->data.name,pMove->data.price);     pMove = pMove->next; }
user-0 提问: 指针指地址时，比如int型指针，但内存单元是1个字节，那这个int指针指的地址是4个字节中的第一个嘛？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 如果你所谓“第一个”是指地址值最小的那个字节。那么你说对了。

user: user-3
content: 可以这么理解，但是要注意大小端吧

user: user-4
content: 始终要用4个字节，如果指向的类型是一个字节，则指向连续的四个字节，因此，可能导致程序运行不正确或者崩溃
user-0 提问: 求解答

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: int i=0x12345678； //假定 &i的值为0x006FFC1C 在内存中按地址从小到大排列： 大端存储 0x006FFC1C：12 0x006FFC1D：34 0x006FFC1E：56 0x006FFC1F：78 小端存储 0x006FFC1C：78 0x006FFC1D：56 0x006FFC1E：34 0x006FFC1F：12

user: user-3
content: int类型指针指向的是4字节（32位系统）的首地址，你的第一个是指第一个字节吧，可以这么理解。但是注意考虑大小端问题，第一个自己的位置可能不一样～

user: user-4
content: int i = 1; 	int* pi = &i;   从上图可以看到，int的指针pi的值是0x6FFC1C，而这个地址中保存的是一个字节，即0x01

user: user-2
content: 啥叫第一个？ 如果意思是地址值最小的那个，那么这个int指针指的地址是4个字节中的第一个。
user-0 提问: 用51单片机来显示555计时器组成的多谐振荡器的频率。

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 查查计时器频率设置

user: user-3
content: .........................................................

user: user-4
content: 标准做法，用T0计时，时间到了就去数一下T1的脉冲计数嘛。

user: user-5
content: 引用 14 楼 user-6 的回复:NE555 的输出3Q 接的是 P3.5 T1（计时器1外部输入），可是程序貌似怎么操作T0呢？这个没错，T1对555的方波计数，然后利用T0中断将计数值输出，然后置位重新开始。问题应该12#所说为正解。

user: user-6
content: NE555 的输出3Q 接的是 P3.5 T1（计时器1外部输入），可是程序貌似怎么操作T0呢？

user: user-5
content: 中断函数修改，供参考：void timer0 () interrupt 1 {      TR0 = 0;      TR1 = 0;      TH0 = (65535-45872)/256;      TL0 = (65535-45872)%256;      bb  = TH1;      cc  = TL1;      TL1 = 0;      TH1 = 0;      TR0 = 1;      TR1 = 1; }

user: user-0
content: 引用 10 楼 qzjhjxj的回复:protues仿真软件里，单片机、晶振的工作频率都和代码里写的一样不，要设置一致才准确。 初始值和中断那里都改了，proteus里单片机的晶振频率是12mhz,可还是不行。

user: user-5
content: protues仿真软件里，单片机、晶振的工作频率都和代码里写的一样不，要设置一致才准确。

user: user-5
content: 这里的初始值和中断函数里的都一起改了吗？

user: user-0
content: 还是不行，没有变化

user: user-0
content: 引用 6 楼 qzjhjxj的回复:中断函数修改，供参考：void timer0 () interrupt 1 {      TR0 = 0;      TR1 = 0;      TH0 = (65535-45872)/256;      TL0 = (65535-45872)%256;      bb  = TH1;      cc  = TL1;      TL1 = 0;      TH1 = 0;      TR0 = 1;      TR1 = 1; } 好的，我试试，谢谢。

user: user-4
content: 换上pF级电容才能这么玩。

user: user-4
content: 一不留神就忽略了数量级。 你的电阻电容搞辣么大，频率搞得太低了。 不要忘了你只数了50毫秒脉冲然后乘了20来的。 一个9Hz的信号源你指望它在50毫秒内数到什么？ 数到什么都算误差。

user: user-0
content: 引用 3 楼 qzjhjxj的回复:定时器计算机器周期晶振如是:11.0592MHz，那么机器周期为12*(1/11059200)=1.09μm。若T=50ms那么N=50000/1.09=45872.代码里中断初值TH0和TL0的值是否准确？第43行TR1=0;//中断使能 ，这行是否要移到第41行前面。 移到41行前还是不行。

user: user-5
content: TMOD=0x51;定时器T0工作在定时50ms模式，50ms中断一次，执行中断函数里的语句。T1工作在计数模式,TH1存放由555产生的方波数高8位，TL1存放方波数的低8位，然后到中断里将值传给bb 和cc 。TR1=1，启动计数器T1工作，TR1=0，计数器T1停止工作。

user: user-5
content: 定时器计算机器周期晶振如是:11.0592MHz，那么机器周期为12*(1/11059200)=1.09μm。若T=50ms那么N=50000/1.09=45872.代码里中断初值TH0和TL0的值是否准确？第43行TR1=0;//中断使能 ，这行是否要移到第41行前面。

user: user-0
content: 引用 1 楼 forever74的回复:39行应该是interrupt 0吧？ 改成interrupt 0就都显示F000了

user: user-4
content: 39行应该是interrupt 0吧？
user-0 提问: 大佬赶紧进来

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 这是伪代码，什么编译器也编译不过去

user: user-3
content: 编译器不能看出来吧，C语言的编译器可以用C的，也可以用C++的。 具体是那种软件更看不出来了。

user: user-4
content: 我就说大学学编程应该先教 编译器/IDE以及开发环境搭建 吧，就应该去社会找在职工程师来讲课 你这个代码，一看就是C代码...
user-0 提问: 如何用for循环删除字符串后面星星

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 贴出你的代码～找到星星，直接用'\0'覆盖，如果后面的非星星继续要，则后面的往前覆盖～

user: user-3
content: #include <stdio.h> #include <string.h> int main() {     char s[]="abc*d**";     int i,L;     L=strlen(s);     for (i=L-1;i>=0;i--) {         if (s[i]=='*') s[i]=0;         else break;     }     printf("s:[%s]\n",s);//s:[abc*d]     return 0; }
user-0 提问: 子函数循环问题(KMP算法)

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 user-2的回复:原因见注释，供参考：#include <stdio.h> #include <string.h> #include <math.h> void getnext(char t[],int next[]) {     int j,k;     j=0;     k=-1;     next[0] = -1;     int d=strlen(t);//这里转换为有符号数     while(j < d-1){          if (k == -1||t[j] == t[k]){              j++;              k++;              next[j]=k;          }          else{             k=next[k];          }     } }  void KMPIndex(char t[],char s[],int next[]) {     int i,j;     i=0,j=0;     while(i<(int)(strlen(s)) && j<(int)(strlen(t))){ //问题所在                                     //strlen返回的是一个无符号整形数，不能和有符号数直接做运算比较          if(j == -1 || s[i]==t[j]){            i++;            j++;          }          else{            j=next[j];          }     }     if(j>=(int)strlen(t)){        printf("%d",i-(int)strlen(t));     }     else printf("ERROR"); }  int main() {     char t[101],s[1001];     int next[100];     scanf("%s %s",s,t);     getnext(t,next);     KMPIndex(t,s,next);          return 0; } 感谢解答，这点困扰了我一天了啊。我刚刚查了一下，不是说无符号数没法和这个数进行比较，而是说无符号数和有符号数进行比较时，会默认转成无符号数，再进行比较。

user: user-2
content: 原因见注释，供参考：#include <stdio.h> #include <string.h> #include <math.h> void getnext(char t[],int next[]) {     int j,k;     j=0;     k=-1;     next[0] = -1;     int d=strlen(t);//这里转换为有符号数     while(j < d-1){          if (k == -1||t[j] == t[k]){              j++;              k++;              next[j]=k;          }          else{             k=next[k];          }     } }  void KMPIndex(char t[],char s[],int next[]) {     int i,j;     i=0,j=0;     while(i<(int)(strlen(s)) && j<(int)(strlen(t))){ //问题所在                                     //strlen返回的是一个无符号整形数，不能和有符号数直接做运算比较          if(j == -1 || s[i]==t[j]){            i++;            j++;          }          else{            j=next[j];          }     }     if(j>=(int)strlen(t)){        printf("%d",i-(int)strlen(t));     }     else printf("ERROR"); }  int main() {     char t[101],s[1001];     int next[100];     scanf("%s %s",s,t);     getnext(t,next);     KMPIndex(t,s,next);          return 0; }
user-0 提问: 乱码

回复:
user: user-1
content: 引用 3 楼 互联网并非法外之地 的回复:引用 2 楼 赵4老师 的回复：static char w_content[64];可以说一下原理么 加static让w_content保存在全局数据区而非堆栈中。

user: user-0
content: 引用 1 楼 sevancheng 的回复：char w_content[64]; 是栈上的内存，  注释的部分是再堆上分配的内存，注意，你的内存没释放哦释放的话是释放调用后的那个char*吗，还是怎么释放

user: user-0
content: 引用 2 楼 赵4老师 的回复：static char w_content[64];可以说一下原理么

user: user-1
content: static char w_content[64];

user: user-2
content: char w_content[64]; 是栈上的内存，  注释的部分是再堆上分配的内存，注意，你的内存没释放哦

user: user-3
content: w_content是局部变量，返回局部变量的操作是未定义的。局部变量的作用域是其所在的函数，从定义开始到函数调用结束而结束，这是其生命周期。 因此，加static是改变其生命周期，让其声明周期变成程序结束而结束（从定义开始）；用堆上的空间，理由是其空间有用户（写代码的人）自己申请，自己决定什么时候释放，即生命周期是灵活的，但是如果程序退出，堆上的空间会被系统回收，释放。
user-0 提问: C语言播放音频错误

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #pragma comment(lib,"winmm.lib") #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <mmsystem.h> //首页 void firstpage() {     printf("欢迎进入贪吃蛇\n");     printf("w a s d 控制贪吃蛇移动方向\n");     printf("空格键进入游戏\n"); } //音乐 void myplaysound() {     PlaySound("D:\\邓紫棋 - 喜欢你",NULL,SND_FILENAME|SND_ASYNC); }  int main() {     firstpage();     myplaysound();     system("pause");     return 0; }