Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 这个程序哪里有问题啊

回复:
user: user-1
content: 引用 7 楼 weixin_45631665 的回复:[quote=引用 6 楼 csucxy的回复:]#include <stdio.h>  int main() {     int num1 = 3, num2 = 5, result;     int max(int n1, int n2);     result = max(num1, num2);     printf("max=%d\n", result);      return 0; }  int max(int n1, int n2) {     if (n1 > n2)         return n1;     else         return n2; } 应该将后面自定义函数放在int main()前面[/quote] 两种解决方法：第一种，就是函数定义写在main函数之前，就是把main函数写到max函数之后； 第二种方法，即把函数声明放到main函数之前。  第一种方法叫做定义式声明，后一种方法只是声明（在前）

user: user-0
content: 引用 6 楼 csucxy的回复:#include <stdio.h>  int main() {     int num1 = 3, num2 = 5, result;     int max(int n1, int n2);     result = max(num1, num2);     printf("max=%d\n", result);      return 0; }  int max(int n1, int n2) {     if (n1 > n2)         return n1;     else         return n2; } 应该将后面自定义函数放在int main()前面

user: user-2
content: #include <stdio.h>  int main() {     int num1 = 3, num2 = 5, result;     int max(int n1, int n2);     result = max(num1, num2);     printf("max=%d\n", result);      return 0; }  int max(int n1, int n2) {     if (n1 > n2)         return n1;     else         return n2; }

user: user-2
content: #include <stdio.h>  int main() {     int num1 = 3, num2 = 5, result;     result = max(num1, num2);     printf("max=%d\n", result);      return 0; }  int max(int n1, int n2) {     if (n1 > n2)         return n1;     else         return n2; }

user: user-3
content: 只看出了两个：1、不能void；2、max函数定义在后，应该在调用前声明一下。 这两个都是标准的C的要求，VC或低版本的VC也许能过。  其他请高手补充

user: user-0
content: 能仔细说一下怎么做吗，刚刚开始学编程语言，谢谢

user: user-4
content: 函数需要前置声明~

user: user-2
content: 函数调用前做函数原型声明。
user-0 提问: C语言随机数只生成的问题

回复:
user: user-1
content: 又建一楼

user: user-2
content: a0==0这是比较，不是赋值 a=1这是赋值，不是比较 你把二者搞混了

user: user-3
content: if括号里的内容，你把赋值号当成了等号了
user-0 提问: 算法问题

回复:
user: user-0
content: 引用 7 楼 赵4老师 的回复：仅供参考： //将一个nxn的矩阵每行每列仅取一个数值使得乘积最大。假设没有值为0的元素。 #include <stdio.h> const int n=4; double mat[n][n]={     {1.0, 2.0, 4.0, 3.0},     {4.0, 3.0, 2.0, 3.0},     {5.0, 2.0, 1.0, 3.0},     {8.0, 2.0, 4.0, 0.5}, }; double p,pmax; int f[n][n]; void list(int m) {     for (int i=0;i<n;i++) {         if (f[m][i]==0) {             f[m][i]=1;             p*=mat[m][i];             if (m>=n-1) {                 if (p==pmax) {                     for (int j=0;j<n;j++) {                         for (int k=0;k<n;k++) {                             if (f[j][k]==1) printf("%d %lg\n",k,mat[j][k]);                         }                     }                 }             } else list(m+1);             p/=mat[m][i];             f[m][i]=0;         }     } } void calc(int m) {     for (int i=0;i<n;i++) {         if (f[m][i]==0) {             f[m][i]=1;             p*=mat[m][i];             if (m>=n-1) {                 if (p>pmax) pmax=p;             } else calc(m+1);             p/=mat[m][i];             f[m][i]=0;         }     } } int main() {     pmax=0.0;     p=1.0;     for (int j=0;j<n;j++) for (int k=0;k<n;k++) f[j][k]=0;     calc(0);     printf("pmax:%lg\n",pmax);     list(0);     return 0; } //pmax:640 //2 4 //0 4 //0 5 //0 8 // 你这个列重复了啊 第一列取了三个元素

user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-1
content: 仅供参考： //将一个nxn的矩阵每行每列仅取一个数值使得乘积最大。假设没有值为0的元素。 #include <stdio.h> const int n=4; double mat[n][n]={     {1.0, 2.0, 4.0, 3.0},     {4.0, 3.0, 2.0, 3.0},     {5.0, 2.0, 1.0, 3.0},     {8.0, 2.0, 4.0, 0.5}, }; double p,pmax; int f[n][n]; void list(int m) {     for (int i=0;i<n;i++) {         if (f[m][i]==0) {             f[m][i]=1;             p*=mat[m][i];             if (m>=n-1) {                 if (p==pmax) {                     for (int j=0;j<n;j++) {                         for (int k=0;k<n;k++) {                             if (f[j][k]==1) printf("%d %lg\n",k,mat[j][k]);                         }                     }                 }             } else list(m+1);             p/=mat[m][i];             f[m][i]=0;         }     } } void calc(int m) {     for (int i=0;i<n;i++) {         if (f[m][i]==0) {             f[m][i]=1;             p*=mat[m][i];             if (m>=n-1) {                 if (p>pmax) pmax=p;             } else calc(m+1);             p/=mat[m][i];             f[m][i]=0;         }     } } int main() {     pmax=0.0;     p=1.0;     for (int j=0;j<n;j++) for (int k=0;k<n;k++) f[j][k]=0;     calc(0);     printf("pmax:%lg\n",pmax);     list(0);     return 0; } //pmax:640 //2 4 //0 4 //0 5 //0 8 //

user: user-0
content: 引用 4 楼 wowpH 的回复：这不是类似皇后问题吗。比较类似但也不一样

user: user-0
content: 引用 3 楼 SuperDay 的回复：四层循环嵌套就可以了呀算法怎么实现？

user: user-2
content: 这不是类似皇后问题吗。

user: user-3
content: 四层循环嵌套就可以了呀

user: user-0
content: 引用 1 楼 Most_retarded 的回复：这个用matlab来写更合适吧规定要用c或者c++写

user: user-4
content: 这个用matlab来写更合适吧
user-0 提问: 求100之内的质数，为什么第二个for循环没有运行，求大佬帮帮忙

回复:
user: user-1
content: 当i=4时，就会执行了，并且直接跳出第二层的循环，感觉第二层循环没啥用呢， 你跳出第二层换循环，还是要执行后面的，第二层循环没做啥呢

user: user-2
content: 跳出之后还不是无条件赋值吗？这样不是所有都是素数吗？

