Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 为什么printf函数可以不匹配？scanf却不可以？

回复:
user: user-1
content: 引用 7 楼 weixin_45906870 的回复:那printf为什么没问题？[/quote] 测试了一下，以其猜测推断，不如实际代码跑一吧 解释都在注释里  int main() {     int b=17;     int a=15;     char c[4]={'0','1','2','3'};     char *p = (char*)&a;     //测试栈内存顺序     for(int i=0; i<4; i++) {//打印的是a的信息         printf("%02X", p[i]);     }     printf("\n");     for (int i=4; i>0; i--) { //打印的是c的信息         printf("%02X", *(p-i));     }     printf("\n");     for (int i=4; i<8; i++) { //打印的是b的信息         printf("%02X", p[i]);     }     printf("\n"); //说明入栈顺序是从高地址到低地址，即b在高地址，a在中间，c在低地址          p = (char*)&a;     memcpy(c, &a, 4);     printf("%08X\n", a); //直接打印a内存信息     for(int i=0; i<4; i++) { //用数组的方式打印a的内存信息，和直接打印a刚好相反         printf("%02X", c[i]);     }     printf("\n");     for(int i=0; i<4; i++) { //用指针方式打印a的内存信息，和直接打印a刚好相反         printf("%02X", p[i]);     }     printf("\n"); //说明直接打印int的内存信息，内存高低位地址会自动调整          printf("请输入字符：");     scanf("%c", &a); //以字符的方式输入，如果输入多个字符，比如65，则只能获得第一个字符的信息，即只取得‘6’，（‘5’丢失），所以这里会提示警告     printf("%08X\n", a);     for(int i=0; i<4; i++) {         printf("%02X", p[i]);     }     printf("\n");     printf("%c\n", a); //打印是因为会自动截取int的低位内存信息转成字符，所以不会出现问题     return 0; }

user: user-0
content: 引用 6 楼 qybao 的回复：那是因为你把输入信息存入了int地址的高位，导致int信息读取不正确，所以会提示警报。 你的做法相当于 int i; //相当于4个char的数组 char *p=(char*)&i; scanf(“%c”, p);//相当于存入了char数组第一个元素，也就是存入了int的高位地址 scanf(“%d”, &i)相当于scanf(“%c”, p+4);//相当于存入了char数组的第四个元素，也就是存入了int的低地址 比如你输入1，如果是scanf(“%d”, &i)，则i的内存信息为0x00000001（信息存入int的低位），如果scanf(“%c”, &i)，则i的内存为0x01000000（信息存入了int高位），可见两种结果是不同的，只有用”%d”才能保证结果正确，所以你用“%c”就会警报那printf为什么没问题？

user: user-1
content: 那是因为你把输入信息存入了int地址的高位，导致int信息读取不正确，所以会提示警报。 你的做法相当于 int i; //相当于4个char的数组 char *p=(char*)&i; scanf(“%c”, p);//相当于存入了char数组第一个元素，也就是存入了int的高位地址 scanf(“%d”, &i)相当于scanf(“%c”, p+4);//相当于存入了char数组的第四个元素，也就是存入了int的低地址 比如你输入1，如果是scanf(“%d”, &i)，则i的内存信息为0x00000001（信息存入int的低位），如果scanf(“%c”, &i)，则i的内存为0x01000000（信息存入了int高位），可见两种结果是不同的，只有用”%d”才能保证结果正确，所以你用“%c”就会警报

user: user-2
content: 这个看编译器了clang/llvm中printf格式和参数不匹配也是有警告的

user: user-0
content: 引用 2 楼 自信男孩 的回复：scanf("%d", &i);     //输入大于128小于-128就会导致i越界了。所以会提示warning. printf("x=%c\n", x);    //%c输出，相当于输出x的一个字节（一般是低字节，因为小端系统）。没问题，不会导致越界或者溢出之类的。我改了，看回复，还是这样

user: user-0
content: int main() {     int i;     char x = 'A';      scanf("%c", &i);      //由小到大     printf("x=%d\n", x);         return 0; }  我改成由小到大，scanf还是报warning啊？？？printf还是没事啊？？？

user: user-3
content: scanf("%d", &i);     //输入大于128小于-128就会导致i越界了。所以会提示warning. printf("x=%c\n", x);    //%c输出，相当于输出x的一个字节（一般是低字节，因为小端系统）。没问题，不会导致越界或者溢出之类的。

user: user-4
content: 因为这里存在覆盖的可能，scanf("%d", &i);  因为是由大到小，地址被覆盖会导致内存错误，进而可能导致程序崩溃。  printf("x=%c\n", x);这里是输出，不存在内存被覆盖，只是会被截断。
user-0 提问: 纠错

回复:
user: user-1
content: 还有main直接在下面写就行了，不用上面定义下面写，而且你下面的还没有返回值

user: user-1
content: 你这是２２的阶乘加３２的阶乘，不是２的平方的阶乘加３的平方的阶乘 b=a*a; b=a*10+2;

user: user-2
content: #include<stdio.h>  long f2(int d) { 	long e = 1; 	int i; 	for (i = 1; i <= d; i++) 		e = e*i; 	return e;  }  long f1(int a) { 	int b; 	long c; 	b = 10 * a + 2; 	c = f2(b); 	return c; } int main() { 	int i; 	long s = 0; 	for (i = 2; i <= 3; i++) 		s = s + f1(i); 	printf("\ns=%ld\n", s); 	return 0; }  VS2015 C++环境调试

user: user-3
content: 把 b=a*a; 改成 b=10*a+a;
user-0 提问: 请教sqlapi++的使用方法

回复:
user: user-0
content: 是要把静态库的文件放在要建立的cpp文件的目录下吗？

user: user-0
content: 加了头文件之后，为什么说不能打开#include <SQLAPI.h>这个源文件呢

user: user-1
content: 把头文件路径包上，如果link错误，把lib加上

user: user-1
content: #include <SQLAPI.h>
user-0 提问: 一道c语言字符型数组的题目

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>  int main() {   int i;     char a[81]/*,b[81]*/;     fgets(a, 80, stdin);      if (strlen(a) < 80)         a[strlen(a)-1] = 0;     /*     for(i=0;a[i];i++)     { {if(a[i]>='A'&&a[i]<='Z')   //大括号不匹配吧，怎么连续两个左大括号？           b[i]='A'+'Z'-a[i];           else b[i]=a[i];}      }     if(strlen(a)==0) b[i]='\0';     printf("%s",b);     */      for (i = 0; a[i]; i++)         if (isupper(a[i]))             a[i] = 'Z' - (a[i]-'A');     puts(a);       return 0; } 供参考～

user: user-2
content: char a[81],b[81]={0}; 初始化一下b应该就可以
user-0 提问: 求助C语言循环结构实训题

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  int main() {     float stu[100];     double ave = 0.0;     double sum = 0.0;     int i = 0;     while (1)     {         scanf("%f", &stu[i]);         if (stu[i] != -99){             sum += stu[i];             i++;             ave = sum / i;         }         else             {             printf("%f\n", ave);             return 0;         }     }     return 0; }
user-0 提问: 求助C语言循环结构实训题

回复:
user: user-1
content: for example  int main() {     int i, n=20, score, total[5]={0};     printf("请输入20个人的成绩(用空格分开)：\n");     for (i=0; i<n; i++) {         scanf("%d", &score);         score = score/10 - 5;         if (score < 0) score = 0;         else if (score > 4) score = 4;         total[score]++;     }     printf("60分以下的人数：%d\n", total[0]);     for (i=1; i<4; i++) {         printf("%d~%d分的人数：%d\n", (i+5)*10, (i+5)*10+9, total[i]);     }     printf("90分以上的人数：%d\n", total[4]);     return 0; }

user: user-2
content: 引用 3 楼 ?Victor.?? 的回复:[quote=引用 2 楼 山雨。 的回复:] 结帖给1L  咋又跑这来了 [/quote]混一下技术分，发现要么有人答了，要么题目都看不下去

user: user-3
content: 引用 2 楼 山雨。 的回复:结帖给1L  咋又跑这来了

user: user-2
content: 结帖给1L
user-0 提问: 大一很简单的关于指针和数组的问题，求助

回复:
user: user-0
content: 引用 2 楼 自信男孩的回复:这是一个指针数组，注意修饰词指针，被修饰是数组。因此这个变量是一个数组，成员（元素）是指针。数组长度（即指针个数）由初始化的字符串常量个数决定。因此有几个字符串，长度就是几。  指针数组对应的是数组指针，谁修饰谁，这个要注意。  数组指针; char arr[5][5]; char (*p)[5] = arr;    //p就是数组指针。 谢谢。。。。

user: user-1
content: 这是一个指针数组，注意修饰词指针，被修饰是数组。因此这个变量是一个数组，成员（元素）是指针。数组长度（即指针个数）由初始化的字符串常量个数决定。因此有几个字符串，长度就是几。  指针数组对应的是数组指针，谁修饰谁，这个要注意。  数组指针; char arr[5][5]; char (*p)[5] = arr;    //p就是数组指针。

user: user-2
content: 这是一个指针数组，也就是数组的元素是个指针，数组第一个元素指向“Batteries”常量字符串，第二个元素指向“Bulbs”常量字符串，第三个元素指向“Fuese”常量字符串，
user-0 提问: 求大佬帮我看看这两段代码哪里不同？为什么算出的结果不一样？

回复:
user: user-0
content: 十分感谢

user: user-1
content: #include <stdio.h> #include <math.h>  int main() {     double a=0,b=0;     int year;      for (year=1; a>=b; year++)     {         a = 10000+10000*0.1*year;         b = 10000*(pow((1+0.05), year));         if (a < b)             break;     }      printf("%d年后，黑夜的投资额超过小甲鱼！\n", year);   //28年     printf("小甲鱼的投资额是：%.2lf\n", a);     printf("黑夜的投资额是：%.2lf\n", b);      return 0; } 供参考～  因为这个里面a < b之后year++还是会自增1.
user-0 提问: C语言计算小数精度问题

回复:
user: user-1
content: 引用 6 楼 zhendeguofenle 的回复:[quote=引用 5 楼 nice_cxf 的回复:] 大小差距接近千分之三，肯定不是精度问题，核对下是不是那里计算有错误？ double运算精度不可能差这么多 计算没问题，只有这一个数差这么多，其他的都很准，至少有十一位精度[/quote] 感觉不太可能，你可以加一些临时变量一步一步核对下看看哪里的问题，浮点计算应该不会有这种问题，double才3个有效位，不太应该

user: user-0
content: 引用 1 楼 自信男孩 的回复:后面的计算中，是否可以考虑省略获取b的过程，比如1/3.0不用0.33333而用1/3.0呢？ 本来是没有b这个参数的，是我排错的时候自己加的输出，这个b是个除数，至于你说的不用0.3333而用1/3.0，我不就是这么用的吗，没用0.3333啊，我不是这个专业的，只是本科学过c语言，加上自学一点，可能有些基础知识不清楚，希望你能说清楚一点

user: user-0
content: 引用 5 楼 nice_cxf 的回复:大小差距接近千分之三，肯定不是精度问题，核对下是不是那里计算有错误？ double运算精度不可能差这么多 计算没问题，只有这一个数差这么多，其他的都很准，至少有十一位精度

user: user-1
content: 大小差距接近千分之三，肯定不是精度问题，核对下是不是那里计算有错误？ double运算精度不可能差这么多

user: user-0
content: 引用 3 楼 qybao 的回复:[quote=引用 2 楼 zhendeguofenle 的回复:]  本来是没有b这个参数的，是我排错的时候自己加的输出，这个b是个除数，至于你说的不用0.3333而用1/3.0，我不就是这么用的吗，没用0.3333啊，我不是这个专业的，只是本科学过c语言，加上自学一点，可能有些基础知识不清楚，希望你能说清楚一点 1L的意思可能是说通分 即 b = Cpd *dend *(r *r *r - (r - nr)*(r - nr)*(r - nr)) / 3.0 + kd *nt *(r *r + (r0 - nr)*(r0 - nr)) / nr; 等价于 b = (Cpd *dend *(r *r *r - (r - nr)*(r - nr)*(r - nr)) ) + 300000*(kd *nt *(r *r + (r0 - nr)*(r0 - nr)))) / 3.0;  也就是nr也变成分母为3.0，先计算总和最后再除以3.0 计算过程中减少精度丢失，或许一定程度上能保证一定的精度吧 我觉得你可以考虑一下第三方提供的高精度类型或自己实现一个高精度类型 如GCC Quad-PrecisionMath Library(简称为quadmath)提供的__float128 或者boost lib的cpp_dec_float 自己实现的话，可以参考 https://blog.csdn.net/housisong/article/details/525215   [/quote]好的，通分的意义是在于将小数变大先进行计算再变小对吧，至于高精度类型我去看看，谢了

user: user-2
content: 引用 2 楼 zhendeguofenle 的回复:本来是没有b这个参数的，是我排错的时候自己加的输出，这个b是个除数，至于你说的不用0.3333而用1/3.0，我不就是这么用的吗，没用0.3333啊，我不是这个专业的，只是本科学过c语言，加上自学一点，可能有些基础知识不清楚，希望你能说清楚一点 1L的意思可能是说通分 即 b = Cpd *dend *(r *r *r - (r - nr)*(r - nr)*(r - nr)) / 3.0 + kd *nt *(r *r + (r0 - nr)*(r0 - nr)) / nr; 等价于 b = (Cpd *dend *(r *r *r - (r - nr)*(r - nr)*(r - nr)) ) + 300000*(kd *nt *(r *r + (r0 - nr)*(r0 - nr)))) / 3.0;  也就是nr也变成分母为3.0，先计算总和最后再除以3.0 计算过程中减少精度丢失，或许一定程度上能保证一定的精度吧 我觉得你可以考虑一下第三方提供的高精度类型或自己实现一个高精度类型 如GCC Quad-PrecisionMath Library(简称为quadmath)提供的__float128 或者boost lib的cpp_dec_float 自己实现的话，可以参考 https://blog.csdn.net/housisong/article/details/525215

user: user-3
content: 后面的计算中，是否可以考虑省略获取b的过程，比如1/3.0不用0.33333而用1/3.0呢？
user-0 提问: VS2015编译github项目出现error LNK2019错误，请教如何解决？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:没有相应的头文件被包含进来  你好，我已经按照网上的方法，设置了libdcadec.lib的位置了，但还是不行。请教如何把头文件被包含进来呢？

user: user-1
content: 没有相应的头文件被包含进来
user-0 提问: 跪求大佬帮我看看这段代码

回复:
user: user-1
content: a~z 和 A~Z对应的ASCII码你搞反了   正确的判断条件下将输出相反的字符  所以如果用字母  答案是对的  改为数字 答案就错了  而且你第三个putchar(ch);应该在else条件内，与前面2个条件应该并列才对

user: user-1
content: 理论上来说 没有任何区别滴   但是从你的代码来说   区别还是很大滴
user-0 提问: c语言怎么从txt读取数字，并赋值为变量

回复:
user: user-1
content: 读写配置一般用ini文件，有专门的api  GetPrivateProfileString();  WritePrivateProfileString();

user: user-2
content: 直接fread之后，用atoi不就可以了。。。

user: user-3
content: 引用 6 楼 轻箬笠 的回复:直接fread之后，用atoi不就可以了。。。 #include<stdio.h>  int main() {         FILE * file=fopen("1.txt","rb");         char ch_tmp[1024];         fread(ch_tmp,1024,1,file);         int num = atoi(ch_tmp);         fclose(file);         printf("num = [%d]\n",num);         return ( 0 ); }

user: user-4
content: fscanf()函数从流（stream）中读取数据，并将数据保存在指定的变量中。对于该函数的具体使用方法，请参考 《C++中scanf和printf系列函数简介》 希望能够帮到您！

user: user-5
content: 小白还是从ini配置文件读取开始吧。

user: user-0
content: 引用 4 楼 chxchxkkk 的回复:可以百度一下fscanf fscanf试过了不行

user: user-6
content: 可以百度一下fscanf

user: user-7
content: FILE * file=fopen("1.txt","rb"); int i; fread(&i,sizeof(int),1,file); fclose(file);