user: user-0
content: for(j=2;j<i;j++)    {    if(i%j==0)    break; 写了这个for语判断是不是素数，不是素数就跳出循环，但不知道为什么不执行

user: user-2
content: 这个数组赋值之前并没有判断是否素数

user: user-3
content: 看红色部分，要判断j 和i是否相等， 只有相等的时候，才表示它为素数。但是你的代码中并没有判断，因为没有判断，所以将所的有i复制到数组中了，给你的感觉是二重循环没有执行，其实是执行了，是你的逻辑不正确，你在二重循环中打印一些信息，就可以知道二重循环执行没有。

user: user-4
content: arr[q++]=i放的位置不对，第二个for循环 结束后，i的值依旧会赋给数组

user: user-0
content: 引用 6 楼 SuperDay 的回复:引用 5 楼 dajkhsdawe 的回复：#3  break 只能跳出第一个for语句吗，我还以为能跳出所有嵌套的循环.....break只跳一层，并且跳二层也不符合这个逻辑  哦哦   明白了   感谢感谢

user: user-2
content: 引用 5 楼 dajkhsdawe 的回复：#3  break 只能跳出第一个for语句吗，我还以为能跳出所有嵌套的循环.....break只跳一层，并且跳二层也不符合这个逻辑

user: user-0
content: #3  break 只能跳出第一个for语句吗，我还以为能跳出所有嵌套的循环.....
user-0 提问: 这个程序怎么写啊～c语言

回复:
user: user-1
content: 不提供程序，看看其他人吧，这里面很多雷锋

user: user-0
content: 直接打印没啥意思啊～可以发个程序吗，我慢慢琢磨～谢谢

user: user-1
content: 要不就写死常量直接打印出来

user: user-1
content: 问题这样的话，结构体不是也没学到吗？

user: user-1
content: 循环还没学弄这作业，老师会布置作业吗？

user: user-0
content: 引用 5 楼 SuperDay的回复:这个很简单啊，弄一个结构数组，然后循环打出来就好了 刚学c，循环结构还没学，自己看的，不太能理解透彻，能发个程序吗，有关键部分就行，谢谢啦～

user: user-2
content: 治好了我的颈椎病

user: user-1
content: 这个很简单啊，弄一个结构数组，然后循环打出来就好了

user: user-0
content: 引用 2 楼 SuperDay的回复:弄个结构数组输出吗？ 嗯嗯      是的

user: user-1
content: 弄个结构数组输出吗？

user: user-3
content: 头已歪     题目是什么都不清楚，问什么啊
user-0 提问: 一个填空题

回复:
user: user-0
content: 引用 楼主 IT.阿冷maya的回复: #include <stdio.h> #include<math.h> void main() {int fen1,fen2,fen5,n=0; for(fen1=0;fen1<=100;fen1++) 	for(fen2=0;fen2<=50;fen2++) 	{fen5=(100-fen1-2*fen2)/5	    ; if(fen5>=0) if(fen1+(2*fen2)+(5*fen5)==100) {printf("%-4d%-4d%-4d\n",fen1,fen2,fen5); 	   n++; 	} } printf("Total of Exchange Method is %d",n); }
user-0 提问: c指针加减发疑问！

回复:
user: user-1
content: 我的并不会都是10，所以确实是和编译时有关的 就不久前在书上看到的没想到这几次经常在论坛见到类似的问题 在一个表达式中，若一个变量出现多次，不要使用++ -- 这样的操作，因为你不知道编译器是先用还是先

user: user-2
content: *p++是后增，不是*(**p);因此输出10是正常。*p++由于++优先级比*高，因此p++现结合，作为一个整体*p++就是先算 *(p++)得到的是10，然后p再向后偏移sizeof(int)个字节

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

user: user-4
content: 什么编译器，把打印结果贴出来

user: user-5
content: 与平台/编译器有关，可能先计算p，然后再计算p++

user: user-6
content: 你把第一个printf中的两个分开打印，看看结果怎样？

user: user-7
content: 书上有没有 `++i` `i++`
user-0 提问: 在vc上可以运行，在tcc下出现以下错误

回复:
user: user-0
content: #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define LIST_INT_SIZE 100//线性表存储空间的初始分配量 #define LISTCREMENT 10//线性表存储空间的分配增量 typedef  int Status; typedef  int ElemType; typedef struct{ 	ElemType *elem;//存储空间基址 	int length;//当前长度 	int listsize;//当前分配储存容量 	int listcrement;//当前分配增量 }SqList;  Status InitList_Sq(SqList &La){  	La.elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType)); 	La.length=0; 	La.listsize=LIST_INT_SIZE; 	return 1; }  Status creat(SqList &La)//创建顺序表 {    int i;   scanf("%d",&La.length);      for(i=0;i<La.length;i++) 	 { 		 scanf("%d",&La.elem[i]);      } 	 return 0; } void reverse(SqList &La)//逆序 { 	int i,temp; 	for(i=0;i<La.length/2;i++) 	{temp=La.elem[La.length-1-i];      La.elem[La.length-1-i]=La.elem[i]; 	 La.elem[i]=temp;}  	 } void output(SqList &La)//输出线性表 { 	int i;     for(i=0;i<La.length;i++)     printf("%d ",La.elem[i]); }  void main(){     SqList La;     InitList_Sq(La);     creat(La); 	reverse(La); 	output(La); }

user: user-0
content: #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define LIST_INT_SIZE 100//线性表存储空间的初始分配量 #define LISTCREMENT 10//线性表存储空间的分配增量 typedef  int Status; typedef  int ElemType; typedef struct{ 	ElemType *elem;//存储空间基址 	int length;//当前长度 	int listsize;//当前分配储存容量 	int listcrement;//当前分配增量 }SqList;  Status InitList_Sq(SqList &La){  	La.elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType)); 	La.length=0; 	La.listsize=LIST_INT_SIZE; 	return 1; }  Status creat(SqList &La)//创建顺序表 {    int i;   scanf("%d",&La.length);      for(i=0;i<La.length;i++) 	 { 		 scanf("%d",&La.elem[i]);      } 	 return 0; } void reverse(SqList &La)//逆序 { 	int i,temp; 	for(i=0;i<La.length/2;i++) 	{temp=La.elem[La.length-1-i];      La.elem[La.length-1-i]=La.elem[i]; 	 La.elem[i]=temp;}  	 } void output(SqList &La)//输出线性表 { 	int i;     for(i=0;i<La.length;i++)     printf("%d ",La.elem[i]); }  void main(){     SqList La;     InitList_Sq(La);     creat(La); 	reverse(La); 	output(La); }

user: user-1
content: tcc是16位的。

user: user-2
content: 可能是由于编译器支持的语法格式不一致，跟标准不一样导致的。建议贴出代码～

user: user-3
content: 都什么年代了还tcc 太多语法不支持了

user: user-4
content: 是不是变量声明的问题？tcc好像要把所有的变量都放到最前面的。 楼主还是把全部代码贴出来看看吧。

user: user-0
content: 引用 9 楼 轻箬笠的回复:如果我没记错的话，引用是c++的概念，c语言是没有这样的东西的。 楼主可以将参数定义成SqList *La 然后 InitList_Sq(&La); creat(&La); reverse(&La); output(&La); 问题已经解决谢谢，学了c和c++都弄混了

user: user-4
content: 如果我没记错的话，引用是c++的概念，c语言是没有这样的东西的。 楼主可以将参数定义成SqList *La 然后 InitList_Sq(&La); creat(&La); reverse(&La); output(&La);

user: user-3
content: Status InitList_Sq(SqList &La){  应该是tcc可能不支持引用?  只支持指针 所以你改成指针来实现吧

user: user-0
content: 引用 1 楼 轻箬笠的回复:是不是变量声明的问题？tcc好像要把所有的变量都放到最前面的。 楼主还是把全部代码贴出来看看吧。 贴出来了
user-0 提问: 百思不得其解？？

回复:
user: user-0
content: 找到原因了，是把’除号’错误赋值给了op😂😂😂，我真是眼瞎了

user: user-1
content: 输入时，注意数字和中间的符号（加减乘除）不要有空格，否则op可能接收到的是空格。 为了判断输入的是否是你想要的，可以在scanf后面把A B op都打印出来～

user: user-2
content: 引用 楼主 CXL.的回复:编译也没有错啊，为什么第一个else里面的内容执行会得错误的结果，有大神给小白讲讲哪里不对了吗？ 这个程序没有问题啊，我按照你的程序写了一遍能够正常运行，估计是你输入的时候有问题吧，输入的时候不要加空格，比如要计算2+3就直接输入这三个，中间不要加空格，然后按enter键就可以了
user-0 提问: 任意输入10个数 分别算出正数和以及负数和的代码怎么敲

回复:
user: user-1
content: 楼上正解，顶。

user: user-2
content: 计算输入数据的正负数和代码如下：

user: user-0
content: 引用 2 楼 masudong 的回复：[quote=引用 楼主 ?Black?Star的回复:]以及这个代码为什么错误 图片很模糊看不清楚，可以将图片设置清楚一点嘛[/quote]那个问题解决了 是因为上次的运行程序没关

user: user-3
content: 权限有问题，打开文件的权限或者编译器打开的权限，建议用admin打开，代码没看出有啥问题，但是建议把x, y的打印放到for循环外。

user: user-0
content: 引用 3 楼 @风轻云淡_ 的回复：你上一次运行的程序没关闭 嗯嗯 感谢

user: user-4
content: 你上一次运行的程序没关闭

user: user-2
content: 引用 楼主 ?Black?Star的回复:以及这个代码为什么错误 图片很模糊看不清楚，可以将图片设置清楚一点嘛

user: user-5
content: 自己运行下就知道错在哪儿了就先不要来论坛问了
user-0 提问: 新人提问，为什么我这个程序输出一直都是inf

回复:
user: user-1
content: 仅供参考：#include <iostream> #include <string> #include <algorithm> using namespace std; inline int COMPARE(string str1,string str2) {//相等返回0，大于返回1，小于返回-1          if (str1.size()>str2.size()) return 1; //长度长的整数大于长度小的整数     else if (str1.size()<str2.size()) return -1;     else                              return str1.compare(str2); //若长度相等，则头到尾按位比较 } string PLUS(string number1,string number2) {     int i;     int length1 = number1.size();     int length2 = number2.size();      string result="";      reverse(number1.begin(), number1.end());     reverse(number2.begin(), number2.end());      for(i = 0; i < length1 && i < length2; i++) {         char c = (char)(number1[i] + number2[i] - 48);         result = result + c;     }      while(i < length1) {         result = result + number1[i];         ++i;     }      while(i < length2) {         result = result + number2[i];         ++i;     }      int carry = 0;     for(i = 0; i < (int)result.size(); ++i) {         int value = result[i] - 48 + carry;         result[i] = (char)(value % 10 + 48);         carry = value / 10;     }      if(carry !=0 ) {         result = result + (char)(carry + 48);     }      for(i = result.size() - 1; i >= 0; i--) {         if(result[i] != '0') break;     }      result = result.substr(0, i + 1);      reverse(result.begin(), result.end());     if(result.length() == 0) result = "0";     return result; } string MULTIPLY(string number1, string number2) {     int i, j;     int *iresult;     int length1 = number1.size();     int length2 = number2.size();     string result = "";      reverse(number1.begin(), number1.end());     reverse(number2.begin(), number2.end());      iresult = (int*)malloc(sizeof(int) * (length1 + length2 + 1));     memset(iresult, 0, sizeof(int) * (length1 + length2 + 1));      for(i = 0; i < length1; i++) {         for(j = 0; j < length2; j++) {             iresult[i+j] += ((number1[i] - 48) * (number2[j] - 48));         }     }      int carry = 0;     for(i = 0; i < length1 + length2; i++) {         int value = iresult[i] + carry;         iresult[i] = value % 10;         carry = value / 10;     }      for(i = length1 + length2 - 1; i >= 0; i--) {         if(iresult[i] != 0)break;     }      for(; i >= 0; i--) {         result = result + (char)(iresult[i]+48);     }      free(iresult);      if(result == "") result = "0";     return result; } string factorial(string n) {     string temp = "1";     string i;     for(i = "1"; COMPARE(i, n) <= 0; i = PLUS(i, "1")) {         temp = MULTIPLY(temp, i);     }     return temp; } int main(void) {     cout << factorial("100") << endl;     return 0; } //93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 //

user: user-2
content: inf的原因是除数为0了。建议楼主在计算b之前把result2和result3打出来看看是否为0。

user: user-3
content: 求阶乘为什么用double？

user: user-4
content: 输入多少？就会溢出了？

user: user-0
content: 引用 1 楼 user-5的回复:数据超出范围，溢出 其实我想要解决的办法

user: user-5
content: 数据超出范围，溢出
user-0 提问: 各位大神，帮我看看，才刚学弄不懂，谢谢了

回复:
user: user-1
content: 你的变量a,b 都没有初始化直接传入函数参数？ 建议先看看scanf函数的用法，以及函数的调用、定义。

user: user-2
content: scanf("%d,%d", &8, &6); 楼主想输入8,6吧。 那么a, b里面存的是什么？从你的逻辑里可以看出是存放的随机值 如果想输入8, 6。这么输入不如直接a = 8, b = 6; 另外，楼主的写法应该编译不过去的。

user: user-3
content: scanf("%d,%d,&8,&6")没有这种写法的。 int m, n; scanf("%d,%d",&m,&n);正常是这样，然后再终端输入两个整数，以","隔开

user: user-4
content: 建议看看书上：函数声明的内容，以及scanf的用法。
user-0 提问: C语言初级小问题

回复:
user: user-1
content: return 0在旧超标准中可以省略 stdio.h也可以省略，前提是没用到其中的东东

user: user-2
content: stdio.h也可以省略的吗。

user: user-3
content: return 0在main()中可以省略（因为编译器会隐式帮你插入return 0），其它情况下不可省略
user-0 提问: 关于pta题，有大神指点吗

回复:
user: user-0
content: 引用 6 楼 user-1的回复:[quote=引用 5 楼 user-1的回复:][quote=引用 4 楼 qq_41083923的回复:][quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064[/quote] 尴尬，我无权操作。既然如此那你把pi=acos(-1)试试。这还不行我就不知道什么原因了[/quote] 写错了，应该是-1.0[/quote] 也是不行_(´ཀ`」 ∠)__

user: user-0
content: 引用 5 楼 user-1的回复:[quote=引用 4 楼 qq_41083923的回复:][quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064[/quote] 尴尬，我无权操作。既然如此那你把pi=acos(-1)试试。这还不行我就不知道什么原因了[/quote] 照样不行_(´ཀ`」 ∠)__

user: user-1
content: 引用 5 楼 user-1的回复:[quote=引用 4 楼 qq_41083923的回复:][quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064[/quote] 尴尬，我无权操作。既然如此那你把pi=acos(-1)试试。这还不行我就不知道什么原因了[/quote] 写错了，应该是-1.0

user: user-1
content: 引用 4 楼 qq_41083923的回复:[quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064[/quote] 尴尬，我无权操作。既然如此那你把pi=acos(-1)试试。这还不行我就不知道什么原因了

user: user-0
content: 引用 3 楼 user-1的回复:[quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064

user: user-1
content: 引用 2 楼 qq_41083923的回复:[quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集

user: user-0
content: 引用 1 楼 user-1的回复:多组输入。用while 用了，照样错_(´ཀ`」 ∠)__

user: user-1
content: 多组输入。用while
user-0 提问: 杭电oj acm-steps 1.2.2 An Easy Task，遇到了Time Limit Exceeded，求各位帮忙看下是什么问题

回复:
user: user-0
content: 引用 5 楼 user-1 的回复:[quote=引用 4 楼 花札的回复:][quote=引用 3 楼 user-1 的回复:] 思路：这个可以用二分查找做。  left=Y, right=2147483647 middle等于他们和的一半。 然后判断Y和middle之间有多少个闰年。啊好的谢谢你我去试一下这个，那我原来这种写法是因为太慢超时了吗……[/quote] 你那个时间复杂度是O(n)级别的，对于多case的情况确实容易TLE。二分只要log(2n)级别要快的多。[/quote]好滴！谢谢你啦！

user: user-1
content: 引用 4 楼 花札的回复:[quote=引用 3 楼 user-1 的回复:] 思路：这个可以用二分查找做。  left=Y, right=2147483647 middle等于他们和的一半。 然后判断Y和middle之间有多少个闰年。啊好的谢谢你我去试一下这个，那我原来这种写法是因为太慢超时了吗……[/quote] 你那个时间复杂度是O(n)级别的，对于多case的情况确实容易TLE。二分只要log(2n)级别要快的多。

user: user-0
content: 引用 3 楼 user-1 的回复:思路：这个可以用二分查找做。  left=Y, right=2147483647 middle等于他们和的一半。 然后判断Y和middle之间有多少个闰年。啊好的谢谢你我去试一下这个，那我原来这种写法是因为太慢超时了吗……

user: user-1
content: 思路：这个可以用二分查找做。  left=Y, right=2147483647 middle等于他们和的一半。 然后判断Y和middle之间有多少个闰年。

user: user-0
content: 引用 1 楼 user-1 的回复:你是一个年份一份年份判断的吗是的

user: user-1
content: 你是一个年份一份年份判断的吗
user-0 提问: git配置分页显示

回复:
user: user-1
content: https://blog.csdn.net/weixin_33725126/article/details/92103898

user: user-2
content: 不知道你说的分页是什么 在命令后面加|more可以不一下子全部显示完 但是很多客户端都可以通过滚动条上拉显示历史输出,所以这个用途也不大
user-0 提问: C语言的环境

回复:
user: user-1
content: 学c用VS? 不嫌麻烦吗?

user: user-2
content: 你要Windows还是什么系统的？VS吗？2010就够用了

user: user-3
content: 引用 3 楼 榕树’ 的回复:vs2019够新了吧 初学都折腾什么2019啊

user: user-4
content: vs2019够新了吧

user: user-5
content: 环境？ 最新？  最新系统版本？最新 IDE？ 学习 c 无所谓，会 c 了不会这么问问题

user: user-3
content: 为什么要最新的？适合才是最好的
user-0 提问: C语言这个递归方法求斐波那契，始终想不痛是谁想出这个方法的

回复:
user: user-0
content: 只是因为我想不出这种方法吧，所以觉得很神奇。

user: user-1
content: 这个不是想象中那么难，楼主可以看看用数据结构模拟递归调用的解决办法。技术上的追求是无止境的，不要以为在路边捡到的一朵小花就是全部的风景。 另外，提醒楼主及时结帖

user: user-2
content: 引用 8 楼 SuperDay 的回复:引用 6 楼 YGLeeeon 的回复：引用 4 楼 SuperDay 的回复:就是以空间换时间我看楼主第一次接触，我就显摆一下，同时楼主要是有心人会进一步去探究递归算法。有什么不好的，老哥你真酸不是酸，空间换时间是有缺陷的，除非你能把缺陷给改善一下没有--我其实想回的不是你那条，是你下面那个，点错了。

user: user-1
content: 引用 6 楼 YGLeeeon 的回复：引用 4 楼 SuperDay 的回复:就是以空间换时间我看楼主第一次接触，我就显摆一下，同时楼主要是有心人会进一步去探究递归算法。有什么不好的，老哥你真酸不是酸，空间换时间是有缺陷的，除非你能把缺陷给改善一下

user: user-2
content: 引用 5 楼 636f6c696e 的回复:这个是最基础的解法，没人说是下效率高啊我是菜鸡，我错了

user: user-2
content: 引用 4 楼 SuperDay 的回复:就是以空间换时间我看楼主第一次接触，我就显摆一下，同时楼主要是有心人会进一步去探究递归算法。有什么不好的，老哥你真酸

user: user-3
content: 这个是最基础的解法，没人说是下效率高啊

user: user-1
content: 就是以空间换时间

user: user-4
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-2
content: 这样递归，效率太低了。有没有发现第1个数和第2个数被调用了8次。第3和第2个数调用了5次，第4和第3调用了3次，第4和第5个数的计算调用了2次。也就是越靠前的数被重复计算的次数越多.一共进行的冗余调用有14次。位数越冗余运算次数就会指数型增长。 递归算法是有套路的，给你来一个最基本的优化方法：分支记忆化 vector<int> record; int func_1(int n) { 	if (n == 1 || n == 2) { 		record[n] = 1; 		return record[n]; 	} 	if (record[n]) 		return record[n]; 	else { 		record[n] = func_1(n-1) + func_1(n-2); 		return record[n]; 	}  } int func(int n) { 	if (n == 1 || n == 2) { 		return 1; 	} 	return func(n - 1) + func(n - 2); }  int main() { 	int N=0; 	cout << "求第N位斐波那契数：" << endl; 	cin >> N; 	record.assign(N+1,0);  	DWORD start; 	start = GetTickCount(); 	cout<<func(N)<<endl; 	cout << "直接递归的用时:" <<(GetTickCount() - start) << endl;  	start = GetTickCount(); 	cout << func_1(N) << endl; 	cout << "优化重复运算的用时："<<(GetTickCount() - start) << endl;  	system("pause"); 	return 0; } 对比一下运算用时： 当运算靠前的斐波那契额数时 当运算大斐波那契数时：

user: user-1
content: 这个程序貌似没错的呀？
user-0 提问: 加密方式

回复:
user: user-0
content: 引用 2 楼 轻箬笠 的回复:第六感告诉我，有没有可能是加密的sqlite 这是sqlserver的数据，查varbinary和BLOB都说是二进制类型数据，这也不是啊。有点晕。

user: user-0
content: 引用 1 楼 user-2 的回复:这个没人知道 看上去都是hexbin数据 但是转过去你也不知道是什么加密的 这一段代表着一个物品，但不知道是怎么转过来的或者怎么对应物品的，所以觉得是有加密或者是转进制了。

user: user-1
content: 第六感告诉我，有没有可能是加密的sqlite

user: user-2
content: 这个没人知道 看上去都是hexbin数据 但是转过去你也不知道是什么加密的
user-0 提问: 最近在学数据结构，求各位大佬指点

回复:
user: user-1
content: 1 应该是链表翻转之前的头结点吧

user: user-0
content: 引用 2 楼 自信男孩的回复:不知道代码，怎么知道输出的1是啥？ 第一个输入不是链表节点个数吗？ 第二行是链表节点， 最后输出的是逆序的链表节点～ 能看到的代码都在第一张图了

user: user-2
content: 不知道代码，怎么知道输出的1是啥？ 第一个输入不是链表节点个数吗？ 第二行是链表节点， 最后输出的是逆序的链表节点～

user: user-3
content: 细节都没有怎么整？
user-0 提问: 关于LPBYTE类型取图片字节大小的问题。

回复:
user: user-1
content: 这就对了

user: user-0
content: 看来我的思路错了，不必用到fopen的。

user: user-0
content: @SuperDay  查阅一些资料解决了~  SIZE_T len=_msize（(LPVOID)ImgRes）;  len即为ImgRes的字节长度。

user: user-1
content: 引用 3 楼 TitBlack 的回复：@user-2 我知道fopen第一个参数是文件名，可是我不能这样操作。因为是不知道文件路径地址的，只能在LPBYTE ImgRes;  这里获取。那你fopen之后返回什么？每一步的值都要看呀

user: user-0
content: @user-2 我知道fopen第一个参数是文件名，可是我不能这样操作。因为是不知道文件路径地址的，只能在LPBYTE ImgRes;  这里获取。

user: user-1
content: 那么ImgRes等于多少呢？

user: user-2
content: fopen第一个参数是文件路径啊。比如a.jpg 当前运行目录下。
user-0 提问: 求解输出倒数第M个元素问题

回复:
user: user-0
content: 原问题英文版本可参考https://codereview.stackexchange.com/questions/98182/mth-to-last-element

user: user-0
content: 我的代码如下，求大佬们看看问题，目测问题出在了读取原字符数组上。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {   const size_t maxLineLen = 1024;   char line [maxLineLen];   while(fgets(line, maxLineLen, stdin) != NULL) {     printf("%s", line);      }   int b[1024];   char *p = NULL;   char *q =NULL; p = strtok(line, " ");    q = strtok(line, " "); q = strtok(NULL, " ");  int i = 0;    while(p) { b[i++] = atoi(p); p = strtok(NULL, " "); }        if (i-1>b[i-1])   printf("%s\n", q[i-1-b[i-1]]);   }
user-0 提问: 关于初级c语言我遇到的一个很不解的状况

回复:
user: user-1
content: 建议贴更多的代码，应该是上面的输入进入到导致case1 里，scanf("%c", &c);了。

user: user-2
content: 你这个排版呀。 这个代码没什么问题，那个1是前面的输入影响，因为是多次输入不好控制

user: user-0
content: 引用 2 楼 自信男孩的回复:建议贴更多的代码，应该是上面的输入进入到导致case1 里，scanf("%c", &c);了。 你好，下面是我完整的代码。谢谢你！

user: user-0
content: 引用 1 楼 user-2的回复:不至于的，你给完整无缺代码，可能是别的地方代码有问题 你好，下面附上了我的完整代码。谢谢你

user: user-0
content: #include<stdio.h>#include<stdlib.h>void insert(int s[],int i,int k,int c);void deleted(int s[],int k,int n);void traversing(int s[],int k);void getelem(int s[],int n);void location(int s[],int k,int n);int main(){    int k,o,count=0;    printf("Please input the initial data number = ");  //输入初始数据个数    scanf("%d",&k);    int a[k+1];    int i,n,x;    printf("please input the operating data number = ");//输入进行操作的数据的次序    scanf("%d",&n);    printf("order:\n1 insert\n2 deleted\n3 traversing\n4 getelem\n5 location");//菜单    printf("\nplease input you choose = ");             //菜单选项    scanf("%d",&o);    printf("please input the array A %d data = ",k-1);  //初始化数组，输入数组各个元素    for(i=0;i<k-1;i++)        {        scanf("%d ",&a[i]);        count++;        }        int c;    switch(o)                                           //选择函数的分支 {        case 1 :printf("please input insert data :\n");scanf("%d",&c);insert(a,k,n,c);break;        case 2 :deleted(a,k,n);break;                   //上方语句的运行就是我疑惑的部分，在程序框中先输入语句，后输出语句        case 3 :traversing(a,k);break;        case 4 :getelem(a,n);break;        case 5 :location(a,k,n);break;    }}void insert(int s[],int k,int i,int c)                 //插入函数{    int j;    for(j=k;j>=i;j--)    {        s[j]=s[j-1];    }    s[i-1]=c;    traversing(s,k+1);}void deleted(int s[],int k,int n)                       //删除函数{    int j;    for(j=n;j<k;j++)    {        s[j-1]=s[j];    }    traversing(s,k-1);}void traversing(int s[],int k)                          //输出打印函数{    int l;    printf("now data = ");    for(l=0;l<k-1;l++)        printf("%d ",s[l]);}void getelem(int s[],int n)                             //取数函数{    printf("%d",s[n]);}void location(int s[],int k,int n)                      //定位函数{    int i;    for(i=0;i<k;i++)    {        if(n==s[i])        {            printf("the goal data WeiXu is :%d",i);        }    }}

user: user-2
content: 不至于的，你给完整无缺代码，可能是别的地方代码有问题
user-0 提问: 急!求解答!哪里出问题了 为什么无法退出?

回复:
user: user-1
content: 引用 7 楼 轻箬笠 的回复:很多人发帖用手机，难道觉得看帖子回帖子的人都是用手机的？还是每次看个帖子，需要把电脑屏幕竖起来？ 关键还是是CSDN贴图代码没有接入自动识别图片朝上方向或不根据手机上传照片的Orientation信息自动旋转图片。

user: user-2
content: 很多人发帖用手机，难道觉得看帖子回帖子的人都是用手机的？还是每次看个帖子，需要把电脑屏幕竖起来？

user: user-3
content: 你可以把代码都贴出来，起码是以函数为单位的吧。 介意贴代码，而不是图片～ 图片还是斜的，不易查看～

user: user-4
content: 你isExit是如何判断退出的

user: user-5
content: 引用 3 楼 qq_45690504 的回复:[quote=引用 1 楼 user-6的回复:]颈椎专用治疗仪，然而没什么用，代码不全 我后面还加了break的[/quote]只要结果不对，任何地方都有可能错。

user: user-0
content: 引用 1 楼 user-6的回复:颈椎专用治疗仪，然而没什么用，代码不全 我后面还加了break的

user: user-0
content: 引用 1 楼 user-6的回复:颈椎专用治疗仪，然而没什么用，代码不全 你好 可以具体说一下哪里不全??

user: user-6
content: 颈椎专用治疗仪，然而没什么用，代码不全
user-0 提问: write函数写入数据到txt文件问题

回复:
user: user-1
content: 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-0
content: 最上面那张图，txt里面写了11111

user: user-2
content: 原先的txt是什么内容？
user-0 提问: 如何得出结构体数组中特定的元素

回复:
user: user-1
content: 星号不需要的吧？

user: user-0
content: for(int i=0;i<9;i++) 	{ 		m=* FileSubM[i].MenuItemStrAddr; 		a.push(m); 		printf("%s\n",a.back()); 	}我这样子写的，但是我运行程序，什么都不显示

user: user-2
content: for(int i=0; i<9; i++) {       FileSubM[i].xxx; } xxx为MenuItemStru你定义的最后元素的名称
user-0 提问: 求助

回复:
user: user-0
content: 引用 2 楼 自信男孩的回复:只会执行第一次时会变成0，后面对其赋值后（赋值非0值），就不会再变成0，除非再次赋值0. 从你的程序里可以发现，当k <= 0时，又对其赋值0了。查一下你的逻辑是否会执行k <= 0就可以了。 谢谢，有时感觉自己眼神有问题，看不到一些东西，活在梦里，

user: user-1
content: 只会执行第一次时会变成0，后面对其赋值后（赋值非0值），就不会再变成0，除非再次赋值0. 从你的程序里可以发现，当k <= 0时，又对其赋值0了。查一下你的逻辑是否会执行k <= 0就可以了。

user: user-2
content: 那就是你的K值<=0了呗
user-0 提问: C语言顺序表的基本操作，求大神指点

回复:
user: user-1
content: 看到一堆乱码，都不想看了，代码格式还是注意下吧

user: user-2
content: 先把代码整理好在贴出来吧

user: user-0
content: 昨天晚上已经改好了

user: user-3
content: 你这代码法看呀

user: user-4
content: 过两天你能看懂你提交的是什么玩意儿么
user-0 提问: 我是c语言初学者，问个问题

回复:
user: user-0

user: user-1
content: 引用 7 楼 INCREIBLE_TIGER的回复:[quote=引用 5 楼 Corey_Xiao的回复:]按照楼上的修改以后，头文件加一个#include<stdlib.h>，然后在return 0之前加一个system("pause"); system(”pause”)有什么用，我没加这个也可以运行[/quote] 我是用VS2017，习惯了，用pause看结果

user: user-0
content: 引用 5 楼 Corey_Xiao的回复:按照楼上的修改以后，头文件加一个#include<stdlib.h>，然后在return 0之前加一个system("pause"); system(”pause”)有什么用，我没加这个也可以运行

user: user-2
content: 必须是在%d之后的呀

user: user-2
content: 你那个scanf的参数，引号都括到后头去了呀

user: user-0
content: 明白了，谢谢老铁，晚上试试

user: user-1
content: 按照楼上的修改以后，头文件加一个#include<stdlib.h>，然后在return 0之前加一个system("pause");

user: user-3
content: printf("%d,c"); 改成 printf("%d",c);

user: user-3
content: scanf("%d，%d,&a,&b"); 改成 scanf("%d，%d",&a,&b);
user-0 提问: c语言

回复:
user: user-0
content: 引用 9 楼 liups的回复:[quote=引用 6 楼 jsc123456wuy 的回复:] [quote=引用 5 楼 liups的回复:]主要是题目不明确。  如果是直接把0或0.0这种直接赋值的，==没有问题。但是如果是三个float或double型的变量a、b、c: c=a-b; if (c==0) 这样的写法就有问题了  面试人出题有二义性 我还是不太懂，为什么if(c==0)就不对呢？[/quote] 判断是否相等和是否为0，因为浮点数不是精确的，所以正确的方法是2、3楼的办法，不能简单地使用数学方法来判断[/quote] 嗯嗯，谢谢，先记着，以后用多了就知道了

user: user-0
content: 引用 7 楼 六道佩恩的回复:你放心，直接判断==0 double变量表示0是0x00 00 00 00   00 00 00 00 ，就是0 很多之所以用误差法表示，是因为默认使用的这种浮点型结构不一定能精确表示，注意，是不一定 只要是整型，只要不太大超范围，是完全可以准确表示的，比如1、2、3、4、5......999...... ，而小数有些能精确表示，比如1.5、1.25、0.125、1.625，忽略整数部分，这种小数部分只要是(1/（2^n）)*m的形式，那就能精确表示，但像1.1这种，就不能精确表示，这个时候可以用误差法锁定一个范围 嗯，知道了，谢谢咯

user: user-1
content: 引用 6 楼 jsc123456wuy 的回复:[quote=引用 5 楼 liups的回复:]主要是题目不明确。  如果是直接把0或0.0这种直接赋值的，==没有问题。但是如果是三个float或double型的变量a、b、c: c=a-b; if (c==0) 这样的写法就有问题了  面试人出题有二义性 我还是不太懂，为什么if(c==0)就不对呢？[/quote] 判断是否相等和是否为0，因为浮点数不是精确的，所以正确的方法是2、3楼的办法，不能简单地使用数学方法来判断

user: user-2
content: 你说的面试首先是不是C语言，其次你要能确定题目，别是你记错了，如果这些都确定没问题的话，我觉得是考官自己的问题

user: user-2
content: 你放心，直接判断==0 double变量表示0是0x00 00 00 00   00 00 00 00 ，就是0 很多之所以用误差法表示，是因为默认使用的这种浮点型结构不一定能精确表示，注意，是不一定 只要是整型，只要不太大超范围，是完全可以准确表示的，比如1、2、3、4、5......999...... ，而小数有些能精确表示，比如1.5、1.25、0.125、1.625，忽略整数部分，这种小数部分只要是(1/（2^n）)*m的形式，那就能精确表示，但像1.1这种，就不能精确表示，这个时候可以用误差法锁定一个范围

user: user-3
content: 0没有误差，可以直接跟0.0比较

user: user-0
content: 引用 5 楼 liups的回复:主要是题目不明确。  如果是直接把0或0.0这种直接赋值的，==没有问题。但是如果是三个float或double型的变量a、b、c: c=a-b; if (c==0) 这样的写法就有问题了  面试人出题有二义性 我还是不太懂，为什么if(c==0)就不对呢？

user: user-1
content: 主要是题目不明确。  如果是直接把0或0.0这种直接赋值的，==没有问题。但是如果是三个float或double型的变量a、b、c: c=a-b; if (c==0) 这样的写法就有问题了  面试人出题有二义性

user: user-0
content: 引用 楼主 jsc123456wuy的回复:如何判断一个double类型的变量为0？？ 我一个同学就被面试了这题，好像是不能跟0.0直接==

user: user-0
content: 引用 2 楼 自信男孩的回复:double df;  if (fabs(df) < 1e-15)     printf("df is zero!\n"); 供参考～ 嗯，知道了，谢谢

user: user-4
content: double df;  if (fabs(df) < 1e-15)     printf("df is zero!\n"); 供参考～
user-0 提问: 求哪位大神帮忙做下

回复:
user: user-1
content: 估计老师刚开始讲概念。哈哈，想想当年，自己第一次编程，求圆面积和周长的c代码，用了差不多两小时。

user: user-0
content: 引用 3 楼 自信男孩的回复:这是什么问题？我都怀疑这是不是问题，就这么简单吗～？！ 大佬，我刚学c没几天

user: user-0
content: 引用 3 楼 自信男孩的回复:这是什么问题？我都怀疑这是不是问题，就这么简单吗～？！ 大佬，我刚学c没几天

user: user-2
content: 这是什么问题？我都怀疑这是不是问题，就这么简单吗～？！

user: user-3
content: 不知道你说的是用C还是C++编，我用C编了一个 #include<stdio.h>  int main(void) { 	int a, b,sum;  	printf("Enter two numbers: "); 	scanf("%d %d", &a, &b); 	sum = a + b;  	printf("%d\n",  sum);  	return 0; }

user: user-4
content: #define _CRT_SECURE_NO_WARNINGS #include "iostream"  using namespace std;  int main() { 	int a, b,count; 	cin >> a >> b; 	count = a + b;  	cout<<count<<endl; 	system("pause");	 	return 0; }
user-0 提问: 那里错了？

回复:
user: user-0
content: 谢谢了。。。。。。。

user: user-0
content: 请问DEV-C++怎么安装

user: user-1
content: 目测没有问题，要说的可能是sleep，这是linux里的函数，Windows上一般用windows.h中的Sleep。 然后，建议你换个IDE，用DEV-C++吧

user: user-0
content: 引入是什么？。。。。

user: user-0
content: 要重新发一张吗？。。。。

user: user-2
content: 你正好没有把编译失败的原因贴出来，关键的信息没有出来。 从你的代码里可以推断可能sleep函数没有生命吧，应该引入<unistd.h>

user: user-0
content: 换什么好？。。。。。。。

user: user-3
content: 简单的，装一个vs2008，或者2010……这些版本都可以

user: user-0
content: 啊            我不会啊

user: user-4
content: 换编译器（凑字数）

user: user-0
content: 有人吗？。。。。。。。。

user: user-4
content: 引用 10 楼 weixin_45677282 的回复:我这才刚学啊.....就卡在这里了！我要怎么办照着课本敲例子。

user: user-0
content: 我这才刚学啊.....就卡在这里了！我要怎么办

user: user-5
content: 引用 8 楼 weixin_45677282 的回复:引入是什么？。。。。  头文件
user-0 提问: C语言小白，大佬求解。

回复:
user: user-1
content: 数据溢出是一个问题。int类型数据表示的数据范围，即2^31-1。 我觉得楼主的代码不严谨也是一个大问题。既然你这个程序是找零的。怎么可以第二个数小于第一个数呢，程序里面不应该判断下a<price，让用户重新输入吗？

user: user-2
content: 数据溢出了，建议查一下int类型数据表示的数据范围，即2^31-1。 如果用一个小的值就会得出你想要的结果，这个小的值是指小于int表示范围的

user: user-3
content: 数据溢出了，整型保存不了那么大的数据，
user-0 提问: 初学c语言 不太明白这个题目中的均值为什么一直算不对

回复:
user: user-0
content: 引用 1 楼 ~稻草人~ 的回复：18行 ave=((float)(a+b....))/10； 不同的数据类型，在进行运算时，会自动转换类型。但最好还是人工强制转换，能避免很多暗雷。 在大公司中敲代码，不管用不用转换，反正运算时都自觉多敲几个关键字，全人工强制转换，因为经手的人多了，鬼知道某个变量在上下文中被别的同事怎处理。谢谢

user: user-1
content: 18行 ave=((float)(a+b....))/10； 不同的数据类型，在进行运算时，会自动转换类型。但最好还是人工强制转换，能避免很多暗雷。 在大公司中敲代码，不管用不用转换，反正运算时都自觉多敲几个关键字，全人工强制转换，因为经手的人多了，鬼知道某个变量在上下文中被别的同事怎处理。
user-0 提问: C语言用if语句，else那出现“应输入一个语句”

回复:
user: user-1
content: 楼上正解，良好的编程习惯有助于少出错误

user: user-2
content: if后面如果不加大括号，那么if后面的第一条语句属于if的，多余的一条语句就是其他的了，就会导致后面else不知道和那个if匹配了。  因此建议在if后面的多条语句用大括号括起来，这样后面的else才能找到和其配对的。

user: user-3
content: if和else之间如果有多条语句应该将这些语句使用{包裹}，else后面的多条语句应该使用{}名裹，如果没有语句则不使用else

user: user-0
content: 引用 2 楼 user-4的回复:if () { } else { } 啊谢谢谢谢谢谢谢谢谢谢谢谢

user: user-4
content: if () { } else { }

user: user-4
content: if () { } else  { }
user-0 提问: C语言用if语句，else那出现“应输入一个语句”

回复:
user: user-1
content: 这个if-else语句就是“如果。。。。否则”，你说完“如果xxx ,  就xxx”，这没问题，也就是只用一个if，但如果你说“如果xxx，就xxx，否则，”，然后你就没话说，这肯定不行啊，这里的否则就是你的else，你首先要看是不是需要这个“否则”，需要你就写上else，不需要就不写，如果需要，写上else，然后呢，“否则”你要怎样呢，就像说话一样， 你得用代码描述出来

user: user-2
content: 可能网速慢发重了，抱歉

user: user-2
content: printf直接用变量名就行不用&，还有如果要用else（格式如果是个块的话）： if（条件）{   语句      }    else   //要让else有对应的if，也就是说他两之间                语句                   只能有一条语句，否则报错

user: user-2
content: printf直接用变量名就行不用&，还有如果要用else（格式如果是个块的话）： if（条件）{   语句      }    else   //要让else有对应的if，也就是说他两之间只                 语句                   能有一条语句
user-0 提问: 求大佬们帮忙做下，如何读取字符数组并转换成整数数组

回复:
user: user-1
content: 引用 5 楼 gouyanfen 的回复:[quote=引用 4 楼 轻箬笠 的回复:]   while(p)//原来的这里写错了 { b[i++] = atoi(p); p = strtok(NULL, " "); }   char *delim = ", ";   strtok_s(temp_str,delim,&p); 分割符字符串不是可以一次定义多个的吗，不用改吧，不管逗号空格一次都定义在分割串里就行了。 建议用strtok_s[/quote] 我把这题当成两个题目，所以要改下。如果你当成一个的话，也没关系

user: user-2
content: 引用 4 楼 轻箬笠 的回复:  while(p)//原来的这里写错了 { b[i++] = atoi(p); p = strtok(NULL, " "); }   char *delim = ", ";   strtok_s(temp_str,delim,&p); 分割符字符串不是可以一次定义多个的吗，不用改吧，不管逗号空格一次都定义在分割串里就行了。 建议用strtok_s

user: user-1
content: while(p)//原来的这里写错了 { b[i++] = atoi(p); p = strtok(NULL, " "); }

user: user-1
content: 如果是逗号的话，改成 p = strtok(a, ","); p = strtok(NULL, "");

user: user-1
content: 用strtok char a[] = "1 2 3 4"; int b[1024] = {0}; char *p = NULL; p = strtok(a, " "); int i = 0; while(!p) { b[i++] = atoi(p); p = strtok(NULL, " "); } for (int j = 0; j < i; j++) printf("%d\n", b[j]);

user: user-3
content: 题还是自己做,这里给些提示 1.字符数组是以'\0'结束的,判断'\0'可以获取字符数 2.字符转整数减去'0'这个字符就可以了,具体自行百度ascii码 3.跳过','号的计算就是了,判断','号方法步骤2中的值大于9
user-0 提问: 单链表创头节点

回复:
user: user-1
content: 引用 4 楼 weixin_45311188的回复:[quote=引用 3 楼 飞奔的小强sky的回复:]一个节点的next保存的是下一个节点的地址呀。 指向空，就说明后边没有呗 还是没懂第一步代表的是创建了一个头节点 第二步 head的next不是相当于头节点嘛？ 第三步 p不相当于就是head了嘛？[/quote] 你不要死心眼，管他头节点尾节点，你只要知道哪个指针指向了哪个节点，就行了。

user: user-0
content: 引用 3 楼 飞奔的小强sky的回复:一个节点的next保存的是下一个节点的地址呀。 指向空，就说明后边没有呗 还是没懂第一步代表的是创建了一个头节点 第二步 head的next不是相当于头节点嘛？ 第三步 p不相当于就是head了嘛？

user: user-1
content: 一个节点的next保存的是下一个节点的地址呀。 指向空，就说明后边没有呗

user: user-0
content: 引用 1 楼 飞奔的小强sky的回复:你圈出来的是创建头节点，p指向的不该说是头节点，应该说尾节点，因为现在是空的，所以p指向head 首先蟹蟹你！对，现在就只有这个头结点，其他都没有，我想问一下p=head代表的是p指向head吗？head-＞next代表的是什么？

user: user-1
content: 你圈出来的是创建头节点，p指向的不该说是头节点，应该说尾节点，因为现在是空的，所以p指向head
user-0 提问: 谁可以为我解答一下c语言运算级...

回复:
user: user-1
content: 括号优先级最高，取余%、乘法*和除法/是同一优先级的，加法+和减法-优先级最低。 所以 3应该是 5*4%3*2从左向右计算，结果为4 4应该是 5*6%7/8=16

user: user-2
content: 百度运算符优先级，自己查
user-0 提问: C语言调用C++利用外部API写的一个函数，如何做

回复:
user: user-1
content: 引用 7 楼 Henley_Liang 的回复：[quote=引用 6 楼 SuperDay 的回复:] [quote=引用 5 楼 Henley_Liang 的回复：][quote=引用 3 楼 SuperDay 的回复:] 楼主所说的这个外部API是什么意思呢？ 一个官方的API,用C++写的[/quote]那就是动态连接库吧？可以查看函数列表吧？[/quote]  官方没有封装成dll,是一个C++的类,有头文件,源文件.我自己基于这个写了一个类,然后再用我自己的类,写了一个函数 [/quote]可以自己导出dll，这样调用的时候就不会有前缀了

user: user-0
content: 引用 6 楼 SuperDay 的回复:[quote=引用 5 楼 Henley_Liang 的回复：][quote=引用 3 楼 SuperDay 的回复:] 楼主所说的这个外部API是什么意思呢？ 一个官方的API,用C++写的[/quote]那就是动态连接库吧？可以查看函数列表吧？[/quote]  官方没有封装成dll,是一个C++的类,有头文件,源文件.我自己基于这个写了一个类,然后再用我自己的类,写了一个函数

user: user-1
content: 引用 5 楼 Henley_Liang 的回复：[quote=引用 3 楼 SuperDay 的回复:] 楼主所说的这个外部API是什么意思呢？ 一个官方的API,用C++写的[/quote]那就是动态连接库吧？可以查看函数列表吧？

user: user-0
content: 引用 3 楼 SuperDay 的回复:楼主所说的这个外部API是什么意思呢？ 一个官方的API,用C++写的

user: user-2
content: 调用约定 _stdcall

user: user-1
content: 楼主所说的这个外部API是什么意思呢？

user: user-3
content: 是不是需要在每个导出函数前面放一个__stdcall？

user: user-4
content: 如果C的代码调用C++的接口，建议用C++编译器去编译～
user-0 提问: C语言--求助

回复:
user: user-1
content: #include<stdio.h>  int main() {     int l_,r_;     printf("please input l and r data:\n");     scanf("%d%d", &l_,&r_);      int i,t,mod;     int mod_cnt =  r_ - l_ + 1;     for(i = l_;i<=r_;i++ )     {         t = i;         while(t != 0 )         {             mod = t % 10;             if(mod != 0 && i % mod != 0)  //保证mod不为0，否则会导致i % 0；             {                 mod_cnt-=1;                 break;             }             t =t /10;         }     }     printf("输出:");     printf("\t %d\n",mod_cnt);      return 0; } 供参考～
user-0 提问: 请问大大们C能编写哪些类型的小游戏

回复:
user: user-1
content: 《Visual C++ 游戏开发经典案例详解》

user: user-2
content: **ncurses** https://invisible-island.net/ncurses/ https://c-for-dummies.com/ncurses/source_code/index.php  **pdcurses** https://pdcurses.org/  两个库应该是兼容的

user: user-3
content: 啥类型都能写 RPG类的控制台DEMO也可以 游戏重点还是创意  技术点不是太复杂的 时间够都能写

user: user-4
content: 推箱子，我做过

user: user-5
content: 小游戏 1024

user: user-6
content: 一个月时间，只能搞个简单的，我记得我以前读书时候，搞了24程序

user: user-0
content: 引用 6 楼 liups 的回复：[quote=引用 3 楼 weixin_45693609 的回复:] [quote=引用 1 楼 liups 的回复:] 贪吃蛇、俄罗斯方块等可以用字符表示的界面，不要去搞真正的图形界面。（那种简易的图形库还是算了吧）  另外，组员那些是浮云，还是自己搞吧  老师是让我们必须分组 主要目的是团队合作吧可能 其实现在最困扰我的是这种小游戏怎么分工做。。。[/quote] 关键得靠自己，其他人让他们混下就好[/quote]嗯嗯嗯 全靠自己 谢谢大大～

user: user-7
content: 引用 3 楼 weixin_45693609 的回复:[quote=引用 1 楼 liups 的回复:] 贪吃蛇、俄罗斯方块等可以用字符表示的界面，不要去搞真正的图形界面。（那种简易的图形库还是算了吧）  另外，组员那些是浮云，还是自己搞吧  老师是让我们必须分组 主要目的是团队合作吧可能 其实现在最困扰我的是这种小游戏怎么分工做。。。[/quote] 关键得靠自己，其他人让他们混下就好

user: user-8
content: 还有就是猜字游戏～

user: user-8
content: 剪子包袱锤～

user: user-0
content: 引用 1 楼 liups 的回复:贪吃蛇、俄罗斯方块等可以用字符表示的界面，不要去搞真正的图形界面。（那种简易的图形库还是算了吧）  另外，组员那些是浮云，还是自己搞吧  老师是让我们必须分组 主要目的是团队合作吧可能 其实现在最困扰我的是这种小游戏怎么分工做。。。

user: user-9
content: 扫雷吧。网上都有源码 C语言实现扫雷——详解

user: user-7
content: 贪吃蛇、俄罗斯方块等可以用字符表示的界面，不要去搞真正的图形界面。（那种简易的图形库还是算了吧）  另外，组员那些是浮云，还是自己搞吧
user-0 提问: 小白求教

回复:
user: user-0
content: 引用 11 楼 qq_39932153的回复:可以这么理解，但是在你写的程序里右边才是可以修改的左值，无定义，他就随机选取数字，可能也是算法的问题之后便一次与另一次不同。还有就是养成好习惯还是写return 0； 感谢你的回复，让我明白了他的原因

user: user-0
content: 引用 13 楼 自信男孩的回复:[quote=引用 6 楼 weixin_44930231 的回复:] [quote=引用 3 楼 自信男孩的回复:]if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～ 用了双等号比较运算符，运行之后确实什么都不显示了，但为什么用单等号之后其可以执行并得到一个值呢？虽然这个值一直在变。 也是因为他是一个随机值？ 随着我的类型改变他的值也在变，不仅仅是运行一次就变一次。而且都是有值，不是什么都不显示[/quote] 首先，你的celsius没有初始化呢，这个值随机的。 其次，如果不用双等号，那么等于celsius被赋值为32759，再根据真假规则：0是假，非0是为真。因此会执行后面的运算。 如果用双等号，那么这个celsius要与32759，如果值不等于32759，就不会执行if的语句块。[/quote] 谢谢你的回复，让我明白了这个问题。 感谢

user: user-1
content: 引用 6 楼 weixin_44930231 的回复:[quote=引用 3 楼 自信男孩的回复:]if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～ 用了双等号比较运算符，运行之后确实什么都不显示了，但为什么用单等号之后其可以执行并得到一个值呢？虽然这个值一直在变。 也是因为他是一个随机值？ 随着我的类型改变他的值也在变，不仅仅是运行一次就变一次。而且都是有值，不是什么都不显示[/quote] 首先，你的celsius没有初始化呢，这个值随机的。 其次，如果不用双等号，那么等于celsius被赋值为32759，再根据真假规则：0是假，非0是为真。因此会执行后面的运算。 如果用双等号，那么这个celsius要与32759，如果值不等于32759，就不会执行if的语句块。

user: user-2
content: 只要输入的是数字不为0就是为真，然后随机选一个数字。我是这样理解的

user: user-2
content: 可以这么理解，但是在你写的程序里右边才是可以修改的左值，无定义，他就随机选取数字，可能也是算法的问题之后便一次与另一次不同。还有就是养成好习惯还是写return 0；

user: user-0
content: 引用 7 楼 qq_39932153的回复:这个也就可以相当于if（（celsius=32759）！= 0）。 也就是说if的条件判断式只判断0与1，而这里直接赋值32759，为真,然后执行语句块，但因为fahrenheit没有赋值，依据编译器规则有的报错，有的赋随机值，而赋值语句执行时从右至左，先计算了左边再赋值于右边，so我看到他的值在变，

user: user-0
content: 引用 3 楼 自信男孩的回复:if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～ 也就是说if的条件判断式只判断0与1，而这里直接赋值32759，为真,然后执行语句块，但因为fahrenheit没有赋值，依据编译器规则有的报错，有的赋随机值，而赋值语句执行时从右至左，先计算了左边再赋值于右边，so我看到他的值在变.  我这样理解是否正确呢

user: user-3
content: 赋初值就行了

user: user-2
content: 这个也就可以相当于if（（celsius=32759）！= 0）。

user: user-1
content: if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～

user: user-4
content: 1、数字的操作，类型怎么是char 2、if语句的判断用 == 还有就是问下这个程序是想干什么的？

user: user-5
content: 给fahrenheit赋个初值试一下

user: user-0
content: 引用 3 楼 自信男孩的回复:if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～ 用了双等号比较运算符，运行之后确实什么都不显示了，但为什么用单等号之后其可以执行并得到一个值呢？虽然这个值一直在变。 也是因为他是一个随机值？ 随着我的类型改变他的值也在变，不仅仅是运行一次就变一次。而且都是有值，不是什么都不显示

user: user-0
content: 引用 2 楼 阿大古 古古古的回复:1、数字的操作，类型怎么是char 2、if语句的判断用 == 还有就是问下这个程序是想干什么的？ 书上写的温度转换程序，然后我自己给他修改各个语句，我还用过int double，删减增加各种语句，玩的挺开心😄到这就晕了😖。 用了双等号比较运算符，运行之后什么都不显示了，但为什么用单等号之后其可以执行并得到一个值呢？虽然这个值一直在变。 而且if的条件判断式只要是一个判断式就可以，哪怕这个判断式与整个程序无关。

user: user-0
content: 给Fahrenheit赋值之后结果稳定了，不在变化.
user-0 提问: 杭电1001问题

回复:
user: user-1
content: scanf("%d",&n)！=EOF; 这个表达式看着是一个判断语句，但是又没放在if/while/for等等里面，没啥意义。 最终还是跟EOF没关系

user: user-0
content: 引用 1 楼 自信男孩的回复:楼主的代码没看出有跟EOF有关系的地方～ #include<stdio.h>  int main() {   int sum=0;   int i=1;   int n;  scanf("%d",&n)！=EOF;  while(i<=n) {   sum=sum+i;   i++; }     printf("%d",sum);     return 0; }

user: user-1
content: 楼主的代码没看出有跟EOF有关系的地方～
user-0 提问: 全局变量初始化时，一定要给其初始化为0？，其他值不行么？

回复:
user: user-1
content: 最近在学的“程序的组成、存储与运行”内容好像可以回答这个问题。没被初始化为0的全局变量会被存放的RW-data：Read Write data，即可读写数据域，掉电后会被放在ROM中（我学的是MDK的编译过程哈），掉电不消失。而被初始化为0的全局变量，掉电是会消失的

user: user-2
content: int i=1; char s[10]="hello"; struct _st {  int v;  char t[10]; } st={  1,       //v  "init"  //t }; int main() {} 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-3
content: 引用 10 楼 lin5161678 的回复:[quote=引用 7 楼 liups 的回复:] 但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0[/quote] 再补充一句，为什么C++(本贴是C)中允许把变量定义放在非开头部分，应该和我11楼说的情况有关

user: user-3
content: 引用 10 楼 lin5161678 的回复:[quote=引用 7 楼 liups 的回复:] 但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0[/quote] 如果有多个变量，那么初始化为有效值的地方和真正使用它的地方可以相隔很远，这种情况下如果按你的做法，逻辑上相关的代码距离很远，个人认为不合适。  所以说我倾向leader的做法：定义时一律初始化为0。后面真正使用时再初始化为有效值。虽然多了一次赋值操作，但是逻辑上更佳。

user: user-4
content: 引用 7 楼 liups 的回复:但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0

user: user-5
content: 没有这样的道理 如果全局变量是个标志位，谁规定标志位初始值一定是0？

user: user-6
content: 全局变量初始化除了0之外，都可以赋值。为什么要抛出0（还有就是NULL）呢， 因为即使编程人员不给全局变量初始化0，系统也会自动给其初始化为0（或NULL）

user: user-3
content: 楼主是把你leader问住了啊！其实公司可以这么规定，但是leader应该只是自己的习惯。 通用的规定应该是必须初始化，但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。  总之，不好说对错。个人倾向leader

user: user-4
content: 如果是团队编程规范 照做就是 哪怕是单纯为了好看 如果是他个人习惯 不听也无所谓 没什么必须初始化为0的要求  C的话 倒是有要求必须用编译期常量初始化 没别的要求了

user: user-7
content: 应该可以随便初始化吧，有时候我们会初始化成1

user: user-8
content: 好像是一种不成文的规定吧。数值型初始化为0，指针型初始为null。初始化后，再重新赋一个有意义的值。主要是怕忘记初始化了。 反正我都是这么干的。

user: user-8
content: 引用 14 楼 lin5161678 的回复:[quote=引用 11 楼 liups 的回复:] [quote=引用 10 楼 lin5161678 的回复:] [quote=引用 7 楼 liups 的回复:] 但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0[/quote] 如果有多个变量，那么初始化为有效值的地方和真正使用它的地方可以相隔很远，这种情况下如果按你的做法，逻辑上相关的代码距离很远，个人认为不合适。  所以说我倾向leader的做法：定义时一律初始化为0。后面真正使用时再初始化为有效值。虽然多了一次赋值操作，但是逻辑上更佳。[/quote]你在函数内部对全局变量进行初始化 那么第二次调用这个函数的时候 你怎么确保这个全局变量不会被重复初始化 ???[/quote] 我觉得是否可以从方便管理的角度去理解。如果每个文件里面都有全局变量，对他们进行赋值的时候，进行统一管理。 C++的暂时没碰到。C语言的开源项目，很多情况下，每个.c文件都有全局变量。对于开发者来说，可能比较方便，但是阅读代码是蛮麻烦的，要反复的去找。如果统一管理，我觉得会带来阅读上的便利。

user: user-4
content: 引用 11 楼 liups 的回复:[quote=引用 10 楼 lin5161678 的回复:] [quote=引用 7 楼 liups 的回复:] 但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0[/quote] 如果有多个变量，那么初始化为有效值的地方和真正使用它的地方可以相隔很远，这种情况下如果按你的做法，逻辑上相关的代码距离很远，个人认为不合适。  所以说我倾向leader的做法：定义时一律初始化为0。后面真正使用时再初始化为有效值。虽然多了一次赋值操作，但是逻辑上更佳。[/quote]你在函数内部对全局变量进行初始化 那么第二次调用这个函数的时候 你怎么确保这个全局变量不会被重复初始化 ???

user: user-9
content: 我觉得这是他的一种编码习惯（而这也可能是他不回答你的原因）。  所有的都初始化为 0，只在需要的地方改变。

user: user-10
content: 那如果不是数值型的变量呢？比方一个字符串或者结构甚至数组什么。你这个leader估计也是个半桶水

user: user-11
content: 将变量初始化为一个有意义的初始值即可，谁规定的一定要初始化为0
user-0 提问: 自学数据结构提一个简单问题

回复:
user: user-1
content: 如果你只是查询，不改变首尾的标识就好了

user: user-1
content: 引用 2 楼 qq_45688408 的回复:谢谢 那这样的话数组元素不就丢失了吗 队列就是前出后进的，既然已经出去了，里面的元素就没有用了。

user: user-0
content: 谢谢 那这样的话数组元素不就丢失了吗

user: user-1
content: 数组是用于存数据的，而队列的位置和长度是有对头和队尾的标识来表示的， 出队就会改变队头的表示（index），虽然元素还在数组里，但是对于队列 来讲出队的元素已经无效了。后面入队会将其覆盖～
user-0 提问: 求大神帮忙！

回复:
user: user-1
content: 总有一个指针指向链表的第一个节点把，挨个去判断，判断到大于等于就找到插入位置了啊

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

user: user-3
content: 无头节点啥意思？那怎么知道链表的切入点？  楼主的描述是没有哨兵的链表吧
user-0 提问: char二维数组，输出不解，乱码问题

回复:
user: user-1
content: 引用 6 楼 提及 的回复:赵4老师的方法最好，不接受反驳  引用 5 楼 tjh12010 的回复: 货卖识家。

user: user-2
content: 引用 7 楼 秋的红果实 的回复:感谢各位，知道这个\0了  那个方框，该怎么解释呢？ 那个方框其实就是乱码～

user: user-3
content: 引用 7 楼 秋的红果实的回复:感谢各位，知道这个\0了  那个方框，该怎么解释呢？ 1：方框意思是不能识别的数据。 2：printf输出字符串数据(%s)，直至遇到'\0'才结束输出。 3：'\0'对于字符串，表示结束符号，占用一字节，所以定义时要[4]； 4：'\0'，就是数据0； 5：字符数组单个赋值时，要人工加结束符。可以b[4]='\0'；也可以b[4]=0； 6：特殊的，b[ ]=“ABC”；不用人工加结束符，也不用在下标中标明数组大小。双引号的作用是，为其中字符串数据自动加'\0'，在内存中开辟存储空间，并把存储地址赋给左边变量。

user: user-0
content: 感谢各位，知道这个\0了  那个方框，该怎么解释呢？

user: user-4
content: 赵4老师的方法最好，不接受反驳  引用 5 楼 tjh12010 的回复:

user: user-5
content: #include <stdio.h> int main() {	 	char b[][4]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};      for(int i=0;i<3;i++)     {         printf("%s\n",b[i]);       } 	return 0; } 这个方法是最好的！！！！ 如下   是你要的结果吧。。

user: user-2
content: 引用 3 楼 weixin_40290083 的回复:char b[][4]={{'A','B','C','\0'},{'D','E','F','\0'},{'G','H','I','\0'}};      for(int i=0;i<3;i++)     {         printf("%s\n",b[i]);       }  试试这个  char b[][4]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};  这样也是可以，把列数编程4（至少要变成4），这样前三个字符都是初始化的，最后一个会自动补0.

user: user-6
content: char b[][4]={{'A','B','C','\0'},{'D','E','F','\0'},{'G','H','I','\0'}};      for(int i=0;i<3;i++)     {         printf("%s\n",b[i]);        }  试试这个

user: user-1
content: printf("%.3s\n",b[i]);  或者 printf("%.*s\n",3,b[i]);  应该也行。

user: user-7
content: 没有正确的结束符，给二维数组每一行末尾加一个'\0'就行了
user-0 提问: 输出出现次数最小的字母，如果出现次数一样则输出asiii的最小字母

回复:
user: user-1
content: #include "stdio.h" #include "string.h" int main( void ) { 	char str[]="AGSKHAGSIYAwewqead1328188ashdnbnmxhjgzydae2iu872187adgsa"; 	int C[127]={0}; 	int i=0, min=0, r=0; 	for( i=0 ; i<strlen(str) ; i++ ) 		C[ str[i] ]++; 	for( i=126 ; i>0 ; i-- ) 	{ 		if( (min==0 && C[i]>0) || (C[i]>0 && C[i]<=min ) ) 		{ 			min = C[i]; 			r=i; 		} 	} 	printf("字符%c %d次\n", r , min ); 	return 0; }  结果：字符3  1次 复杂度O( n ) 思路：遍历一次str，每个字符出现一次就记录一次到C数组对应的位置，C数组的小标对应了该字符的ASCII，C数组的值即该字符出现的次数，然后，从C数组的最后往前遍历，出现在最后的最小的非0值就是最小且次数最少的字符，其下标就是该字符的ASCII

user: user-2
content: 引用 1 楼 user-5 的回复:1.a-z,26个字母 2.创建26大小的int数组对应a-z 3.然后遍历输入 4.每出现一个字母对应数组位置的数字+1 5.最后遍历数组 6.取数组中第一个最大值. 还需要考虑大写字母哦。 65～90为26个大写英文字母，97～122号为26个小写英文字母

user: user-3
content: 引用 3 楼 the_sea1 的回复:删除法，从第一个字符开始删除与它相同的字符，计算删除后的字符串长度，得出该字符出现的次数。以此类推计算其它字符出现的次数，比较求得出现次数最少的字符。这种方法相对耗时较长。

user: user-4
content: 删除法，从第一个字符开始删除与它相同的字符，计算删除后的字符串长度，得出该字符出现的次数。以此类推计算其它字符出现的次数，比较求得出现次数最少的字符。

user: user-5
content: 1.a-z,26个字母 2.创建26大小的int数组对应a-z 3.然后遍历输入 4.每出现一个字母对应数组位置的数字+1 5.最后遍历数组 6.取数组中第一个最大值.
user-0 提问: 求大神看看程序没问题，就是编译有错误，怎么解决

回复:
user: user-1
content: 引用 6 楼 ssdcs_ 的回复:这些改法我都试过了，现在就感觉是编译环境的问题，需要一个C++ Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-0
content: 这些改法我都试过了，现在就感觉是编译环境的问题，需要一个C++

user: user-2
content: 你的程序中有一个错误：把scanf("%d", val);改为scanf("%d", &val); 另外，把int j;改为//int j;这个变量没有用上。

user: user-3
content: 引用 3 楼 ssdcs_ 的回复:我把你这个程序复制运行在我的C++上也是那个错误，感觉是我的C++有问题，程序调用缺东西，你能把你的C++给我发一下么，谢谢。 在我的环境里编译没问题～

user: user-0
content: 这个完整版的怎么用哇，我之前都是用的阉割版，不会用这个

user: user-0
content: 我把你这个程序复制运行在我的C++上也是那个错误，感觉是我的C++有问题，程序调用缺东西，你能把你的C++给我发一下么，谢谢。

user: user-3
content: #include <stdio.h> #include <stdbool.h>  bool IsPrime(int m) {     int i;     for (i=2; i<m; ++i)     {         if (0 == m%i)             break;     }     if (i >= m)         return true;     else         return false; }  int main(void) {     int val;     int i;     int j;      //scanf("%d", val);     scanf("%d", &val);     for (i=2; i<val; ++i)     {         if (IsPrime(i))             printf("%d\n", i);     }      return 0; }   供参考～

user: user-4
content: 两种方法： 1. 扩展名改成.cpp 2. 开头加入#include <stdbool.h>  另外，你的程序中有一个错误： scanf("%d", val); 应该是： scanf("%d", &val);
user-0 提问: 求一个数是否是素数

回复:
user: user-1
content: Finding prime numbers - Kenneth Haugland  Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

user: user-0
content: 引用 1 楼 自信男孩的回复:改一下 if (w = 0) //此处应该用w == 0 感谢你(❁´ω`❁)

user: user-0
content: 引用 3 楼 小熊之怒的回复:for循环里面加打印，如果进不去for循环。for循环之前加打印，打印sqrt相关的东西。检查sqrt的结果。  sqrt的返回值是double类型，如果用int转，会是个很大的值。和编译器也有关。所以加打印调试。 谢谢你哦(´-ω-`)

user: user-0
content: 引用 3 楼 小熊之怒的回复:for循环里面加打印，如果进不去for循环。for循环之前加打印，打印sqrt相关的东西。检查sqrt的结果。  sqrt的返回值是double类型，如果用int转，会是个很大的值。和编译器也有关。所以加打印调试。 好像和这个打印没有什么关系，问题我找到了，是循环里else的事儿，去掉else就好了，因为else的话循环进行不下去

user: user-2
content: for循环里面加打印，如果进不去for循环。for循环之前加打印，打印sqrt相关的东西。检查sqrt的结果。  sqrt的返回值是double类型，如果用int转，会是个很大的值。和编译器也有关。所以加打印调试。

user: user-0
content: 引用 1 楼 自信男孩的回复:改一下 if (w = 0) //此处应该用w == 0 改了，但是还是不对，只能运行到输入的那一部分，循环处不执行

user: user-3
content: 改一下 if (w = 0) //此处应该用w == 0
user-0 提问: 有没有类似signal()的函数，可以向里面传递额外参数的那种？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:没有好的办法时，不得已就用外部变量吧  #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h>  //假设x是某结构体指针 char *x;  void sighandler(int);  int main(void) {    x = malloc(128);    signal(SIGINT, sighandler);     while (1)     {       sleep(1);    }     return 0; }  void sighandler(int signum) {    puts("free x");    free(x);    exit(1); }   我去试试，谢谢了

user: user-1
content: 没有好的办法时，不得已就用外部变量吧  #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h>  //假设x是某结构体指针 char *x;  void sighandler(int);  int main(void) {    x = malloc(128);    signal(SIGINT, sighandler);     while (1)     {       sleep(1);    }     return 0; }  void sighandler(int signum) {    puts("free x");    free(x);    exit(1); }
user-0 提问: 大神帮忙看一下哦

回复:
user: user-1
content: #include <stdio.h> int main() {	 	printf("char   = %d , 二进制位数 = %d\n",sizeof(char)  ,sizeof(char)*8);   	printf("int    = %d , 二进制位数 = %d\n",sizeof(int)   ,sizeof(int)*8);  	printf("long   = %d , 二进制位数 = %d\n",sizeof(long)  ,sizeof(long)*8); 	printf("float  = %d , 二进制位数 = %d\n",sizeof(float) ,sizeof(float)*8);  	printf("double = %d , 二进制位数 = %d\n",sizeof(double),sizeof(double)*8);  	return 0; }