user: user-0
content: 引用 1 楼 user-7 的回复:fopen打开文件，然后fread读给变量比如i，fread(&i,....  有具体实例吗，小白表示不懂

user: user-7
content: fopen打开文件，然后fread读给变量比如i，fread(&i,....
user-0 提问: 求大佬们帮我解答一下选择填空题吧，我都不太看的懂

回复:
user: user-1
content: 第一个４次，第二个如果不对ｙ改变４次 首先你要知道循环中的后＋＋是循环体执行完ｘ＋１；这里的循环体执行玩是哪怕循环体是ｃｏｎｔｉｎｕｅ都算 知道＋＋后就正常去看，首先比较条件ｘ<２０，执行循环体，执行次数加１循环体x+=2；等同于ｘ＝ｘ＋２；改变ｘ的值，执行完ｘ＋＋ 相当于执行一次循环ｘ＋３，而三次后ｘ＝１９，满足条件，进入循环，再出来不满足，不再进入循环，所以是３＋１　４词 第二题，看判断条件有两个&&是并且，就是说有一个不满足就不行，所以次数是两个条件中最少的那个，跟短板效应差不多。然后看后面是ｘ＋＋，只对ｘ操作，每次加一，所以就是相当于求ｘ加几次之后就不满足ｘ<４的条件了，ｘ＝０（＋＋），ｘ＝１（＋＋），ｘ＝２（＋＋），ｘ＝３（＋＋），４不满足不进入循环

user: user-2
content: C,D,C,A,B,D,B,C,4,-1 不用谢

user: user-3
content: 第一个执行4次

user: user-0
content: 最好有解题步骤和思路
user-0 提问: Linux守护进程拉起qt程序，qt程序启动异常

回复:
user: user-0
content: 问题解决了 原因是env环境变量在守护进程或者service启动的情况下DISPLAY环境变量是未设置的 所以导致界面资源无法加载

user: user-1
content: 请问试过在非root用户下调用吗？我现在是root用户下设置该环境变量后能调用成功，但在非root用户下，即使设置了环境变量也依然报错。

user: user-2
content: qt程序是需要界面支持的，这个我怎么感觉有点类似在远程登入上（比如crt这种工具上）启动QT程序，他是不行的会报错。

user: user-0
content: 引用 5 楼 非弋 的回复:可以测试一下：在图形界面下直接启动守护进程，观察Qt程序是否启动成功，如果是成功的，那么和守护进程无关。 延时10s再启动Qt程序是为了确保桌面环境已启动，然后这时再启动Qt程序。 谢谢您的回复， 现在这个问题定位出来了 但是结局方案还是没有；问题出在service上  用这个工具启动就是重启虚拟机后启动守护进程服务的方式，貌似这种方式 没权限获取界面资源，所以导致qt程序进了main 主函数但是没办法实例化qapplication

user: user-3
content: 可以测试一下：在图形界面下直接启动守护进程，观察Qt程序是否启动成功，如果是成功的，那么和守护进程无关。 延时10s再启动Qt程序是为了确保桌面环境已启动，然后这时再启动Qt程序。

user: user-0
content: 引用 3 楼 非弋 的回复:你可以测试一下是不是启动顺序的问题，比如在守护进程中延时10s再启动Qt程序。 以前有做Qt程序在Linux下的开机自启动，方式是：在安装包（rpm、deb）中添加/etc/init.d脚本，但是Qt程序有时启动失败，后来将脚本的run level降到最低就一直是成功的，猜测是Qt程序在桌面环境启动之前启动  谢谢您的回复，但是我这个功能就是在守护进程完全启动后，有监控系统有特殊操作才会调用qt 程序的 所有顺序应该是没有问题的，我定位出来的情况是 只有重启后的守护进程 在拉起qt的时候才会异常，就好像某种资源加载不了一样，有没有可能是守护进程（服务）没有办法加载界面资源？  这种问题真难唉！！

user: user-3
content: 你可以测试一下是不是启动顺序的问题，比如在守护进程中延时10s再启动Qt程序。 以前有做Qt程序在Linux下的开机自启动，方式是：在安装包（rpm、deb）中添加/etc/init.d脚本，但是Qt程序有时启动失败，后来将脚本的run level降到最低就一直是成功的，猜测是Qt程序在桌面环境启动之前启动

user: user-0
content: 不行 一手动启动gdb dump core就正常了，这种工具没办法定位，只有重启机器让守护进程拉起的时候才会出现这问题

user: user-4
content: 可以去看一下qt程序的coredump文件，死在什么地方
user-0 提问: 求助C语言循环结构实训题

回复:
user: user-0
content: 引用 楼主 Ruking0507 的回复:111

user: user-1
content: 三个循环 int main() {     int x,y,z;     for(z=5;z<1002;z++) { //z至少比x大2，所以x是1000，z就是1002         for (y=4;y<z;y++) { //保证y小于z             for (x=3;x<y;x++) { //保证x小于y                 if (x*x+y*y==z*z) { //满足表达式则输出                     printf("%d^2+%d^2=%d^2\n", x, y, z);                 }             }         }     }     return 0; }

user: user-2
content: for(int i=1;i<1000;i++){     for(int j=i+1;j<1000;j++){        for(int k=j+1;k<1000;k++)           if(i*i + j*j == k*k){               printf();      }   } }

user: user-3
content: 引用 楼主 Ruking0507 的回复:  #include <stdio.h> void ggs(int maxnum) { 	for(int i=2;i<maxnum;i++) 	{ 		for(int j=i;j<maxnum;j++) 		{ 			for(int k=j;k<maxnum;k++) 			{ 				if(i * i + j* j == k*k) 				{ 					printf("勾股数为:%d %d %d\n",i,j,k); 				} 			} 		} 	} }  int main() { 	ggs(1000); 	return 0; }

user: user-3
content: 可以用三层循环来实现，不过可能效率低了一点
user-0 提问: 一个c语言程序没有错误，但是运行不出来

回复:
user: user-1
content: void choice()      //用于输出信息功能选择 {     int c;     printf("请选择接下来想做什么\t1>返回菜单\t2>退出系统    [ ]\b\b");     scanf("%d",&c);     if(c==1)         menu();     else         exit(0);     //puts('\n');     putchar('\n'); } 建议查一下文件读操作～

user: user-2
content: fscanf(fp,"%d %d %d",&ss[n].sid,&ss[n].pid,&ss[n].sn);试试

user: user-3
content: for(n=0;!feof(fp);n++) 		{ 			fscanf(fp,"%d %d %d\n",&ss[n].sid,&ss[n].pid,&ss[n].sn); 		} // 这里有问题
user-0 提问: 求解

回复:
user: user-1
content: char* fstrcat(char *s,char *t) { 	int i=0; 	char* temp = s; 	char* temp2 = t; 	while(*temp != '\0') 	{ 		i++; 		temp++; 	} 	while(*temp2) 	{ 		s[i++]=*temp2; 		temp2++; 	} 	s[i]='\0'; 	return s; }

user: user-2
content: 供参考  #include <stdio.h> #include <stdlib.h>  //字符串拼接 char *fstrcat(char *s, char *t); //字符串拷贝 char *fstrcpy(char *s, char *t); //字符串比较 int fstrcmp(char *s, char *t); //字符串长度 int fstrlen(char *s);  int main() {     int j, k;     char s1[100], s2[100], s3[100], s4[100];     char *p = s3;     char *q = s4;     printf("\n输入第一个字符串：");     scanf("%s", s1);     printf("\n输入第二个字符串：");     scanf("%s", s2);      p = fstrcat(s1, s2);     printf("\n拼接后的字符串：%s\n", p);      q = fstrcpy(s1, s4);     printf("\n复制后字符串：%s\n", q);      j = fstrcmp(s1, s2);     if ( j == 1)         printf("[%s]比[%s]大\n", s1, s2);     else if (j == 0)         printf("[%s]与[%s]相等\n", s1, s2);     else         printf("[%s]比[%s]小\n", s1, s2);      k = fstrlen(s1);     printf("[%s]的长度是： %d\n", s1, k);      return 0; }  //字符串拼接 char *fstrcat(char *s, char *t) {     int i = 0, j = 0;      while ( s[i] != '\0')     {         i++;     }     j = i;     i = 0;     while (t[i] != '\0')     {         s[j++] = t[i++];     }     s[j] = '\0';      return s; }  //字符串拷贝 char *fstrcpy(char *s, char *t) {     int i = 0;      while ( s[i] != '\0')     {         t[i] = s[i];         i++;     }     t[i] = '\0';      return t;  } //字符串比较 int fstrcmp(char *s, char *t) {     int i = 0;     while (s[i] != '\0' && t[i] != '\0')     {         if (s[i] > t[i])             return 1;         else if (s[i] == t[i])             return 0;         else             return -1;         i++;     } } //字符串长度 int fstrlen(char *s) {     int i = 0;      while ( s[i] != '\0')     {         i++;     }     return i; }
user-0 提问: 求解

回复:
user: user-1
content: void sort(int *a,int n) { 	for(int i=0;i<n;i++) 	{ 		for(int j=i;j<n;j++) 		{ 			if(a[i] < a[j]) 			{ 				int temp = a[i]; 				a[i]=a[j]; 				a[j]=temp; 			} 		} 	} }
user-0 提问: 大佬们，帮我看看这段代码哪里错了？

回复:
user: user-1
content: 关于printf()函数的用法，请参考《C++中printf()函数的用法10-1》

user: user-2
content: “line1NL” 这种被双引号引起来的，不会识别NL的，这是一个字符串，没办法替换。

user: user-3
content: ASCII码都可以用“\”加数字（一般是8进制数字）来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符，如\0,\t,\n等，就称为转义字符，因为后面的字符，都不是它本来的ASCII字符意思了。 但是这里定义了一个宏，在“”里编译会把他看成一个字符串“Line1NL”,但是如果“Line1\n”时编译器会识别到“\”即转义字符也就会把“\n”看做换行符。

user: user-4
content: printf("Line1%c", NL);         printf("Line2%c", NL); 这样试试～

user: user-0
content: 自顶

user: user-5
content: 首先这里改一下#define NL "\n"  还有有两种用法可以达到你的效果， 1.         printf("Line1"NL);         printf("Line2"NL); 2.         printf("Line1%s",NL);         printf("Line2%s",NL);

user: user-0
content: 引用 1 楼 user-5 的回复：首先这里改一下#define NL "\n"  还有有两种用法可以达到你的效果， 1.         printf("Line1"NL);         printf("Line2"NL); 2.         printf("Line1%s",NL);         printf("Line2%s",NL);NL放在字符串中为什么不能被替换呢？
user-0 提问: 0xc0000005访问冲突，求大神帮忙

回复:
user: user-0
content: 引用 楼主 weixin_45985307的回复:void add(STAFF sta[],char *name,char *username,char *password) { 	int i=0,j=0; 	while (sta[j].staffID[0]!='\0') ++j; 	strcpy(sta[j].staffID,name); 	strcpy(sta[j].name,username); 	strcpy(sta[j].password,password); 	sta[j].compInsur=0; 	sta[j].staffInsurance=0; 	sta[j].staffSalary=0; 	sta[j].staffTax=0; 	sta[j].takeSalary=0; }    运行到sta[j].compInsur=0;就出现这个报错 第一调用这个函数没有报错，第二次调用的时候就报错了

user: user-1
content: 建议提供更多的信息（代码），根据错误判断很可能是内存溢出了（数组越界）

user: user-2
content: void add(STAFF sta[],char *name,char *username,char *password) {   int i=0,j=0;   while (sta[j].staffID[0]!='\0')    {     strcpy(sta[j].staffID,name);     strcpy(sta[j].name,username);     strcpy(sta[j].password,password);     sta[j].compInsur=0;     sta[j].staffInsurance=0;     sta[j].staffSalary=0;     sta[j].staffTax=0;     sta[j].takeSalary=0;     ++j;   } }

user: user-3
content: 是地址非法访问了，检查一下前面字符串的赋值操作
user-0 提问: 能帮我看看我这个 if-else-if 吗？

回复:
user: user-1
content: if的判断要分开写

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

user: user-0

user: user-2
content: if else if else if是第一种条件的判断 else if是对后面出现的不同的情况判断，但是这里判断的条件又不是剩下的所以情况的 else最后结尾是不用条件的，他的默认条件是排除上面列出的以外剩余的条件 ｃ中没有连比的用法，而是通过＆＆　｜｜连接一个是并且，一个是或者

user: user-0
content: 前面的都理解了，但还是轴在这里。。。

user: user-0
content: 谢谢啊，但是为什么最后else不加if且有条件的话要加；号？

user: user-3
content: int main() { 	int hight; 	scanf_s("%d", &hight); 	if (hight >= 180) 	{ 		printf("小明可以进入篮球队"); 	} 	else if (hight>=175)//--------else已经暗含hight<180了，因此可以把这个条件去掉---- 	{ 		printf("小明可以进入篮球队替补"); 	} 	else //------else已经暗含hight<175了，因此可以把这个条件去掉 	{ 		printf("小明不可以进入篮球队"); 	} 	return 0; }  VS2015 C++环境调试

user: user-4
content: 引用 5 楼 See-Victory 的回复: 最后的else没有带if，要么就不要条件

user: user-5
content: 第一个最后的else后面多了个分号

user: user-0
content: 好的，不懂就问， int main() {     int hight;     scanf_s("%d", &hight);     if (hight >= 180)     {         printf("小明可以进入篮球队");     }     else if (175 <= hight && hight < 180)     {         printf("小明可以进入篮球队替补");     }     else (hight < 175);     {         printf("小明不可以进篮球队");     }     return 0; } 结果：176 小明可以进入篮球队替补小明不可以进篮球队 改了一下： int main() {     int hight;     scanf_s("%d", &hight);     if (hight >= 180)     {         printf("小明可以进入篮球队");     }     else if (175 <= hight && hight < 180)     {         printf("小明可以进入篮球队替补");     }     else if(hight < 175)     {         printf("小明不可以进篮球队");     }     return 0; } 结果：176 小明可以进入篮球队替补 我在第三个else+if，怎么前后两个结果不一样？

user: user-5
content: 先不要怀疑软件的问题，先认为是自己的问题，找自己的问题比找软件的问题容易一些，可以改成这样   if (hight >= 180) 14     { 15         printf("小明可以进入篮球队"); 16     } 17     else if (175 <= hight && hight < 180) 18     { 19         printf("小明可以进入篮球队替补"); 20     } 21     else (hight < 175); 22     { 23         printf("小明不可以进入篮球队"); 24     }

user: user-5
content: 没有这种写法 (175 <= hight < 180)
user-0 提问: 关于大数据量排序问题

回复:
user: user-0
content: 引用 6 楼 user-1 的回复：你就用rand来模拟谢谢！指明了方向！

user: user-1
content: 你就用rand来模拟

user: user-0
content: 引用 3 楼 user-1 的回复：这个肯定不能手工输入，动态创建数组，比如int *arr =new int[100000] 或者 int *arr =malloc(100000*sizeof(int)); 然后赋值，可以是顺序的，也可以是随机的值请问创建数组之后怎样随机赋值呀，我记得有一次写过随机取数的代码

user: user-0
content: 请问创建一个大小为10000的整形数组之后怎么随机赋值呀

user: user-1
content: 这个肯定不能手工输入，动态创建数组，比如int *arr =new int[100000] 或者 int *arr =malloc(100000*sizeof(int)); 然后赋值，可以是顺序的，也可以是随机的值

user: user-0
content: 请问这怎么输入

user: user-1
content: 这里是个数的意思，就是说分别是100个，1000个，10000万个和100000个
user-0 提问: 用C语言实现如下功能，将片内RAM区40H的内容拆分，高4位送41H的低4位（高4位清0），低4位送42H的低4位（高4位清0

回复:
user: user-1
content: unsigned char *p = (unsigned char *)0x40;   *(p + 1) = *p >> 4;   *(p + 2) = *p & 15;
user-0 提问: C语言自定义头文件

回复:
user: user-1
content: 就是和建.c文件一样，后缀改成.h就是了

user: user-0
content: 引用 6 楼 user-2的回复:你就把文件的前三行代码移到length.h里面就可以了，也就是在同一个目录创建一个length.h文件 怎么创建？搞不懂

user: user-2
content: 你就把文件的前三行代码移到length.h里面就可以了，也就是在同一个目录创建一个length.h文件

user: user-0
content: 引用 4 楼 user-2的回复:你就把那些宏定义放到length.h头文件里面就好了 怎么放？新手不懂啊

user: user-2
content: 你就把那些宏定义放到length.h头文件里面就好了

user: user-0
content: 引用 2 楼 其实一开始我是拒绝的的回复:[quote=引用 1 楼 user-2的回复:]你没有length.h头文件，如果不需要，直接去掉那一行 题目是说要把宏定义改成头文件length[/quote] 没有那怎么办？

user: user-0
content: 引用 1 楼 user-2的回复:你没有length.h头文件，如果不需要，直接去掉那一行 题目是说要把宏定义改成头文件length

user: user-2
content: 你没有length.h头文件，如果不需要，直接去掉那一行
user-0 提问: 大神求教

回复:
user: user-1
content: 最后一张图放错了

user: user-1
content: 把图中的a，K（用大写的都得该）改一下  我用的是vs2019，scanf得改成scanf_s(好像是从vs2017)开始的。不是不用管。

user: user-2
content: 楼上正解，问题应该主要出在你的变量名上，上面用的是定义过得ｋ，下面使用的是没定义过的Ｋ，你的程序报错应该有报哪一行Ｋ没定义吧？

user: user-3
content: 引用 楼主 羌梧的回复:求问各位大神这个为什么会报错呀      int main(void) { 	int a = 0; //数量   	printf("请输入任意的数量\n"); 	scanf("%d",&a);  	int n[a];  	int k=0;//括号内 	printf("请输入任意的分数\n");	// printf()是输出函数，scanf()才是输入函数 	for(k=0;k<=(a-1);k++)  	{ 	scanf("%d", &n[k]);	// scanf()参数列表中注意 “&” 	 	}	  	for(k=0;k<=(a-1);k++) 	{  	if (n[K]<0 || n[K]>100)//排除小于0或大于100的情况 		printf("输入分数有误\n"); 	else if (n[K] <= 59)// 0 <= n <= 59  	 	printf("E\n");  	else if (n[K] <= 69)// 59 < n <= 69   		printf("D\n"); 	else if (n[K] <= 79)// 69 < n <= 79  		printf("C\n"); 	else if (n[K] <= 89)// 79 < n <= 89  		printf("B\n"); 	else if (n[K] <= 100)// 89 < n <= 100  		printf("A\n"); 	}  	return 0; } 把K换成k应该就好

user: user-4
content: int n[a];  ==》》c语言不支持这样定义数组，a得是个常量值。

user: user-5
content: int n[a];  ----------- 是这里错了吗？数据声明要用常量，不能用变量a

user: user-3
content: 报什么错？编译错还是运行错?
user-0 提问: 链串%c无法输出数据问题

回复:
user: user-1
content: 'abc'没有这样的字符，只有"abc"这样的字符串。一个字符是一个字节，'abc'是三个字符了。  如果是判断字符串，可以考虑这样： typedef struct Lnode {      char data[20];         struct Lnode *next; }Sq;

user: user-2
content: 请参考《C++中fflush()函数与rewind()函数》

user: user-2
content: Sq *s; int n; char a[20]; printf("please enter number:\n"); scanf("%d", &n); getchar()//------这里把回车符屏蔽了------------ if (n <= 0) printf("ERROR!");
user-0 提问: 输出生成乱码？

回复:
user: user-1
content: 字符串比较用strcmp，你用==是比较两个字符指针指向的地址是否相同 所以改成 if (strcmp(function,”y=x”)==0)//其它的if同样修改 另外，你的f函数都是if elseif 分支，如果这些分支都不满足，f就没有返回值了，所以f函数的最后最好加上return 0

user: user-2
content: 字符串比较不能这样用  if (function == "y=x") {  要用strcmp

user: user-3
content: 字符串比较需要调用字符串接口函数，strcmp/strncmp

user: user-4
content: 正如楼上两位朋友说的 #include <stdio.h> #include <string.h>//--------添加头文件，包含strcmp()函数-----  int f(char function[], int x) { 	if (strcmp(function,"y=x")==0) {//-------改为strcmp()函数，0表示两个值相等--------- 		return x; 	} 	else if (strcmp(function,"y=x^2")==0) {//-------改为strcmp()函数，0表示两个值相等--------- 		return x * x; 	} 	else if (strcmp(function,"y=x^3")==0) {//-------改为strcmp()函数，0表示两个值相等--------- 		return x * x * x; 	} } int main() { 	char func[10]; 	int x[100], y[100]; 	int i; 	scanf_s("%s", &func, 10); 	for (i = 0; i < 100; i++) { 		x[i] = i; 		y[i] = f(func, x[i]); 	} 	for (i = 0; i < 100; i++) { 		printf("%d %d\n", x[i], y[i]); 	}     return 0; } VS2015 C++环境调试
user-0 提问: C语言输入任意函数，在DOS窗口模拟运动轨迹

回复:
user: user-1
content: 引用 4 楼 Jennie Libra 的回复:[quote=引用 3 楼 user-2 的回复:] 你需要提前定义好输入函数，比如输入aaa对应的函数是fun1，输入bbb，对应函数fun2等，主要是要有对应表 我大概明白你意思了。但是这样是不是太繁琐了？毕竟我可以定义的函数有无数个啊[/quote] 那这样的话 你要设计定义一套语义分析系统，然后依照优先级顺序来计算

user: user-2
content: 引用 4 楼 Jennie Libra 的回复:[quote=引用 3 楼 user-2 的回复:] 你需要提前定义好输入函数，比如输入aaa对应的函数是fun1，输入bbb，对应函数fun2等，主要是要有对应表 我大概明白你意思了。但是这样是不是太繁琐了？毕竟我可以定义的函数有无数个啊[/quote]  如果要支持得好的话，也可以自己解析输入的内容，像编译器分析表达式一样。

user: user-0
content: 引用 3 楼 user-2 的回复:你需要提前定义好输入函数，比如输入aaa对应的函数是fun1，输入bbb，对应函数fun2等，主要是要有对应表 我大概明白你意思了。但是这样是不是太繁琐了？毕竟我可以定义的函数有无数个啊

user: user-2
content: 你需要提前定义好输入函数，比如输入aaa对应的函数是fun1，输入bbb，对应函数fun2等，主要是要有对应表

user: user-0
content: 引用 1 楼 user-2 的回复:什么意思？能描述具体一点吗？ 就是你输入一个函数，然后输出对应的坐标 举个例子：输入y=x^2,则输出（1，1），（2，4），（3，9）。。。

user: user-2
content: 什么意思？能描述具体一点吗？
user-0 提问: C语言期中作业   大佬进 急求

回复:
user: user-1
content: 题目要求很清楚啊，按要求一步步来呗。你是不会还是懒呢。或者说是哪一模块不会写？

user: user-2
content: 定义得还比较清楚，按照要求一步步去做就好

user: user-0
content: 害最近网课没怎么听，没用心学，一有作业才发现自己不会，拉下了挺多的，大佬帮帮我呗，作业马上要交了。。。
user-0 提问: 有个不兼容的32位的EXE文件，无法在WIN7 X64系统中运行，跪求解决办法

回复:
user: user-1
content: 不过版本不兼容也可能是老的32位软件，nero 7在win10上就不能运行

user: user-1
content: 引用 5 楼 Gerald_Huang 的回复:可以运行一些之前不行的EXE，不过这个正好不行。郁闷ING~~  这样的话，估计是DOS程序了。可以试试这个ntvdmx64：http://www.columbia.edu/%7Eem36/ntvdmx64.html 这个专门支持DOS程序的(但也不是100%)，实际上这些软件都是依据泄漏的windows源码中ntvdm部分修改的，微软本来应该做这个工作的，但是微软又偷懒又想甩包袱，就把win64中的dos和win16支持去掉了

user: user-2
content: 能不能兼容模式运行 ？

user: user-3
content: DosBox试试

user: user-0
content: 引用 3 楼 ooolinux 的回复:[quote=引用 2 楼 早打大打打核战争的回复:]应该是DOS或者win16软件，可以使用otvdm：https://github.com/otya128/winevdm/releases/download/v0.7.0/otvdm-v0.7.0.zip 只有6MB多一点，即装即用，在win64上对win16软件支持很好，也支持一部分DOS软件（但不是全部，尤其是32位DOS保护模式程序基本不能用）：  这东西不错，以前都是虚拟机装32位windows。[/quote]  可以运行一些之前不行的EXE，不过这个正好不行。郁闷ING~~

user: user-0
content: 引用 2 楼 早打大打打核战争 的回复:应该是DOS或者win16软件，可以使用otvdm：https://github.com/otya128/winevdm/releases/download/v0.7.0/otvdm-v0.7.0.zip 只有6MB多一点，即装即用，在win64上对win16软件支持很好，也支持一部分DOS软件（但不是全部，尤其是32位DOS保护模式程序基本不能用）：   试过了，不行。比较头大~~~

user: user-0
content: 引用 9 楼 早打大打打核战争 的回复:不过版本不兼容也可能是老的32位软件，nero 7在win10上就不能运行  估计是在DOS下编译出来的，很古老的系统上找到的，没有源程序，但又必须经常用，只能在XP 32位机上运行。现在系统升级了，用不了，正头疼着

user: user-0
content: 引用 8 楼 早打大打打核战争 的回复:[quote=引用 5 楼 Gerald_Huang 的回复:]  可以运行一些之前不行的EXE，不过这个正好不行。郁闷ING~~  这样的话，估计是DOS程序了。可以试试这个ntvdmx64：http://www.columbia.edu/%7Eem36/ntvdmx64.html 这个专门支持DOS程序的(但也不是100%)，实际上这些软件都是依据泄漏的windows源码中ntvdm部分修改的，微软本来应该做这个工作的，但是微软又偷懒又想甩包袱，就把win64中的dos和win16支持去掉了[/quote]  好的，准备下来试试，THX~~~

user: user-0
content: 引用 6 楼 ooolinux 的回复:DosBox试试  好的，下来试试。

user: user-3
content: 引用 2 楼 早打大打打核战争的回复:应该是DOS或者win16软件，可以使用otvdm：https://github.com/otya128/winevdm/releases/download/v0.7.0/otvdm-v0.7.0.zip 只有6MB多一点，即装即用，在win64上对win16软件支持很好，也支持一部分DOS软件（但不是全部，尤其是32位DOS保护模式程序基本不能用）：  这东西不错，以前都是虚拟机装32位windows。

user: user-1
content: 应该是DOS或者win16软件，可以使用otvdm：https://github.com/otya128/winevdm/releases/download/v0.7.0/otvdm-v0.7.0.zip 只有6MB多一点，即装即用，在win64上对win16软件支持很好，也支持一部分DOS软件（但不是全部，尤其是32位DOS保护模式程序基本不能用）：

user: user-4
content: 没有源码不太好办吧
user-0 提问: 跪求大佬讲解一下

回复:
user: user-1
content: 引用 6 楼 刚学c的超级超级超级菜鸟的回复:[quote=引用 5 楼 Jags 的回复：]运算方向从左到右; 一条条语句分析: 第一条:x<y? w:x  这一条是混淆你的，没啥用，因为逗号分割的语句都以最后一条语句为输出;(x<y?w:x,m=m<y )相当于两条语句: x<y? w:x; m=m<y; 第二条:m=m<y;  m<y为真，所以m=1，即(x<y?w:x,m=m<y )为真，进而取m，也就是1 第三条 m<z 为真，所以取m的值而不是z，而m的值为1  所以，最终输出为1第二条，为什么m<y为真呐[/quote] m 声明一般默认为0，这题出的也不严谨

user: user-1
content: 运算方向从左到右; 一条条语句分析: 第一条:x<y? w:x  这一条是混淆你的，没啥用，因为逗号分割的语句都以最后一条语句为输出;(x<y?w:x,m=m<y )相当于两条语句: x<y? w:x; m=m<y; 第二条:m=m<y;  m<y为真，所以m=1，即(x<y?w:x,m=m<y )为真，进而取m，也就是1 第三条 m<z 为真，所以取m的值而不是z，而m的值为1  所以，最终输出为1

user: user-0
content: 引用 5 楼 Jags 的回复：运算方向从左到右; 一条条语句分析: 第一条:x<y? w:x  这一条是混淆你的，没啥用，因为逗号分割的语句都以最后一条语句为输出;(x<y?w:x,m=m<y )相当于两条语句: x<y? w:x; m=m<y; 第二条:m=m<y;  m<y为真，所以m=1，即(x<y?w:x,m=m<y )为真，进而取m，也就是1 第三条 m<z 为真，所以取m的值而不是z，而m的值为1  所以，最终输出为1第二条，为什么m<y为真呐

user: user-0
content: 引用 1 楼 user-3 的回复：图片看不清楚若有w,x,y,z,m均为int型变量，且w=1;x=2;y=3;z=4;m=(w<y?w:x,m=m<y)?m:y;m=(m<z)?m:z;，则m值是（ ） 1 2 3 4

user: user-2
content: 你这个图让人看的费劲，百度一下三目运算符吧

user: user-3
content: 主要应该考的应该是？表达式

user: user-3
content: 图片看不清楚
user-0 提问: 求求大佬帮我看看我的代码哪里出了问题，心态崩了

回复:
user: user-1
content: #include "stdio.h" #include "stdlib.h" #include "string.h" #include "ctype.h" #include "malloc.h" int main() {     int n,x,j,k,l,m;     for(n=5;;n++) 	{         j=4*(n-1)/5;         k=4*(j-1)/5;         l=4*(k-1)/5;         m=4*(l-1)/5;         if(n%5==1&&j%5==1&&k%5==1&&l%5==1&&m%5==1) 		{             printf("至少合伙捕鱼：%d条\n",n);             break;         }     }     return 0; }
user-0 提问: 求大佬找一下错误 输出不了

回复:
user: user-1
content: 调试：在改变ｐｔ后把ｐｔ打印一下，这样就知道问题是在前面的函数，还是后面的了，这样逐步打印就则可以确定错误的位置了 还有一个很重要的就是，手动申请的内存空间最后都要去手动释放一下，不然会造成内存泄漏 printf("p[i]%d=%lf\n", i, p[i]);还有这句你是想printf("p[％ｄ]=%lf\n", i, p[i]);这样吧

user: user-2
content: 分配内存地方都要指明大小，比如pt = (double*)malloc(sizeof(double));
user-0 提问: 做C的作业，遇到了一些问题，望大佬们解答

回复:
user: user-0
content: gcc连接上了，谢谢大佬

user: user-0
content: 引用 1 楼 user-1 的回复：没有链接gcc的库大佬，gcc的库要怎么连接？本来这个程序是在VMware虚拟机的ubuntu系统里运行的，在ubuntu中也是报了这个错，但我对ubuntu不熟悉刚接触，所以我在dev c++里运行了，所以这个gcc连接在windows系统和ubuntu系统怎么连接？

user: user-0
content: 引用 2 楼 user-1 的回复：print应该是printf吧哈哈哈，最近写python写懵了，谢谢提醒

user: user-1
content: print应该是printf吧

user: user-1
content: 没有链接gcc的库
user-0 提问: C语言数组实验题

回复:
user: user-1
content: #include <stdio.h> int main(int argc,char const*argv[]) { 	int i=0; 	int a[10] = {0}; 	while(i < 10) { 		scanf("%d",&a[i++]);   //读入是个整数 	} 	int max = a[0], min = a[0]; 	for( i=9; i>=0; i--) { 		printf("%d ",a[i]);      //逆序输出 		if(a[i] > max) {      // 比较大小 			max = a[i]; 		}else if(a[i] < min) {    //比较大小 			min =a[i]; 		} 	} 	printf("\nmax = %d, min = %d", max, min); 	return 0; }

user: user-2
content: for example  int main() {     int i,j,k,a[10];     printf(“输入10个数：”);     for(i=0;i<10;i++)          scanf(“%d”, &a[i]);     j=k=a[9];     printf(“逆序输出：”);     for(i=9; i>=0; i--) {         printf(“%d “, a[i]);          if (a[i]>j) j=a[i];          if (a[i]<k) k=a[i];     }     printf(“\n最大值：%d, 最小值：%d”, j, k);     return 0; }

user: user-3
content: scanf读入10个数，然后排序(逆序指的是输入逆序的话，就不用排序)，比较大小，存一个最大值和最小值，最后输出
user-0 提问: 数据保存如何固定文件保存类型

回复:
user: user-1
content: 一般都这样写: char buf[32]; sprintf(buff,"%s.txt", fliename); printf("%s",buf);

user: user-2
content: char filename[32];      scanf("%s", filename);      strcat(filename, ".txt");      puts(filename); 供参考～
user-0 提问: 求大神解答

回复:
user: user-1
content: #include <string> #include <iostream>   using namespace std;   int main(int argc, char** argv) { int m=0,row=0,col=0; int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; 	m=a[0][0]; 	for(int i=0;i<3;i++) 	{ 		for(int j=0;j<4;j++) 		{ 			if(m < a[i][j]) 			{ 				m=a[i][j]; 				row=i; 				col=j; 			} 		} 	} 	printf("Max  is %d,row is %d, col is %d\n",m,row,col); 	return 0; }

user: user-2
content: int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}, idx_i, idx_j;      int i, j, max;      max = a[0][0];     idx_i = idx_j = 0;     for (i = 0; i < 3; i++)         for (j = 0; j < 4; j++)             if (a[i][j] > max) {                 max = a[i][j];                 idx_i = i;                 idx_j = j;             }      printf("a[%d][%d] = %d\n", idx_i, idx_j, max);  供参考～

user: user-1
content: 来个双层循环就可以
user-0 提问: 求大佬帮我看看这个基础题

回复:
user: user-1
content: n后面的\ 是一个续行符，表示续行符的下一行与续行符所在的代码是同一行，因为一条语句必须是一行。这就像楼上说的，方便阅读

user: user-2
content: 这里每一行最后的\表示一行字符串还没有结束，下面的行接着上面的字符串，为什么要这么写呢？因为如果全都写到一行，不太方便看，所以写到多行里面
user-0 提问: ACM输入问题

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:scanf("xxx", &xxx)  != EOF  windows下是输入快捷键: ctr+z Linux输入快捷键：ctr+d 这是在线的ACM，他会自动给你的程序输入，检查输出

user: user-1
content: scanf("xxx", &xxx)  != EOF  windows下是输入快捷键: ctr+z Linux输入快捷键：ctr+d

user: user-2
content: 因为scanf是一个有返回值的内置函数，返回值 == scanf读取的数字个数

user: user-3
content: scanf一个特殊字符作为结束，比如输入q再按回车你就认为输入结束了
user-0 提问: printf函数不能输出的问题

回复:
user: user-0
content: basic.h包含了各种需要的头文件 问题已经想明白了：close（1）关闭了stdout，即标准输出，printf函数输出到fd1打开的文件中了，想在屏幕上输出的话重新打开1即可

user: user-0
content: open是系统调用函数

user: user-1
content: open是自定义的函数吗

user: user-2
content: close(1); 是做什么的?

user: user-3
content: 说明打开文件失败了

user: user-4
content: 你的stdio.h呢？我没学过C，C++中printf必须要有stdio.h头文件的

user: user-5
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>  int main() {     int fd1;     int fd2;      fd1 = open("txxxx_est", O_CREAT|O_WRONLY, S_IRWXU);     if(fd1 < 0)     {         perror("open fail");         exit(-1);     }     //close(1);     printf("fd1 = %d\n", fd1);     //close(fd1);     fd2 = dup(fd1);     //printf("pass\n");     if (fd2 < 0)         puts(strerror(errno));     printf("fd2=%d\n",fd2);     //fflush(stdout);     return 0; } 供参考～  dup是The dup() system call creates a copy of the file descriptor oldfd, using the lowest-numbered unused file descriptor for the new descriptor.  所以，不要关闭fd1.不然，dup会执行失败～

user: user-6
content: 那说明没有运行到那里就结束了，这样的话基本应该是你打开文件不成功，你在ｉｆ里打印下ｆｄ看看，还有下面的ｃｌｏｓｅ应该是ｆｄ使用完关闭ｆｄ这个标识符吧？ｆｄ不一定是１的
user-0 提问: liunx C语言 静态double方法的调用问题

回复:
user: user-0
content: 引用 3 楼 chxchxkkk 的回复:main函数有double声明的吗 你看下

user: user-0
content: 现在的源码：  运行结果：

user: user-0
content: 声明了。现在是一片空白

user: user-1
content: main函数有double声明的吗

user: user-0
content: 没什么用

user: user-2
content: 把main和sqrtaa前面的static都去掉，没意义
user-0 提问: 关于信号的问题

回复:
user: user-0
content: 好的，谢谢您的回答

user: user-1
content: 引用 2 楼 qq_41176668 的回复:我在第二个for循环语句中已经把i置为0了，另外，第一个for循环结束后i为5，请您再想想  你的19行的for循环加了一个分号  删了就行了

user: user-1
content: 引用 3 楼 user-1 的回复:[quote=引用 2 楼 qq_41176668 的回复:] 我在第二个for循环语句中已经把i置为0了，另外，第一个for循环结束后i为5，请您再想想  请您去debug看看 或者printf看看i到底是多少[/quote]  是我看错了 抱歉

user: user-1
content: 引用 2 楼 qq_41176668 的回复:我在第二个for循环语句中已经把i置为0了，另外，第一个for循环结束后i为5，请您再想想  请您去debug看看 或者printf看看i到底是多少

user: user-0
content: 我在第二个for循环语句中已经把i置为0了，另外，第一个for循环结束后i为5，请您再想想

user: user-1
content: 和你的信号函数无关  你两个循环都用的i 第一个i循环结束后为4，所以第二个循环进去只执行一次
user-0 提问: 一个颠倒输出英文句子的程序

回复:
user: user-1
content: 引用 10 楼 拉普拉斯妖 的回复:运行结果有点问题，不过没关系，还是早点睡吧 抱歉，没看题 #include<stdio.h> #include<string.h>  void reverse(char* c); int main() { 	char a[80]={0}; 	puts("输入句子:"); 	gets(a); 	reverse(a); 	return 0; }  void reverse(char* c) { 	int i = 0, j, k, l = 0; 	while(c[i] != '.' && c[i] != '!' && c[i] != '?') 	{ 		i++; 	}  	char cc = c[i]; 	k = i;  	for(j = i; j > 0; j--)  	{  		if(c[j] == ' ')  		{  			l = j + 1;  			for(; l < k; l++)  			{  				printf("%c",c[l]); 			} 			printf("%c",' '); 			k = j; 		} 	} 	for(l = 0; l < k; l++) 	{ 		printf("%c",c[l]); 	} 	printf("%c",cc); }

user: user-0
content: 运行结果有点问题，不过没关系，还是早点睡吧

user: user-1
content: 引用 8 楼 拉普拉斯妖 的回复:[quote=引用 7 楼 ?Victor.??的回复:]https://blog.csdn.net/AFANTI_JK/article/details/104397975  看看这个，好像和你写的差不多 出了点问题，编译器说char[count][20]中的count下标是可变对像可能无法初始化，是个错误[/quote] #include<stdio.h> #include<string.h>  void reverse(char *pc) { 	int i=0,count=0,j=0,n=0,k=0; 	n=strlen(pc); 	for(i=0;i<n;i++) 	{ 		while(*(pc+i)>=97&&*(pc+i)<=122||*(pc+i)>=65&&*(pc+i)<=90) 		{ 			i++; 			if(*(pc+i)<65||*(pc+i)>90&&*(pc+i)<97||*(pc+i)>122) 			count++; 		} 	} 	char c[20][20]={0}; 	for(i=0;i<n;i++) 	{ 		while(*(pc+i)>=97&&*(pc+i)<=122||*(pc+i)>=65&&*(pc+i)<=90)//字母  		{ 			c[j+1][k]=*(pc+i); 			i++; 			k++; 			if(*(pc+i)<65||*(pc+i)>90&&*(pc+i)<97||*(pc+i)>122) 			{ 				j++; 				k=0; 				break; 			} 		} 	} 	c[0][0] = *(pc+n-1);//标点符号  	for(i=count;i>1;i--) 	{ 		printf("%s ",c[i]); 	} 	printf("%s%c",c[1],c[0][0]);  } int main() { 	char a[80]={0}; 	puts("输入句子:"); 	gets(a); 	reverse(a); 	return 0; }  改了一下，试试这个

user: user-0
content: 引用 7 楼 ?Victor.??的回复:https://blog.csdn.net/AFANTI_JK/article/details/104397975  看看这个，好像和你写的差不多 出了点问题，编译器说char[count][20]中的count下标是可变对像可能无法初始化，是个错误

user: user-1
content: https://blog.csdn.net/AFANTI_JK/article/details/104397975  看看这个，好像和你写的差不多

user: user-0
content: 谢谢你啦

user: user-1
content: 给分要到pc端结帖  没事，不重要  其实我写的那个也挺好理解的

user: user-0
content: 怎么给你积分啊

user: user-0
content: 目前小白水平

user: user-0
content: 有点复杂

user: user-1
content: #include<stdio.h> #include<string.h> void reverse(char *pc) { 	int i=0,count=0,j=0,n=0,k=0; 	char temp[20]={0}; 	n=strlen(pc); 	for(i=0;i<n;i++) 	{ 		while(*(pc+i)>=97&&*(pc+i)<=122||*(pc+i)>=65&&*(pc+i)<=90) 		{ 			i++; 			if(*(pc+i)<65||*(pc+i)>90&&*(pc+i)<97||*(pc+i)>122) 			count++; 		} 	} 	char c[count][20]={0}; 	for(i=0;i<n;i++) 	{ 		while(*(pc+i)>=97&&*(pc+i)<=122||*(pc+i)>=65&&*(pc+i)<=90)//字母  		{ 			c[j][k]=*(pc+i); 			i++; 			k++; 			if(*(pc+i)<65||*(pc+i)>90&&*(pc+i)<97||*(pc+i)>122) 			{ 				j++; 				k=0; 				break; 			} 		} 	} 	for(i=count-1;i>=0;i--) 	{ 		printf("%s ",c[i]); 	} } int main() { 	char a[80]={0}; 	puts("输入句子:"); 	gets(a); 	reverse(a);         return 0; }  图片也看不全~  我写了一个，你看看行不行
user-0 提问: Linux环境下，生成和使用动态链接库，使用库的时候报错找不到.h文件

回复:
user: user-0
content: 问题已找到： 工程结构方法不对。 正确做法分为两大步： 第一步： 1、生成动态链接库，放在某个目录下面  第二步： 2、自己新建一个.h文件，h文件中声明我即将要调用的动态链接库中的各种函数。 3、main函数文件中加入include上步骤中新建的.h 4、命令编译，同时指定库所在路径，命令如下：gcc main.c -o main -L ./../lib/ -lcaculate  -Wl,-rpath,$(pwd)/../lib/

user: user-1
content: 就用库本身的头文件就可以

user: user-0
content: 引用 1 楼 user-1 的回复:你这是编译的时候报错，把include路径加进去  感谢感谢，问题已找到，确实是include的问题。相当于我要使用动态链接库，得自己写个.h文件，里面声明我即将要调用的库里面的函数？

user: user-1
content: 你这是编译的时候报错，把include路径加进去
user-0 提问: c语言作业 大佬进 急求

回复:
user: user-1
content: https://github.com/sanguonaigao/2020_code/tree/master/84%E7%8F%AD/ContactFile/ContactFile 看看这个代码是否能帮到你 你可以稍微改造一下

user: user-2
content: 什么问题啊？关键是

user: user-0
content: 老哥谢谢了很棒

user: user-3
content: 午休时间帮写一份供参考  #include <stdio.h> #include <stdlib.h> #define N 5         //结构体数组长度  struct student {     char name[10];     int num;     int age;     char addr[30]; };  /* 输入 */ void input(struct student *p); /* 保存 */ void save(struct student *p); /* 载入 */ void load(); /* 读取特定学生信息 */ struct student get_stu(int n);  int main() {     struct student stu[N], stu_i;     int n;     input(stu);     save(stu);     load();     printf("\n获取第几个学生的信息：");     scanf("%d", &n);     stu_i = get_stu(n);     printf("\n姓名\t编号\t年龄\t住址\n");     printf("%s\t%d\t%d\t%s",stu_i.name, stu_i.num, stu_i.age, stu_i.addr);      getchar();     return 0; }  /* 输入 */ void input(struct student *p) {     int i;     for (i = 0; i < N; i++)     {         printf("输入第%d个学生的姓名 编号 年龄 住址：\n", i+1);         scanf("%s%d%d%s", p[i].name, &p[i].num, &p[i].age, p[i].addr);     } }  /* 保存 */ void save(struct student *p) {     int i;     FILE *fp;     if ((fp=fopen("student.txt", "w")) == NULL)     {         printf("不能保存文件！\n");         exit(1);     }      for ( i = 0; i < N; i++)     {         fprintf(fp, "%s\t%d\t%d\t%s", p[i].name, p[i].num, p[i].age, p[i].addr);         fprintf(fp, "\r\n");     }     printf("保存文件成功！\n\n");     fclose(fp); }  /* 载入 */ void load() {     struct student f[N];     int i;     FILE *fp;     if ((fp = fopen("student.txt", "r")) == NULL)     {         printf("不能打开文件！\n");         exit(1);     }     for ( i = 0; i < N; i++)     {         fscanf(fp, "%s\t%d\t%d\t%s\n", f[i].name, &f[i].num, &f[i].age, f[i].addr);         printf("%s\t%d\t%d\t%s\n", f[i].name, f[i].num, f[i].age, f[i].addr);     }     fclose(fp); }  /* 读取特定学生信息 */ struct student get_stu(int n) {     int i;     struct student f[N];     FILE *fp;     if ((fp = fopen("student.txt", "r")) == NULL)     {         printf("不能打开文件！\n");         exit(1);     }     for ( i = 0; i < N; i++)     {         fscanf(fp, "%s\t%d\t%d\t%s", f[i].name, &f[i].num, &f[i].age, f[i].addr);     }      if ( n < 0 || n > N)     {         printf("超出范围！");         exit(1);     }      for ( i = 0; i < N; i++)     {         if (i == (n-1))             return f[n-1];     }      fclose(fp); };
user-0 提问: 求助，求树中叶子结点的个数以及树t中结点值为x的结点的层号

回复:
user: user-1
content: int Level(tree t,datatype x,int h) {     if(t)     {         if(t->data==x) return h;         else             return Level(t->child[0],x,h+1)+Level(t->child[1],x,h+1)+Level(t->child[2],x,h+1);     }     else return 0; }  非本人所写，搬运工罢了。 原作者：https://blog.csdn.net/qq_51602939/article/details/116197124

user: user-0
content: 第二个函数，没有思路，递归好难啊。。
user-0 提问: c语言吧

回复:
user: user-1
content: 请输入：1，2，3，4，5，6，7，8，9 修改为1 2 3 4 5 6 7 8 9  就是在输入数据时，把“，”换成空格试试

user: user-2
content: 输入的时候用空格分开数据，不要用逗号
user-0 提问: 程序的目的是为了将用户输入的句子颠倒输出，一个数组sen用来存储单词(用空格和逗号划分单词)，为什么会出现用户输入一个句子后输出乱码或者单词输出有误呢？？

回复:
user: user-0
content: 再问一下，手机版CSDN论坛怎么给别人积分

user: user-0
content: 好吧

user: user-0
content: sentence[i]不是变长数组声明吗？那个等于号实际上是！=不过由于我是直接用手机复制粘贴上的，所以导致代码不完整

user: user-1
content: 引用 2 楼 拉普拉斯妖 的回复:[quote=引用 1 楼 weixin_40290083的回复:]for(;(sentence[i]=getchar())!='?' &&sentence[i]!='!'&&sentence[i]!='.';i++){                                                         ;          } 有什么问题？？[/quote]  把这个代码和你的代码比较下。仔细些！细心些！！耐心些！！！

user: user-2
content: 问题1 定义数组长度不要用变量  把char sentence[i] 改成 char sentence[256]  问题2 for循环的条件不要用=，而是==，即 ==‘?’ && ==‘!’ && ==‘.’  问题3 你是要整个句子的字符颠倒还是单词颠倒？你现在sen[k]=sentance[j]的做法是字符颠倒。

user: user-0
content: 引用 1 楼 weixin_40290083的回复:for(;(sentence[i]=getchar())!='?' &&sentence[i]!='!'&&sentence[i]!='.';i++){                                                         ;          } 有什么问题？？

user: user-1
content: for(;(sentence[i]=getchar())!='?' &&sentence[i]!='!'&&sentence[i]!='.';i++){                                                         ;          }
user-0 提问: 求教数组的一个问题

回复:
user: user-0
content: 引用 6 楼 yukint 的回复:1.printf为何在打印数组a之后不会停止，因为printf打印是以结束符‘\0’【也就是数值0】终止的，遇到结束符才停止打印。    数组a[9]对应的值为1，2，3，4，5，6，7，8，9, 你如果要用数组放下这个c字符串，【需要加一个'\0’结尾】。    解决方法为，重新定义a， 为a[10]            char a[10]={0};         char b[]="123456789";         for(int i=0;i<9;i++)         {                 a[i]=b[i];         } 2. 为何打印出2个1~9的串， 前面第一点已经说过，printf没有遇到‘\0’结束符，则继续打印，     地址继续往前加，这时候其实就开始去打印数组b的内容了，因为数组b刚好是挨着数组a的。    地址上是连续的，你可以写个测试程序，在循环后修改b中某个位置的值，然后看打印结果    比如：   #include<stdio.h>  int main() {         char a[9]={0};         char b[]="123456789";         for(int i=0;i<9;i++)         {                 a[i]=b[i];         }         b[0]='a';         printf("%s\n",a);         return 0; } 谢谢 明白了 当时粗心大意了

user: user-1
content: 1.printf为何在打印数组a之后不会停止，因为printf打印是以结束符‘\0’【也就是数值0】终止的，遇到结束符才停止打印。    数组a[9]对应的值为1，2，3，4，5，6，7，8，9, 你如果要用数组放下这个c字符串，【需要加一个'\0’结尾】。    解决方法为，重新定义a， 为a[10]            char a[10]={0};         char b[]="123456789";         for(int i=0;i<9;i++)         {                 a[i]=b[i];         } 2. 为何打印出2个1~9的串， 前面第一点已经说过，printf没有遇到‘\0’结束符，则继续打印，     地址继续往前加，这时候其实就开始去打印数组b的内容了，因为数组b刚好是挨着数组a的。    地址上是连续的，你可以写个测试程序，在循环后修改b中某个位置的值，然后看打印结果    比如：   #include<stdio.h>  int main() {         char a[9]={0};         char b[]="123456789";         for(int i=0;i<9;i++)         {                 a[i]=b[i];         }         b[0]='a';         printf("%s\n",a);         return 0; }

user: user-2
content: 引用 4 楼 千梦一生 的回复:i < 10 这个回答错误。

user: user-2
content: i < 10

user: user-3
content: 字符串结束符‘\0’

user: user-0
content: 引用 1 楼 user-4 的回复:因为a后面没有结束符了，需要定义char a[10]={0}; 噢 对啊 我傻了  谢谢

user: user-4
content: 因为a后面没有结束符了，需要定义char a[10]={0};
user-0 提问: C内存释放问题

回复:
user: user-1
content: 内存分配一次，也只需要释放一次，所以不存在两次free

user: user-2
content: getPerson函数不需要释放内存，因为你要把这块内存返回给调用者，如果释放了，调用者拿到的就是垃圾内存 main函数需要释放内存，内存使用完了就可以释放了，否则就会造成内存泄漏
user-0 提问: 字符作为数组的下标问题

回复:
user: user-1
content: 越界操作崩不崩溃全看你的运气。

user: user-0
content: 引用 1 楼 user-2的回复:数组越界并不一定崩溃啊   正常  越界可能只是将一块无用的内存赋值了而已 受教了。。。。。

user: user-2
content: 数组越界并不一定崩溃啊   正常  越界可能只是将一块无用的内存赋值了而已
user-0 提问: char str【10】=｛0｝；

回复:
user: user-1
content: 引用 6 楼 Qlaiaqu 的回复:两种可能都有，具体依赖编译器，个人建议是手动memset一下。必然是全0 没有全0是编译器bug

user: user-2
content: 两种可能都有，具体依赖编译器，个人建议是手动memset一下。

user: user-3
content: 引用 2 楼 其实一开始我是拒绝的 的回复:[quote=引用 1 楼 Simple-Soft的回复:]初始化全部为0 为什么不是str【0】为零，那str【10】=｛“1”｝就是str【0】为字符1[/quote] LZ可以参考以下的数组部分初始化的内容 http://c.biancheng.net/view/1415.html  再比较一下数组初始化的方法 https://www.cnblogs.com/fnlingnzb-learner/p/8057257.html

user: user-4
content: 所有啊，不同的表达式表示不同的意思

user: user-5
content: char str[3] = {0};    //字符串初始化为空          char s[3] = {'0'};    //字符串初始化为字符0   打印结果如下：  str:   s:0

user: user-0
content: 引用 1 楼 Simple-Soft的回复:初始化全部为0 为什么不是str【0】为零，那str【10】=｛“1”｝就是str【0】为字符1

user: user-4
content: 初始化全部为0
user-0 提问: VS2019显示触发一个断点

回复:
user: user-1
content: 引用 7 楼 xxqのngc2237 的回复:我和我同学试着都是一样的问题 1、首先，scanf_s如果读取字符或字符串，需要指定 接收地址 的大小，避免scanf_s读取数量大于你接收缓冲区的大小，写入到了不该写的内存地址。这就是带_s 和不带_s的区别。 它是safe安全的，但前提 当然还是需要程序员的配合。 所以请不要忽略编译器的警告。 所以修改如下： scanf_s("%c",&hc[i].ch, sizeof(hc[i].ch)); 2、其次，strcpy_s 还是类似的问题。 该函数将源缓冲区字符串内容拷贝至目标缓冲区，直到源缓冲区字符串遇到'\0',或者拷贝字节数大于等于用户给定的目标缓冲区大小（也是微软推出_s系列函数的原因。多了一个参数，用于指定目标缓冲区大小）。 这里需要注意的是： a、目标缓冲区的大小需要足以容纳末尾的'\0'。  b、如果目标缓冲区的大小不足。程序会直接异常退出。在debug模式下，程序会断言报错。 c、如果用户指定的大小实际比目标缓冲区的大小还要大（你实际申请了5，但却指定了10）。那也就失去了_s的作用，与不带_s一样，有溢出风险，一旦发生这种情况（拷贝了过多的源缓冲区内容到目标缓冲区，写入到了不该写的内存地址），你就彻底失去了对程序的掌控，程序立即崩溃反倒是最好的情况（这也是带_s版本所做的事情），最怕的是程序虽然没有崩溃，但是却改写了不该写的内容，接下来在任何时候，都有可能引起异常，排查问题非常困难，就是你目前遇到的问题。 你这里就犯了 c 的错误。你固定给了10字节的大小。 strcpy_s(hc[i].code,  10  ,  &cd[start]); 你应该改成这样： strcpy_s(hc[i].code, n - start, &cd[start]); 诚然，你给的输入样本中，节点个数输入的是5，也就是说n - start 不可能大于5，一定会比10小。但你也不可能知道strcpy_s它会拿你给的这个 10 去给hc[i].code做些什么骚操作吧？ 你能知道的只是你的 hc[i].code 缓冲区内容大小一定是 n - start。 实际上，debug模式下，strcpy_s确实会做一些操作，以一些奇怪的值，用你给定的大小，去初始化你传入的目标缓冲区。所以你就gg了。   3、最后还有一个问题，C标准里从来没有定义过 fflush(stdin)的行为，也就是说，fflush(stdin) 这样调用会产生什么效果是未知的，取决于编译器的实现。你在 vs2019上 写这样的调用 很可能达不到你要的 “清空标准输入缓冲区”的效果。 你的每次输入都会有换行符遗留。从而被下一次scanf_s %c 捕获。你可以改成使用rewind(stdin)替代fflush(stdin)，来达到目的。 rewind(stdin);  4、最后，没有细看你的业务逻辑，就不做评价了。改掉上面的问题，程序起码不会报错了。

user: user-0
content: 引用 6 楼 北极光~ 的回复:我也跑出来没问题，2019和2017都试了 我和我同学试着都是一样的问题

user: user-2
content: 我也跑出来没问题，2019和2017都试了

user: user-0
content: 顶顶，等一个大佬回复

user: user-0
content: 引用 2 楼 Qlaiaqu 的回复:申请的内存过大，申请不出来，断言了？ 那该怎么办呀

user: user-0
content: 引用 1 楼 轻箬笠 的回复:复制下来跑了下没出问题呀，环境vs2019 诶？我也是2019……就显示这个……试了好几次都这样

user: user-3
content: 申请的内存过大，申请不出来，断言了？

user: user-4
content: 复制下来跑了下没出问题呀，环境vs2019
user-0 提问: keil没有自动导入头文件

回复:
user: user-1
content: 你这哪有头文件？而且不是很懂你这个代码的写法void exzdl(void) interrupt2这个interrupt2是干嘛用的？没见过这样写的函数，还有里面的ｉ你上面是把定义成全局变量了？这里为什么可以直接用，问东西把代码放全啊，除非你确定没有的代码跟这个错误一点关系都没有，你这就扔个这个，而且看这个报错也没有报头文件的错啊
user-0 提问: 大佬可以看看哪里错了吗，运行不出来

回复:
user: user-0
content: 这是它的错误，实在不知道哪里错了。

user: user-1
content: 你需要描述一下具体的错误，不然这么多代码，谁也没有那么多时间去看

user: user-0
content: 感谢，我已经改好了

user: user-2
content: 引用 2 楼 weixin_43845185 的回复:这是它的错误，实在不知道哪里错了。  这里不是有行吗，ｃ2061就是第2061行，这是语法错误，检查你的语法，看到下面有}那应该是这些符号，你看看，在下面缺失，差不多都是括号的问题，你把括号先全部对其了再问别的，书写代码的时候规范一点，哪怕一句代码该加{]都加上，然后最好打了前面的一半就补上后面的，再从中间写代码，这样就能避免大部分的缺失错误
user-0 提问: c语言编程疑问

回复:
user: user-1
content: scanf("%d",&m);       int a[m];  C语言不支持这种数组定义， int *a = new int[m];  这是c++的写法，c用malloc

user: user-0
content: 引用 4 楼 棉猴的回复:对于您提到的 “for循环赋值数组时不知道键盘要怎么操作，就是空格和回车需不需要呢” 这个问题，实际上空格和回车都是可以的   对于scanf()的使用方法，请参考《scanf()函数的用法》 希望能够帮到您！ 感谢你的耐心解答！

user: user-0
content: 感谢你的耐心解答！

user: user-2
content: 对于您提到的 “for循环赋值数组时不知道键盘要怎么操作，就是空格和回车需不需要呢” 这个问题，实际上空格和回车都是可以的   对于scanf()的使用方法，请参考《scanf()函数的用法》 希望能够帮到您！

user: user-2
content: #include <stdio.h> int main() { 	int m, i, j;  	scanf("%d", &m);  	int *a = new int[m];//-------做好使用动态分配空间-----------    	for (i = 0; i<m; i++)//-------分号去掉---------  	{  		scanf("%d", &a[i]);  	}  	for (i = 0; i < m - 1; ++i)//--------------分号去掉---------- 	{  		for (j =0; j <m-1-i; ++j)//------------循环修改--------  		{  			if (a[j] < a[j +1])//--------实际上就是冒泡排序-----------  			{  				int temp = a[j];  				a[j] = a[j + 1];  				a[j + 1] = temp;  			}  		} 	} 	for (j = 0; j<m; ++j)  		printf("%d ", a[j]);  	delete[] a;//------------释放内存--------------     return 0; } VS2015 C++环境

user: user-3
content: 程序有两个scanf，之间应该加一个读取回车的操作。 比如：getchar() 或者： char c; scanf("%c",&c);

user: user-4
content: 引用 楼主 hsyihsy的回复:c语言刚学习入门，什么都不懂，如果问题太蠢，大家不要建议 我写了一个输入一串数字，排序后输出的代码，编译成功但我自己用数字试却没办法得到正确结果，不知道哪里除了问题，另外for循环赋值数组时不知道键盘要怎么操作，就是空格和回车需不需要呢      #include <stdio.h>   int main()   {       int m,i,j;         scanf("%d",&m);       int a[m];            for(i=0;i<m;i++);       {           scanf ("%d",&a[i]);       }               for(j=m-1;j>0;j--);        {            if(a[j]<a[j-1])            {                int temp=a[j];                a[j]=a[j-1];                a[j-1]=temp;            }      }        for(j=0;j<m;++j)       printf("%d ",a[j]);              return 0;       }    要用两个循环排序，可以单补调试一下应该可以发现问题
user-0 提问: 问题是 在最初的for语句读取到“$$$$$”时停止读取操作  希望请教大佬  

回复:
user: user-1
content: 单字节和单字节进行比较：if (s[i][0] == '$'&& s[i][1] == '$' && s[i][2] == '$' && s[i][3] == '$' && s[i][4] == '$') break;

user: user-2
content: 单字节不能跟字符串比较

user: user-3
content: #include<stdio.h> #include <string.h>  #define number 3  int main(void) {     int i;     char s[number][128];     for(i=0;i<number;i++)     { printf("s[%d]:",i);         scanf("%s", s[i]);         //if('s[i][128]'=='$$$$$')         if(strcmp(s[i], "$$$$$") == 0)             break;     }     for(i=0;i<number;i++)     {         printf("s[%d]=\"%s\"\n",i,s[i]);     }     return 0; } 供参考～

user: user-4
content: if (strcmp(s[i][128]，"$$$$$") == 0)    //这里要用双引号

user: user-0
content: 已解决 感谢这位老哥的解答  谢谢了  引用 4 楼 自信男孩 的回复:#include<stdio.h> #include <string.h>  #define number 3  int main(void) {     int i;     char s[number][128];     for(i=0;i<number;i++)     { printf("s[%d]:",i);         scanf("%s", s[i]);         //if('s[i][128]'=='$$$$$')         if(strcmp(s[i], "$$$$$") == 0)             break;     }     for(i=0;i<number;i++)     {         printf("s[%d]=\"%s\"\n",i,s[i]);     }     return 0; } 供参考～ 引用 4 楼 自信男孩 的回复:#include<stdio.h> #include <string.h>  #define number 3  int main(void) {     int i;     char s[number][128];     for(i=0;i<number;i++)     { printf("s[%d]:",i);         scanf("%s", s[i]);         //if('s[i][128]'=='$$$$$')         if(strcmp(s[i], "$$$$$") == 0)             break;     }     for(i=0;i<number;i++)     {         printf("s[%d]=\"%s\"\n",i,s[i]);     }     return 0; } 供参考～

user: user-5
content: 字符串类的比较赋值都有自己的专属函数，不能用整型的那套，ｃ＋＋封装了才能用。看一下string.h里的strcpy,strcmp,strcat这些函数

user: user-6
content: 用strcmp来比较字符串，不要用==号
user-0 提问: liunx环境下，gcc 报(.text+0xd2)：对‘scanf_s’未定义的引用

回复:
user: user-0
content: 已解决，非常感谢。

user: user-0
content: 这是怎么回事？

user: user-1
content: 改成scanf，scanf_s是微软vc才有的，gcc没有

user: user-0
content: 求大佬找出问题根源