Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请问下列程序中的x应如何赋值，才能输出正确结果！！

回复:
user: user-0
content: 引用 2 楼 qybao的回复:x不需要输入，而且你少了最后一个else（或者少了个默认值），比如所有的分支都不满足，那x就没有值了。 还有打印格式不对，你这样只是打印一位长度，所以打印结果不对 另外，你的计算公式是不是不对？ int main() {     float x=0.0f, y; //这里要么给x赋个初始值     scans("%f", &y);     if (y<=100000)     {         x = y*0.1f;     }     else if (y>100000 && y<=200000)      {         x = 100000*0.1f + (y-100000)*0.075f; //10万的部分应该是固定的吧，不是用y乘0.1吧？     }     else if (y>200000 && y<=400000)     {         x = 100000*0.1f + 100000*0.075f + (y-200000)*0.05;     }     esle     {         x = 0.0f; //要么这里加个else分支给x赋个默认值     }     printf("%.0f", x); //打印格式，这里给你保留到整数部分     return 0; } 不过确实少了用来限定y>4000000的一个分支！多谢指教！说实话，就怕一个人在那儿抓瞎！

user: user-0
content: 引用 2 楼 qybao的回复:x不需要输入，而且你少了最后一个else（或者少了个默认值），比如所有的分支都不满足，那x就没有值了。 还有打印格式不对，你这样只是打印一位长度，所以打印结果不对 另外，你的计算公式是不是不对？ int main() {     float x=0.0f, y; //这里要么给x赋个初始值     scans("%f", &y);     if (y<=100000)     {         x = y*0.1f;     }     else if (y>100000 && y<=200000)      {         x = 100000*0.1f + (y-100000)*0.075f; //10万的部分应该是固定的吧，不是用y乘0.1吧？     }     else if (y>200000 && y<=400000)     {         x = 100000*0.1f + 100000*0.075f + (y-200000)*0.05;     }     esle     {         x = 0.0f; //要么这里加个else分支给x赋个默认值     }     printf("%.0f", x); //打印格式，这里给你保留到整数部分     return 0; } 不过还是多谢了！

user: user-0
content: 引用 2 楼 qybao的回复:x不需要输入，而且你少了最后一个else（或者少了个默认值），比如所有的分支都不满足，那x就没有值了。 还有打印格式不对，你这样只是打印一位长度，所以打印结果不对 另外，你的计算公式是不是不对？ int main() {     float x=0.0f, y; //这里要么给x赋个初始值     scans("%f", &y);     if (y<=100000)     {         x = y*0.1f;     }     else if (y>100000 && y<=200000)      {         x = 100000*0.1f + (y-100000)*0.075f; //10万的部分应该是固定的吧，不是用y乘0.1吧？     }     else if (y>200000 && y<=400000)     {         x = 100000*0.1f + 100000*0.075f + (y-200000)*0.05;     }     esle     {         x = 0.0f; //要么这里加个else分支给x赋个默认值     }     printf("%.0f", x); //打印格式，这里给你保留到整数部分     return 0; } 100000以下提10%，是指按利润值提相应奖金！不是100000以下，通通以100000为基准，计算奖金的！

user: user-1
content: scan_s还少一个参数，你那个参数对应的应该是scanf函数

user: user-2
content: x不需要输入，而且你少了最后一个else（或者少了个默认值），比如所有的分支都不满足，那x就没有值了。 还有打印格式不对，你这样只是打印一位长度，所以打印结果不对 另外，你的计算公式是不是不对？ int main() {     float x=0.0f, y; //这里要么给x赋个初始值     scans("%f", &y);     if (y<=100000)     {         x = y*0.1f;     }     else if (y>100000 && y<=200000)      {         x = 100000*0.1f + (y-100000)*0.075f; //10万的部分应该是固定的吧，不是用y乘0.1吧？     }     else if (y>200000 && y<=400000)     {         x = 100000*0.1f + 100000*0.075f + (y-200000)*0.05;     }     esle     {         x = 0.0f; //要么这里加个else分支给x赋个默认值     }     printf("%.0f", x); //打印格式，这里给你保留到整数部分     return 0; }

user: user-3
content: 说真的，没读懂你的意思，，，x不需要赋值吧，它是通过输入的y计算出来的。
user-0 提问: 求助！！vs2013这个情况怎么办

回复:
user: user-1
content: 引用 5 楼 weixin_54174104 的回复: 出错信息已经表达了，不要用fp去接受返回值啊，你的fp已经在参数列表里起到作用了。

user: user-1
content: 嗯，第一参数是FILE ** 类型。

user: user-2

user: user-2
content: 您好！我遇到了相同的问题请问你能详细说一下具体怎么解决的吗？谢谢！

user: user-0
content: 引用 1 楼 user-3的回复:fopen_s( FILE* pFile, const char *filename, const char *mode);  打开文件成功返回0，否则返回其他值。  这是函数原型，你看你用法对不对  fopen_s(&fp,"E:\\ngm.txt", "w"); 我已经解决了，谢谢哈

user: user-0
content: 引用 1 楼 user-3的回复:fopen_s( FILE* pFile, const char *filename, const char *mode);  打开文件成功返回0，否则返回其他值。  这是函数原型，你看你用法对不对  fopen_s(&fp,"E:\\ngm.txt", "w"); 谢谢，括号里的已经解决，那请问，第一个不能将“errno_t”类型的值分配到“FILE*”类型的实体，这个怎么解决

user: user-3
content: fopen_s( FILE* pFile, const char *filename, const char *mode);  打开文件成功返回0，否则返回其他值。  这是函数原型，你看你用法对不对  fopen_s(&fp,"E:\\ngm.txt", "w");
user-0 提问: c语言萌新调试遇到问题

回复:
user: user-0
content: 引用 1 楼 老英捉小奇的回复:除以3.0      ， 谢谢谢谢大佬

user: user-0
content: 引用 2 楼 chxchxkkk的回复:1、写的c程序，文件后缀名 cpp 改为 c 更符合要求 。 2、a 要么定义成 int a,  要么就像楼上兄弟说的 / 3.0 谢谢谢谢谢谢大佬

user: user-1
content: 1、写的c程序，文件后缀名 cpp 改为 c 更符合要求 。 2、a 要么定义成 int a,  要么就像楼上兄弟说的 / 3.0

user: user-2
content: 除以3.0      ，
user-0 提问: 请看一下这一段代码错在什么地方

回复:
user: user-0
content: 给定一个句子，要求将其字符重新排序输出，其中的英文字母按照字母表顺序输出，其他字符的顺序和位置不变，输出后的单词长度与原句子相同。 输入格式  第 1 行：一个整数 T (1≤T≤10) 为问题数。  第 2 ~T+1 行，每组测试数据一行，包括一个字符串（长度最大为 200），由英文字母（均为大写字母）及其他字符组成，由空格分开的连续字符串视作一个单词。 输出格式  对于每个问题，输出一行问题的编号（0 开始编号，格式：case #0: 等），然后在一行中输出重新排序后的字符串。 样例 Input  3 THE BREAD IS SOLD AT $10 PER POUND 500 DONGCHUAN ROAD EAST CHINA NORMAL UNIVERSITY SHANGHAI CHINA 200241 #9724 $500 1234  Output  case #0: AAB DDDEE EH ILNO OP $10 PRR SSTTU case #1: 500 AAAAAAAAC CCDD EEGG HHHHH IIIIIL MNNNNNNNOO ORRRSSST TUUVY 200241 case #2: #9724 $500 1234
user-0 提问: a=2,printf("a++=%d\n,++a=%d",a++,++a),为什么输出a++=3,++a=4,不应该是a++=2,++a=4吗？

回复:
user: user-1
content: 有些编译器 printf是从右向左结合的。

user: user-2
content: 1. 项目中没有人写这种代码 2. 考试中应该也不会考， 因为不同编译器可能会有不同的行为。 3. 如果楼主真想了解原因，可以简单学一点汇编，把代码反编译出汇编代码，一目了然。而且这个程序用到的汇编知识不多，了解一点就可以。

user: user-3
content: 谁出的题或者谁让做的题。 给它两jio。 记住一个事情就是了。 实际使用中： 只有两种用法：  i++；//<=>i+=1; ++i；//<=>i+=1;  避免了不必要的歧义；可读性强 两行代码。完了

user: user-4
content: 这个问题没有研究的必要，如果在公司这么写要挨骂的，相信我，你会被骂得狗血淋头的.

user: user-5
content: 建议楼主这种问题不要钻进去过于研究了，问题正如楼上所说。另外，在项目中写代码时，正常人不会这样写的，否则会被吐槽。
user-0 提问: 萌新 求大佬帮忙~~

回复:
user: user-1
content: 如果g_gard_count为0 ，哼哼

user: user-2
content: 只要不进外层循环不就没有返回值了嘛

user: user-3
content: 前者如果进入不了循环，自然就不会有返回值。

user: user-4
content: 前者是有的，进入循环后，每条路都会有返回值，不是说一定要在最后返回才是返回值。只要在每一条路返回就行

user: user-5
content: 有返回值是肯定的，假如你的数组中第一个就不符合条件，那么就直接返回-1了。后面即使有相同的ID号的也没有比较，因为return了

user: user-6
content: 没太看明白楼主的意思，但是简单说一下吧。 明显第一段代码是有问题的（最起码那个break不应该放在return后面）。  函数要找到与参数cardId相匹配的那一项并返回。 肯定是需要让数组中的元素一个一个地去比较，如果不匹配，那就下一个来比较，直到找到相匹配的元素或者数组中没有（就返回-1）。 但是第一段代码只能比较第一个元素，无法让数组所有元素进行比较。 因为第一个元素时，执行到if语句，肯定会返回，也就是结果函数。（if-else两个子句都返回了） 也就不再比较第二个，第三个元素。。。。  正确的处理逻辑应该是第二段代码中那么，如果找到，就返回相应下标，当前元素不匹配的话，就换下一个元素，直接比较完整个数组后，还没有找到匹配的元素，说明这个数组中没有要找的东西，那就返回-1, 表示没找到。
user-0 提问: 提取单词这部分代码有点问题。如果我在输入的英文句子后面加上一个字母，他就能够提取出单词；如果不加字母就不行，代码和运行截图如下希望各位帮忙看看，谢谢谢谢！！！

回复:
user: user-0
content: 嗯嗯，谢谢！！！

user: user-0
content: 嗯嗯，我明白了，谢谢！！！

user: user-1
content: int get_words(char *str, char ***words) {     int i,j=0,ln=strlen(str);       char *p1=&str[0];     char *p2=&str[0];  while(*p2 == ' '||*p2 == ',')         {             p2++;         }  p1 =p2;       for(i=0;*p2!='\0';i++)     {         while(*p2 != 0 && *p2 != ' '&& *p2 != ',')         {             p2++;         }          if (*p2 == 0) { if (*p1) //xx           {   (*words)[j] = p1;             j++; }             break;         }         //words[i] = p1;         (*words)[j] = p1;         *p2=0;         j++;       //  p1 = p2+1;//xx        // p2 = p1;//xx        p2++; while(*p2 == ' '||*p2 == ',')         {             p2++;         }  p1 =p2;      }       return j; }

user: user-2
content: #include<stdio.h> #include<string.h>  int get_words(char *str, char **words[]); void sort_words(char *strs[], int count);  int main() { 	char str[1024]; 	char *words[200], **ppwords; 	int n_words = 0; 	int i;  	printf("please input the sentence: "); 	fgets(str, 1024, stdin); 	str[strlen(str)-1] = 0;   	ppwords = words; 	n_words = get_words(str, &ppwords); 	printf("%d\n", n_words); 	for (i = 0; i < n_words; i++) 	{ 		puts(words[i]); 	} 	sort_words(words, n_words);  	printf("the result: ");  	for (i = 0; i < n_words; i ++) 	{ 		puts(words[i]); 	}  	return 0; }  int get_words(char *str, char ***words) { 	int i,j=0,ln=strlen(str);  	char *p1=&str[0]; 	char *p2=&str[0];  	for(i=0;*p2!='\0';i++) 	{ 		while(*p2 != 0 && *p2 != ' '&& *p2 != ',') 		{ 			p2++; 		}  		if (*p2 == 0) { 			(*words)[j] = p1; 			j++; 			break; 		} 		//words[i] = p1; 		(*words)[j] = p1; 		*p2=0; 		j++; 		p1 = p2+1; 		p2 = p1+1; 	}  	return j; }  void sort_words(char *strs[], int count) { 	int i,j; 	char *t;  	for (i = 0;i < count; i ++) 	{ 		for (j = i+1; j < count; j++) 		{ 			if (strcmp(strs[i],strs[j]) > 0) 			{ 				t = strs[i]; 				strs[i] = strs[j]; 				strs[j] = t; 			} 		} 	}  } 供参考～  注意传递三重指针，原因是实参是二重指针；其他问题，详见上面的代码～
user-0 提问: 栈  关于十进制转换八进制整数

回复:
user: user-0
content: 引用 5 楼 m0_46472878的回复:[quote=引用 4 楼 user-1的回复:]找本基础入门级别的书，好好理解一下形参和实参传递这部分知识 老哥 那个 s!＝null那里不对啊  它告诉我缺少 )  没明白[/quote] 哦 没事了 😂

user: user-0
content: 引用 4 楼 user-1的回复:找本基础入门级别的书，好好理解一下形参和实参传递这部分知识 老哥 那个 s!＝null那里不对啊  它告诉我缺少 )  没明白

user: user-1
content: 找本基础入门级别的书，好好理解一下形参和实参传递这部分知识

user: user-0
content: 引用 1 楼 user-1的回复:我晕，形参和实参的关系你都搞不清楚 最简单的修改方法是 void push(stack*S, Elememt n) 改成 void push(stack* &S, Elememt n)  //改成引用类型  int pop(stack*S, Elememt n) 改成 int pop(stack* &S) //改成引用类型，去掉参数n或者改成引用类型int pop(stack* &S, Elememt &n)  void converson(stack*S, int N) 改成 void converson(stack* &S, int N) //改成引用类型 while (S!=null) {     n = pop(S);     printf("%d", n); }  main S=NULL; 改成  S->next = NULL; 能帮我讲讲有什么区别吗 就是通俗的讲

user: user-0
content: 引用 1 楼 user-1的回复:我晕，形参和实参的关系你都搞不清楚 最简单的修改方法是 void push(stack*S, Elememt n) 改成 void push(stack* &S, Elememt n)  //改成引用类型  int pop(stack*S, Elememt n) 改成 int pop(stack* &S) //改成引用类型，去掉参数n或者改成引用类型int pop(stack* &S, Elememt &n)  void converson(stack*S, int N) 改成 void converson(stack* &S, int N) //改成引用类型 while (S!=null) {     n = pop(S);     printf("%d", n); }  main S=NULL; 改成  S->next = NULL; 老哥  我真的不清楚 原来没有学习 半路学的

user: user-1
content: 我晕，形参和实参的关系你都搞不清楚 最简单的修改方法是 void push(stack*S, Elememt n) 改成 void push(stack* &S, Elememt n)  //改成引用类型  int pop(stack*S, Elememt n) 改成 int pop(stack* &S) //改成引用类型，去掉参数n或者改成引用类型int pop(stack* &S, Elememt &n)  void converson(stack*S, int N) 改成 void converson(stack* &S, int N) //改成引用类型 while (S!=null) {     n = pop(S);     printf("%d", n); }  main S=NULL; 改成  S->next = NULL;
user-0 提问: 大佬们帮帮忙吧。

回复:
user: user-1
content: 引用 3 楼 weixin_45215324 的回复:就是上位机发送的数据可以从下位机上显示出来我意思是你让我们全部写出来，这个太耗时了，所以没有什么人回复。。。你可以把你写的代码贴出来，有啥问题大家可以帮你一起看。

user: user-0
content: 就是上位机发送的数据可以从下位机上显示出来

user: user-1
content: 你这需求有点广啊

user: user-0
content: 单片机与计算机的串口通信系统设计
user-0 提问: 关于求解n个有序数组的交集

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:int *merge_common(int *a, int *b,  int len_a, int len_b) 改成 int *merge_common(int *a, int *b,  int *len_a, int len_b) 并且 return p之前加入 *len_a = common_n //记录合并后的长度  main方法 int *p = 0 改成 int *p = a;  调用函数的时候改成 p = merge_common(p, b, &t, n1);  删掉 t = sizeof(p)/sizeof(int) //这个值是1，p是指针，sizeof取得的只是指针的大小不是内存的大小 你好，非常感谢，我修改了下代码，之后优化了下，解决了问题，得到了新的理解

user: user-1
content: int *merge_common(int *a, int *b,  int len_a, int len_b) 改成 int *merge_common(int *a, int *b,  int *len_a, int len_b) 并且 return p之前加入 *len_a = common_n //记录合并后的长度  main方法 int *p = 0 改成 int *p = a;  调用函数的时候改成 p = merge_common(p, b, &t, n1);  删掉 t = sizeof(p)/sizeof(int) //这个值是1，p是指针，sizeof取得的只是指针的大小不是内存的大小
user-0 提问: 把有序数组有序的放入队列中，求大神看为啥不行

回复:
user: user-1
content: #include <iostream>  using namespace std;  #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 10  typedef int status; typedef int Qelemtype;  typedef struct{     Qelemtype  *base;     int front;     int rear; }squene;  status lnitquene(squene &Q); status Enquene(squene &Q,Qelemtype &e); status Dequene(squene &Q,Qelemtype &e); int length(squene Q); void insert();  int main() {     insert();     return 0; }  status lnitquene(squene &Q) {     Q.base = new Qelemtype[MAXSIZE];     if(!Q.base)         exit(OVERFLOW);      Q.front = Q.rear = 0;      return OK; }  status Enquene(squene &Q,Qelemtype &e) {     if((Q.rear+1)%MAXSIZE == Q.front)         return ERROR;      Q.base[Q.rear] = e;     Q.rear=(Q.rear+1)%MAXSIZE;      return OK; }  status Dequene(squene &Q,Qelemtype &e) {   if(Q.front ==Q.rear) return ERROR;     e=Q.base[Q.front];     Q.front=(Q.front+1)%MAXSIZE;     return OK; }  int length(squene Q){     return (Q.rear-Q.front+MAXSIZE) % MAXSIZE; } void insert() {     squene S;     Qelemtype e;     lnitquene(S);      //int a[3]={2,9,0};     //int b[3]={1,4,2};     int a[3]={0, 2, 9};     int b[3]={1, 2, 4};     int c[3]={3,6,8};      int i=0,j=0,k=0;     i = j = k = 0;     while (i < 3 && j < 3 && k < 3)     {         //if (a[i] < b[j] < c[k])         if (a[i] <= b[j] && a[i] <= c[k])             Enquene(S,a[i++]);         //else if (b[j] < a[i] < c[k])         else if (b[j] <= a[i] && b[j] <= c[k])             Enquene(S,b[j++]);         else if (c[k] <= a[i] && c[k] <= b[j])             Enquene(S, c[k++]);     }     printf("i = %d, j = %d, k = %d\n", i, j, k);     while (i < 3 && j < 3) {         if (a[i] < b[j])             Enquene(S, a[i++]);         else             Enquene(S, b[j++]);     }     while (i < 3 && k < 3) {         if (a[i] < c[k])             Enquene(S, a[i++]);         else             Enquene(S, c[k++]);     }      while (j < 3 && k < 3) {         if (b[j] < c[k])             Enquene(S, b[j++]);         else             Enquene(S, c[k++]);     }     printf("i = %d, j = %d, k = %d\n", i, j, k);     while (i < 3)         Enquene(S,a[i++]);     while (j < 3)         Enquene(S,b[j++]);     while (k < 3)         Enquene(S,c[k++]);     printf("新的有序数组为:");     while(S.front!=S.rear)      {         Dequene(S,e);         cout<<e;     }     cout<<endl; }   供参考～
user-0 提问: C语言

回复:
user: user-0
content: 谢谢大家我用数组搞定了

user: user-1
content: 问题不太清晰，最好举例说明。 一般可以用指针来返回多个参数。

user: user-2
content: 定义成数组，这个数组可以全局的也可以是静态的。然后直接返回数组。当然也可以用传入传出参数。

user: user-3
content: std这种标准库，也有C语言版本的

user: user-3
content: bool Func(std::list<int>& out);

user: user-4
content: 我理解你的意思是想返回一个for循环得到的多个结果给上一层函数使用，这个简单，你在外面定义一个数组比如int arr[30]，然后把数组作为一个函数参数进行使用，如 int  for_func(int *p_arr)，其中，for_func（）这个函数内部进行for循环计算，把arr作为实际参数传给p_arr即可，如果还不清楚，百度一下：C语言数组当函数参数。
user-0 提问: C语言初学者问问题

回复:
user: user-0
content: 引用 5 楼 Chen_jiajie1234 的回复:“嵌套模型”是什么。以前学C语言没提到过这个概念。 循环里面套着循环

user: user-1
content: 啥叫嵌套模型？ 是嵌套循环？还是嵌套判断？还是嵌套函数？

user: user-2
content: “嵌套模型”是什么。以前学C语言没提到过这个概念。

user: user-0
content: 我也不知道关于嵌套循环一般会出哪些问题

user: user-0
content: 就是嵌套循环

user: user-3
content: 你得说清楚你要问的到底是啥？嵌套模型太泛了。
user-0 提问: C语言结构体

回复:
user: user-1
content: 引用 楼主 weixin_46250143 的回复:#include<stdio.h> int mian() {     struct Vistor     {         char name[10];         int age;         int pay;     };								//定义了一个结构体，成员分别为名字，年龄，应付feiyong      typedef struct Vistor s;		// 将结构体名字简化为s      s vistor;     printf("请输入游客的名字");     while(vistor.name!='/n')		//当游客名字输入为n时，停止输入，否则一直输入          scanf("%s",vistor.name);     printf("该游客应付费用为");	     pay_ment(&vistor);				//传结构体地址调用函数      return 0; } void pay_ment(s *p)					//定义一个函数计算各个年龄段的人应付款  {     if((*p).age>18)					//年龄大于18则付款20          (*p).pay=20;     else							//小于则免费          (*p).pay=0; }  这个typedef为什么没有把结构体名改为s呢！！！！！  报错如下 ||=== 构建文件: "无目标" 在 "无项目" 中 (编译器: 未知的) ===| C:\Users\86147\Documents\电梯程序.c||In function 'mian':| C:\Users\86147\Documents\电梯程序.c|13|warning: multi-character character constant [-Wmultichar]| C:\Users\86147\Documents\电梯程序.c|13|warning: comparison between pointer and integer| C:\Users\86147\Documents\电梯程序.c|16|warning: implicit declaration of function 'pay_ment' [-Wimplicit-function-declaration]| C:\Users\86147\Documents\电梯程序.c|19|error: unknown type name 's'| ||=== 构建 失败: 1 error(s), 3 warning(s) (0 分, 0 秒) ===|    把结构体定义放在最外面  你在main函数中定义了结构体 就只能在main函数里面使用  其它函数无法使用。  顺便说一句 int mian 改为int main

user: user-0
content: #include<stdio.h> struct Vistor {     char name[10];     int age;     int pay; };								//定义了一个结构体，成员分别为名字，年龄，应付feiyong typedef struct Vistor s;           // 将结构体名字简化为s int main() { 	void pay_ment(s *);      s vistor;     do      {         printf("请输入游客的名字\n");         scanf("%s,%d",vistor.name,&vistor.age);         printf("\n");         pay_ment(&vistor);          //传结构体地址调用函数     }     while(strcmp(vistor.name, "n"));  //当游客名字输入为n时，停止输入，否则一直输入     return 0; } void pay_ment(s *p)					//定义一个函数计算各个年龄段的人应付款 {     if((*p).age>18)					//年龄大于18则付款20     {         (*p).pay=20;         printf("该游客应付20元");     }     else							//小于则免费     {         (*p).pay=0;         printf("该游客免费\n");     } }   嘿嘿，哪个是刚开始写的时候没注意，细节上好多问题，bug好多 这个是我自己新写的。编译没有问题，但是vistor.age在用scanf赋值时，没有反应 不管我输入大于18还是小于18，输出都是免费，这是什么问题呢？  黑窗口的显示是这样的，程序还有点瑕疵，想先问下这是什么问题导致的 请输入游客的名字 fgdk,56  该游客免费 请输入游客的名字 fjgkd,12  该游客免费 请输入游客的名字 fkd,555  该游客免费 请输入游客的名字

user: user-2
content: #include<stdio.h>  struct Vistor { 	char name[10]; 	int age; 	int pay; };  typedef struct Vistor s; // 将结构体名字简化为s   void pay_ment(s *p);  //int mian() int main() { 	s vistor; 	int i; 	printf("请输入游客的名字"); 	//while(vistor.name!='/n') //当游客名字输入为n时，停止输入，否则一直输入  		//scanf("%s",vistor.name);  	i = 0; 	while (i < 10 && scanf("%c", &vistor.name[i]) && vistor.name[i] != 'n') 		i++;  	if (i < 10) 		vistor.name[i] = 0; 	else 		vistor.name[i-1] = 0;  	vistor.age = 19; 	printf("该游客应付费用为"); 	pay_ment(&vistor); //传结构体地址调用函数  	printf("%s %d %d\n", vistor.name, vistor.age, vistor.pay); 	return 0; } void pay_ment(s *p) //定义一个函数计算各个年龄段的人应付款  { 	if((*p).age>18) //年龄大于18则付款20  		(*p).pay = 20; 	else //小于则免费  		(*p).pay=0; }   供参考～

user: user-3
content: 除了一楼说的还要注意：     while(strcmp(vistor.name, "n") )    //当游客名字输入为n时，停止输入，否则一直输入         scanf("%s",vistor.name);  pay_ment函数要在使用之前进行定义  另外，根本就没有输入age，后面的pay_ment函数执行就没有意义   基础知识太弱了， 好好看看书
user-0 提问: c语言

回复:
user: user-1
content: 你在说什么？看不明白，起码把背景需求和代码发一下吧～

user: user-0
content: 引用 1 楼 自信男孩 的回复：你在说什么？看不明白，起码把背景需求和代码发一下吧～解决了，就是c语言里面的指针一个分支
user-0 提问: 请教文件IO显示BMP图片问题，初学，请朋友们帮忙看看

回复:
user: user-0
content: 引用 4 楼 user-1 的回复:[quote=引用 3 楼 猪头少年喜挨揍 的回复:] [quote=引用 2 楼 user-1 的回复:] [quote=引用 1 楼 猪头少年喜挨揍 的回复:] 问题已经自行解决，跨行赋值时没有跨过正确的字节数。另外想请问用char型缓冲区最终赋值到LCD显示屏上为什么底色和原图片不一样，使用int型缓冲区就会和原图一样？ char 256色? 其他色值保存不了了。 int可以全保存。 要看你bmp是8位 16位 还是24位 32位[/quote] 朋友你好，我使用的BMP图片是24位位图的，上面的问题我补充详细些： 我用char buf[800*480*4]写入到LCD中显示的图片底色暗黄，用int buf[800*480]写入到LCD就和原图一样 白色的底色是不是为 0xffffffff就行？char型数组保存不了吗？[/quote] char ,其范围 对应整数-128~+127 unsigned char 对应的整数范围为0~255.  24位位图。表示由2的24次方种颜色组成。 16位色的总数是65536,是2的16次方。24位颜色称为真彩色,可以达到人眼辨别的极限。颜色数1677万多色,是2的24次方。  char的范围不够。int满足。[/quote]  好，谢谢你。我上面的都打错了，代码中用的是unsigned char 。但我知道该搜索什么信息了。十分感谢

user: user-0
content: char型数组写入LCD  int型数组写入LCD底色是白色的，不知道为什么上传不了。

user: user-1
content: 引用 3 楼 猪头少年喜挨揍 的回复:[quote=引用 2 楼 user-1 的回复:] [quote=引用 1 楼 猪头少年喜挨揍 的回复:] 问题已经自行解决，跨行赋值时没有跨过正确的字节数。另外想请问用char型缓冲区最终赋值到LCD显示屏上为什么底色和原图片不一样，使用int型缓冲区就会和原图一样？ char 256色? 其他色值保存不了了。 int可以全保存。 要看你bmp是8位 16位 还是24位 32位[/quote] 朋友你好，我使用的BMP图片是24位位图的，上面的问题我补充详细些： 我用char buf[800*480*4]写入到LCD中显示的图片底色暗黄，用int buf[800*480]写入到LCD就和原图一样 白色的底色是不是为 0xffffffff就行？char型数组保存不了吗？[/quote] char ,其范围 对应整数-128~+127 unsigned char 对应的整数范围为0~255.  24位位图。表示由2的24次方种颜色组成。 16位色的总数是65536,是2的16次方。24位颜色称为真彩色,可以达到人眼辨别的极限。颜色数1677万多色,是2的24次方。  char的范围不够。int满足。

user: user-0
content: 引用 2 楼 user-1 的回复:[quote=引用 1 楼 猪头少年喜挨揍 的回复:] 问题已经自行解决，跨行赋值时没有跨过正确的字节数。另外想请问用char型缓冲区最终赋值到LCD显示屏上为什么底色和原图片不一样，使用int型缓冲区就会和原图一样？ char 256色? 其他色值保存不了了。 int可以全保存。 要看你bmp是8位 16位 还是24位 32位[/quote] 朋友你好，我使用的BMP图片是24位位图的，上面的问题我补充详细些： 我用char buf[800*480*4]写入到LCD中显示的图片底色暗黄，用int buf[800*480]写入到LCD就和原图一样 白色的底色是不是为 0xffffffff就行？char型数组保存不了吗？

user: user-1
content: 引用 1 楼 猪头少年喜挨揍 的回复:问题已经自行解决，跨行赋值时没有跨过正确的字节数。另外想请问用char型缓冲区最终赋值到LCD显示屏上为什么底色和原图片不一样，使用int型缓冲区就会和原图一样？ char 256色? 其他色值保存不了了。 int可以全保存。 要看你bmp是8位 16位 还是24位 32位

user: user-0
content: 问题已经自行解决，跨行赋值时没有跨过正确的字节数。另外想请问用char型缓冲区最终赋值到LCD显示屏上为什么底色和原图片不一样，使用int型缓冲区就会和原图一样？

user: user-0
content: 引用 4 楼 user-1 的回复:[quote=引用 3 楼 猪头少年喜挨揍 的回复:] [quote=引用 2 楼 user-1 的回复:] [quote=引用 1 楼 猪头少年喜挨揍 的回复:] 问题已经自行解决，跨行赋值时没有跨过正确的字节数。另外想请问用char型缓冲区最终赋值到LCD显示屏上为什么底色和原图片不一样，使用int型缓冲区就会和原图一样？ char 256色? 其他色值保存不了了。 int可以全保存。 要看你bmp是8位 16位 还是24位 32位[/quote] 朋友你好，我使用的BMP图片是24位位图的，上面的问题我补充详细些： 我用char buf[800*480*4]写入到LCD中显示的图片底色暗黄，用int buf[800*480]写入到LCD就和原图一样 白色的底色是不是为 0xffffffff就行？char型数组保存不了吗？[/quote] char ,其范围 对应整数-128~+127 unsigned char 对应的整数范围为0~255.  24位位图。表示由2的24次方种颜色组成。 16位色的总数是65536,是2的16次方。24位颜色称为真彩色,可以达到人眼辨别的极限。颜色数1677万多色,是2的24次方。  char的范围不够。int满足。[/quote]  你好，你的回答是说char的范围不够，但我代码中使用了unsigned char buf[800*480*4]数组，这个数组的字节，可以完整地把BMP的所有颜色数据拷贝下来，最后写入LCD也应该不会少了什么信息。能从这方面帮我讲讲吗？用char不行的具体原因。谢谢
user-0 提问: C语言结构体问题

回复:
user: user-0
content: 哇，终于解决了，谢谢你

user: user-1
content: 引用 5 楼 weixin_46250143 的回复:等会，我刚刚又试了一下，还是没有任何改变，跟原来的错误一模一样，就是scanf赋值那条语句一直报错，我的是.c文件，用的是codeBlocks编译运行的 C:\Users\86147\Documents\结构体练习02.c|13|warning: declaration does not declare anything| C:\Users\86147\Documents\结构体练习02.c|19|error: expected identifier before 'long'| C:\Users\86147\Documents\结构体练习02.c|20|error: expected identifier before 'long'| C:\Users\86147\Documents\结构体练习02.c|20|error: too few arguments to function 'hahaha'| 不要用long作名称，long是内定字符

user: user-0
content: 等会，我刚刚又试了一下，还是没有任何改变，跟原来的错误一模一样，就是scanf赋值那条语句一直报错，我的是.c文件，用的是codeBlocks编译运行的 C:\Users\86147\Documents\结构体练习02.c|13|warning: declaration does not declare anything| C:\Users\86147\Documents\结构体练习02.c|19|error: expected identifier before 'long'| C:\Users\86147\Documents\结构体练习02.c|20|error: expected identifier before 'long'| C:\Users\86147\Documents\结构体练习02.c|20|error: too few arguments to function 'hahaha'|

user: user-0
content: 谢谢三位！！超级感激！

user: user-1
content: int volumn; 	struct Box 	{ 		int ln;			// xx 		int width; 		int height; 	};                   	struct Box s;        	printf("请输入立方体的长宽高"); 	scanf("%d,%d,%d", &s.ln, &s.width, &s.height);      //xx 	volumn = hahaha(s.ln, s.width, s.height);                   //xx 	printf("%d", volumn);

user: user-2
content: 调用体积函数改成 volumn=hahaha(s.long, s.wigth, s.height); 注意结构体变量的使用

user: user-3
content: volumn=hahaha(long,width,height);                   //调用函数 ====>>>  volumn=hahaha(s.long,s.width,s.height);                   //调用函数
user-0 提问: c语言开发效率比java低是哪些因素导致的？

回复:
user: user-1
content: 基本上就2个，越界和野指针。其他的问题都是必现

user: user-1
content: 这个不是啥不好的习惯，看你会不会用

user: user-2
content: 看到有老师说指针和越界的问题，我就想起我自己： 我写代码有个不太良好的习惯，就是大量使用指针。 当然，说它不良好是相对的。如果写的是底层代码，用的话，那很正常。 但如果使用的是高级语言，写一些顶层应用的那些代码，就不是一个好习惯了。

user: user-1
content: 开发效率上来讲有2点，1是开发的速度，轮子的丰富程度，2是出错的调试问题。这2点JAVA都比纯C好很多，纯C优点就是简单，语法简单，规则简单，各种可控，没有太多花哨的东西，然后就没有然后了。 如果开发人员经验不够丰富，项目复杂了以后来一点点越界和野指针要找死人。

user: user-2
content: 类比就像，你造电脑，底层语言从材料开始干。 高级语言从器件开始干。 这下懂了吧。  另外一点很重要的就是 ：java是面向对象的理念进行设计的。这也是为什么被成为面向对象语言的原因之一。 面向对象编程时一种理念、设计、想法。java，c++...高级语言的设计就遵循了这个理念。 这也是为什么他们都有类、对象、继承、重载、多态等等东西（）关键字嘛  面向对象编程的优点具体可以百度了，开发效率是其一吧，

user: user-3
content: 代码偏底层。程序员需要写比java更多的代码。 代码更复杂繁琐。申请的内存要负责释放。不释放错误释放是新手常见的问题。java自动回收

user: user-4
content: C语言的malloc/free要配对使用，否则就是内存泄露。  java的库比C大很多，许多功能已经做好了，直接调用就行。
user-0 提问: 无头指针的循环链表，删除一个特定值所在的结点的前驱。死循环了……

回复:
user: user-0
content: 引用 1 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h>  struct node{     int data;     struct node *next; };  typedef struct node NODE;  NODE* creat() {     int x;     NODE *p,*s,*r;     p = (NODE*)malloc(sizeof(NODE));     s = p;     scanf("%d",&x);     p->data = x;     //while(x!=-1)     while(1)     {         scanf("%d", &x);         if (x == -1)             break;         r=(NODE*)malloc(sizeof(NODE));         r->data = x;         p->next = r;         p = r;     }     p->next = s;      return(s); }  //NODE* shuchu(NODE *L) void shuchu(NODE *L) {     NODE *p;      p = L;     //while(p) {     while(p->next != L) {         printf("%d",p->data);         p = p->next;     }     printf("%d",p->data); }  NODE *delprev(NODE *p,int b){      NODE *L,*r,*k;     L=p;      while(L->next->data!=b)     {    r=L;         L=L->next;}     k=L->next;     r->next=k;     free(L);     return(k); }  int main() {     int a;     NODE *L,*p;      printf("新建链表\n输入值以-1结尾：");     p = creat();     shuchu(p);     printf("指定结点p的值：");     scanf("%d",&a);     L = delprev(p,a);     shuchu(L); } 供参考～  楼主的是循环链表，但是shuchu函数没有特殊处理，所以是死循环呢。  其他地方也做了修改，供参考～    啊啊啊啊 感谢

user: user-1
content: #include<stdio.h> #include<stdlib.h>  struct node{     int data;     struct node *next; };  typedef struct node NODE;  NODE* creat() {     int x;     NODE *p,*s,*r;     p = (NODE*)malloc(sizeof(NODE));     s = p;     scanf("%d",&x);     p->data = x;     //while(x!=-1)     while(1)     {         scanf("%d", &x);         if (x == -1)             break;         r=(NODE*)malloc(sizeof(NODE));         r->data = x;         p->next = r;         p = r;     }     p->next = s;      return(s); }  //NODE* shuchu(NODE *L) void shuchu(NODE *L) {     NODE *p;      p = L;     //while(p) {     while(p->next != L) {         printf("%d",p->data);         p = p->next;     }     printf("%d",p->data); }  NODE *delprev(NODE *p,int b){      NODE *L,*r,*k;     L=p;      while(L->next->data!=b)     {    r=L;         L=L->next;}     k=L->next;     r->next=k;     free(L);     return(k); }  int main() {     int a;     NODE *L,*p;      printf("新建链表\n输入值以-1结尾：");     p = creat();     shuchu(p);     printf("指定结点p的值：");     scanf("%d",&a);     L = delprev(p,a);     shuchu(L); } 供参考～  楼主的是循环链表，但是shuchu函数没有特殊处理，所以是死循环呢。  其他地方也做了修改，供参考～
user-0 提问: c语言教程里的一段关于虚拟地址的问题，请教？

回复:
user: user-1
content: 你的书是错的。编译完成后，决定的只是 a、b 的相对地址(相对于基址)，而绝对地址不作保证。实际上，现代操作系统会特意改变基址的位置，以使 a、b 的绝对地址发生变化。经过特殊配置的或者较老的操作系统是不支持这种地址随机化的操作的。 注：C 语言标准只规定 a、b 在单独的每次程序的执行过程中的地址从不变化，但未曾保证多次执行程序还能保持地址相同。

user: user-0
content: 引用 4 楼 GKatHere 的回复:不要在调试中运行，直接双击文件运行。  直接双击文件运行也是每次结果都不同

user: user-2
content: 不要在调试中运行，直接双击文件运行。

user: user-3
content: 想弄清楚这个问题，需要了解一下可执行文件的结构

user: user-0
content: 引用 1 楼 自信男孩 的回复:每次运行时，分配的内存位置不一样呗。这应该是正常的～你的电脑里一直在运行着程序，可能上次使用的位置被别的程序使用了，也是有可能的。  上面输出的都是虚拟地址而不是物理地址， 那意思是说书上说的是错的吗？不可能每次运行输出的地址都一样。

user: user-4
content: 每次运行时，分配的内存位置不一样呗。这应该是正常的～你的电脑里一直在运行着程序，可能上次使用的位置被别的程序使用了，也是有可能的。
user-0 提问: c语言中为啥给三个数组赋值不能使用同一变量i，有哪错误吗

回复:
user: user-1
content: 没返回值能运行？

user: user-2
content: for循环内声明变量是c99特性，一些比较老的编译器不支持，比如大学生都在用的vc6

user: user-3
content: 你这个c和c++混用，一会 cout << ，一会scanf。有特殊的用意吗？ 理论上三个 for(int i=0; i<3; i++)里面的 i 是互不影响的。

user: user-0
content: 引用 3 楼 user-5 的回复:啥意思？没看明白？ 是不能定义三次i？ 还是说想在同一个for循环里同时输入三个数组？ 比如 scanf(“%d%d%d”, &a[i], &b[i], &c[i]); 都有一点吧，后者可以实现吗

user: user-4
content: 引用 4 楼 自信男孩 的回复:[quote=引用 2 楼 huotiana 的回复:] 确定，用c编写后有错误， --------------------Configuration: 调试 - Win32 Debug-------------------- Compiling... 调试.cpp D:\c程序\调试.cpp(10) : error C2374: 'i' : redefinition; multiple initialization         D:\c程序\调试.cpp(7) : see declaration of 'i' D:\c程序\调试.cpp(13) : error C2374: 'i' : redefinition; multiple initialization         D:\c程序\调试.cpp(7) : see declaration of 'i' D:\c程序\调试.cpp(15) : warning C4508: 'main' : function should return a value; 'void' return type assumed 执行 cl.exe 时出错.  调试.obj - 1 error(s), 0 warning(s) 我的环境里测试了，没问题～LINUX +C[/quote] 手误是LINUX+C++

user: user-4
content: 引用 2 楼 huotiana 的回复:确定，用c编写后有错误， --------------------Configuration: 调试 - Win32 Debug-------------------- Compiling... 调试.cpp D:\c程序\调试.cpp(10) : error C2374: 'i' : redefinition; multiple initialization         D:\c程序\调试.cpp(7) : see declaration of 'i' D:\c程序\调试.cpp(13) : error C2374: 'i' : redefinition; multiple initialization         D:\c程序\调试.cpp(7) : see declaration of 'i' D:\c程序\调试.cpp(15) : warning C4508: 'main' : function should return a value; 'void' return type assumed 执行 cl.exe 时出错.  调试.obj - 1 error(s), 0 warning(s) 我的环境里测试了，没问题～LINUX +C

user: user-5
content: 啥意思？没看明白？ 是不能定义三次i？ 还是说想在同一个for循环里同时输入三个数组？ 比如 scanf(“%d%d%d”, &a[i], &b[i], &c[i]);

user: user-0
content: 确定，用c编写后有错误， --------------------Configuration: 调试 - Win32 Debug-------------------- Compiling... 调试.cpp D:\c程序\调试.cpp(10) : error C2374: 'i' : redefinition; multiple initialization         D:\c程序\调试.cpp(7) : see declaration of 'i' D:\c程序\调试.cpp(13) : error C2374: 'i' : redefinition; multiple initialization         D:\c程序\调试.cpp(7) : see declaration of 'i' D:\c程序\调试.cpp(15) : warning C4508: 'main' : function should return a value; 'void' return type assumed 执行 cl.exe 时出错.  调试.obj - 1 error(s), 0 warning(s)

user: user-4
content: 代码没问题呢，楼主确定是是用c++/g++编译的吗？
user-0 提问: PTA  7-2 说反话-加强版 

回复:
user: user-1
content: #include<stdio.h>  //#define M 500000 #define M 512  int main() {     char s[M];//,b[M];     int cnt, i, j, k;     //int i,k,j,h=0;     k=0;     while(k < M - 1 && (s[k]=getchar())!='\n')         k++;     s[k] = '\0';      cnt = 0;     for (i = k-1; i >= 0; i--) {         if (s[i] == ' ' && s[i+1] != ' ') {             for (j = i+1; j < i + 1 + cnt; j++)                 putchar(s[j]);             if (cnt > 0)                 putchar(' ');             cnt = 0;         }         if (s[i] != ' ')             cnt++;     }     for (j = i+1; j < i + 1 + cnt; j++)         putchar(s[j]);      putchar(10);   #if 0     k=k+1;     for(i=k;i>0;i--)     {         s[i]=s[i-1];     }     s[0] = ' ';      j=0;      for(i=k-1;i>=0;i--)     {         if(s[i]!=' ')         {             j++;             b[j]=s[i];         }         else if(j!=0)         {             for(h=j;h>0;h--)             {                 printf("%c",b[h]);             }             if(i!=0)                 printf(" ");             j=0;         }     } #endif     return 0; } 供参考～
user-0 提问: 大神们 这个程度应该怎么编写

回复:
user: user-1
content: 用log10求位数，其他没什么困难

user: user-2
content: 供参考  #include <stdio.h> #define ARRLEN 10  int main() {     int i, j=0, n, k;     int a[ARRLEN] = {0};     printf("请输入一个整数：\n");     scanf("%d", &n);      i=n;     //判断输入的整数位数     while(i)     {         j++;         i /= 10;     }      //取出各个位的数字     i = 0;     for (k=0; k<j; k++)     {         i = n % 10;         a[k] = i;         n /= 10;     }      printf("输出每一位：\n");     for (k=j-1; k>=0; k--)     {         printf("%d ", a[k]);     }      printf("\n逆序输出每一位：\n");     for (k=0; k<j; k++)     {         printf("%d ", a[k]);     }      return 0; }

user: user-3
content: 既然都是限定在正整数了，直接求模求余取出各位数据，然后再排个序（或者不需要排序都可以）

user: user-4
content: 看来必须要使用数组了， 相关函数：atoi, itoa
user-0 提问: opengl 设置颜色为黑色之后取色仍然为白色

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:不应该把color放到begin，end之间？ 也不行...

user: user-1
content: 不应该把color放到begin，end之间？
user-0 提问: 算法测试题求助

回复:
user: user-0
content: 能否帮帮我这位小弟弟啊 我是真的不知道该怎么做了

user: user-0

user: user-1
content: 算通项公式啊 这纯粹是数学问题  以i一个为例子: T(n).   -  T(n-1) = n^2 T(n-1) - T(n-2) = (n-1)^2 .... T(2) - T(1)  = 2^2 T(1).           = 1 所以 T(n) = 1 + 2^2 + 3^2 + .... + n^2 = 1/6*n*(n+1)*(2n+1)  这就是O（n^3)啦   第二题， T（n） =  log（1） + log（2） + 。。。 + log（n） = log 10^( log(1) + log(2) + ... log(n) ) = log(10^log(1) * 10^log(2) * ... 10^log(n)) = log (1 * 2 *3 *.. *n) = log(n!) O(log(n!)) 和O(nlog(n))是等价的， 这TMD要用斯特林公式还要证明极限， 高数的事儿就不讲了  都是类似的问题， 高数要不好，就该干嘛就干嘛去吧， 总不能在开高数讲堂吧
user-0 提问: C语言枚举

回复:
user: user-1
content: (1)c++中不允许枚举自增,如果要编译,请改为.c而不是.cpp (2)枚举只是数字常量的便携记住的名称,在内存中不存在enum SEASONS的任何相关的值,代替的是整形数字,解决方法:  #include <stdio.h> char **season={"spring","summer","autumn","winter"};  int main(int argc,char **argv){     int n =4;     puts(season[n-1]);     return 0; }

user: user-0
content: 哇，我懂了。刚才试了一下，非常感谢！！

user: user-0
content: 这个sesaons[season]中的season是数字常量4吧，而且它是枚举类型的变量，对吧，枚举类型的变量都是数值！！这句话也没错是吧。

user: user-2
content: 再定一个char *的数组呗 char * seasons[] = {"", "SPRINT", "SUMMER","AUTUTMN","WINTER" } printf("%s", seasons[season]);

user: user-0
content: 引用 1 楼 寻开心 的回复:第一个问题 enum按照定义，里面的元素数值不一定是连续的， 完全可以四个元素分别是1， 8，200， 5000 那么元素的++，得到的结果是什么？ 未知 严格的编译器会检测， 认为enum类型没有自增的操作， 至少会给予警告  第二个问题 枚举是int值而不是字符串 另外printf指定格式是%d输出一个整数，也不是要求输出一个字符串啊    那请问第二问该怎么输出WINTER呢，该使用什么格式

user: user-2
content: 第一个问题 enum按照定义，里面的元素数值不一定是连续的， 完全可以四个元素分别是1， 8，200， 5000 那么元素的++，得到的结果是什么？ 未知 严格的编译器会检测， 认为enum类型没有自增的操作， 至少会给予警告  第二个问题 枚举是int值而不是字符串 另外printf指定格式是%d输出一个整数，也不是要求输出一个字符串啊
user-0 提问: 希望可以解答一下

回复:
user: user-1
content: 要实现交换，值传递是不行的，正如楼上所说。传地址才能实现。

user: user-2
content: sub1这个函数是打算做交换的吧。建议用swap作为函数名。或swap_int。 实际的结果是都不能做交换，原因是参数是值传递，实参a3, a4与sub1中的x, y是相互独立的，sub1函数里交换了x, y的值，但是这两个值是函数内部的变量，函数调用结束会自动释放，因此不会影响a3, a4的值，同理也是a1, a2
user-0 提问: 函数

回复:
user: user-1
content: a1是全局变量，a1的值是最后一次给其赋值的值。 第一次是300赋值个a1，得到100，第二次是a1赋值给a1，即还是保存100. a2, a3，a4的值不变，不变的原因是交换的参数是变量而非地址。

user: user-2
content: void sub1(int x,int y)  { a1=x; x=y; y=a1; } 函数改成： void sub1(int *x, int *y) {     a1=*x;     *x = *y;     *y = a1; } main函数中这样调用 sub1(&a3, &a4);

user: user-3
content: 因为sub1这个函数是传值调用，也就是说这个函数获得参数值的一份拷贝。函数修改这个拷贝值，但并不影响调用程序实际传递给它的参数。
user-0 提问: 字节对齐的问题

回复:
user: user-1
content: 第一个char一个字节，第二个short int 进行两字节对其，第一个char与short int之间因为对齐，所以这两个总共占4个字节。第三个char因为前面是两字节对其，按理说第三个char应该占2个字节，这三个放一起应该是6个字节，但是第四个是int，所以char要进行4字节对其，所以char相当于占了4个字节，加上int4个字节共12个字节，如图所示。
user-0 提问: 类中定义枚举类为数据成员

回复:
user: user-0
content: 引用 3 楼 真相重于对错的回复:估计是他拿类型当实例用。  [quote=引用 2 楼 棉猴 的回复:] 没有问题啊，VS2015 C++环境 class DataType { private: 	enum type { type_in, type_char, type_float }; 	union { 		int num_int; 		char num_char; 		float num_float; 	}; }; int main() { 	return 0; } [/quote] 对，一开始以为定义在后边也是枚举名，就糊涂了。现在明白了，谢谢！

user: user-0
content: 引用 4 楼 真相重于对错的回复:class A{ enum type{....}; } 代表他是一个类型，要使用必须 A::type o=.... ========== class A{  enum{ ....}type; 代表的是一个匿名的枚举。type是一个字段 可以通过 A a; a.type 访问。。。 明白了谢谢！

user: user-1
content: class A{ enum type{....}; } 代表他是一个类型，要使用必须 A::type o=.... ========== class A{  enum{ ....}type; 代表的是一个匿名的枚举。type是一个字段 可以通过 A a; a.type 访问。。。

user: user-1
content: 估计是他拿类型当实例用。  引用 2 楼 棉猴 的回复:没有问题啊，VS2015 C++环境 class DataType { private: 	enum type { type_in, type_char, type_float }; 	union { 		int num_int; 		char num_char; 		float num_float; 	}; }; int main() { 	return 0; }

user: user-2
content: 没有问题啊，VS2015 C++环境 class DataType { private: 	enum type { type_in, type_char, type_float }; 	union { 		int num_int; 		char num_char; 		float num_float; 	}; }; int main() { 	return 0; }

user: user-1
content: 前面代表的是类型名
user-0 提问: 改错程序找不到错误了，但是运行结果确是不对的，不知道该怎么办了

回复:
user: user-1
content: 改一下这条语句：  item = fact(i) * 1.0/multi(2*i+1); 这样保证除法运算是浮点数除法而不是int类型的除法。

user: user-0
content: 引用 1 楼 user-2的回复:(double)fact() 好的，谢谢你

user: user-2
content: (double)fact()
user-0 提问: 大神帮我看看我的程序哪里出错了，麻烦帮忙改正

回复:
user: user-1
content: 两个问题：switch后面不能加分号;否则和后面的case 连不起来。第二个，需要switch后加大括号，把case都括起来～

user: user-2
content: 6基础打好吧，编译器都明确指出来了

user: user-3
content: 后面加上大括号把case判断都括起来

user: user-3
content: switch
user-0 提问: 帮忙看看怎么优化代码

回复:
user: user-0
content: 引用 8 楼 proorck2019 的回复:在SD中添加times++，计算执行次数，然后分析算法复杂度。如果确实无法优化，建议放弃。  好的，谢谢

user: user-1
content: 你可以用记忆化搜索试试

user: user-2
content: 递归函数建议明确一下退出条件，看到你的if, else里都调用了自身。那么SD怎么退出呢？  if(n==180){     print(b);     return;  //这样退出是否符合你的要求，如果符合建议试一下 }

user: user-3
content: 引用 7 楼 harryzhjx 的回复:[quote=引用 6 楼 自信男孩 的回复:] [quote=引用 5 楼 harryzhjx 的回复:] [quote=引用 3 楼 自信男孩 的回复:] 递归函数建议明确一下退出条件，看到你的if, else里都调用了自身。那么SD怎么退出呢？  if(n==180){     print(b);     return;  //这样退出是否符合你的要求，如果符合建议试一下 }     我想只输出一个结果，应该怎么跳出递归呢？ [/quote] 试一下了吗？  另外，根据你的需求定义跳出的位置呢。你想什么时候就退出了？[/quote]  我试了，还是很慢[/quote]  if(n==180){     //print(b); // print太慢，不要     return;   }

user: user-4
content: 你在SD里边又调用SD，可能这是慢的原因吧。

user: user-4
content: 在SD中添加times++，计算执行次数，然后分析算法复杂度。如果确实无法优化，建议放弃。

user: user-0
content: 引用 6 楼 自信男孩 的回复:[quote=引用 5 楼 harryzhjx 的回复:] [quote=引用 3 楼 自信男孩 的回复:] 递归函数建议明确一下退出条件，看到你的if, else里都调用了自身。那么SD怎么退出呢？  if(n==180){     print(b);     return;  //这样退出是否符合你的要求，如果符合建议试一下 }     我想只输出一个结果，应该怎么跳出递归呢？ [/quote] 试一下了吗？  另外，根据你的需求定义跳出的位置呢。你想什么时候就退出了？[/quote]  我试了，还是很慢

user: user-2
content: 引用 5 楼 harryzhjx 的回复:[quote=引用 3 楼 自信男孩 的回复:] 递归函数建议明确一下退出条件，看到你的if, else里都调用了自身。那么SD怎么退出呢？  if(n==180){     print(b);     return;  //这样退出是否符合你的要求，如果符合建议试一下 }     我想只输出一个结果，应该怎么跳出递归呢？ [/quote] 试一下了吗？  另外，根据你的需求定义跳出的位置呢。你想什么时候就退出了？

user: user-0
content: 引用 3 楼 自信男孩 的回复:递归函数建议明确一下退出条件，看到你的if, else里都调用了自身。那么SD怎么退出呢？  if(n==180){     print(b);     return;  //这样退出是否符合你的要求，如果符合建议试一下 }     我想只输出一个结果，应该怎么跳出递归呢？

user: user-0
content: 运算的时间特别长，希望高手能帮忙出出建议，简化一下
user-0 提问: 大佬们，这个文件为什么无法输出啊！！！

回复:
user: user-1
content: fp没有获取fopen的返回值。另外，ch 要定义成int类型，因为定义为int才能和EOF比较的～

user: user-0
content: 引用 2 楼 user-2的回复:fp=fopen(xxxx 你打开文件却没获取文件句柄。  啊啊啊，原来如此

user: user-0
content: 引用 2 楼 user-2的回复:fp=fopen(xxxx 你打开文件却没获取文件句柄。  啊啊啊，原来如此

user: user-0
content: 引用 2 楼 user-2的回复:fp=fopen(xxxx 你打开文件却没获取文件句柄。  啊啊啊，原来如此

user: user-2
content: fp=fopen(xxxx 你打开文件却没获取文件句柄。

user: user-0
content: 大佬们，求助啊。。。。
user-0 提问:  就是把一个算式中的运算符和数分别存在两个数组，求大神看看为何不行 

回复:
user: user-0
content: 感谢大哥，关注你了

user: user-1
content: #include <iostream> #include <cstring> using namespace std;  int main() {     int a[10] = {0};     char b[10];     char c[15];     int d=10;     cout<<"请输入算式:";     fgets(c, 15, stdin);      int k = 0, j = 0;     for(int i=0;i<strlen(c);i++)     {         if(c[i]>=48 && c[i]<=57)         {              while(c[i]>=48 && c[i]<=57)             {                 a[k] = a[k]*d + c[i]-'0';                 i++;             }             if (c[i] != ' ' && c[i] != '\t' && c[i] != '\n')                 b[j++]  = c[i];             k++;         } else if (c[i] != ' ' && c[i] != '\t' && c[i] != '\n')             b[j++] = c[i];     }     printf("j = %d\n", j);      cout<<"算式中的数字有:";     for(int i=0;i<k;i++)         printf("%d\t",a[i]);     cout<<endl;     cout<<"算式中的运算符有:";     for(int i=0; i < j;i++)         printf("%c", b[i]);     cout<<endl;     return 0; } 供参考～  建议楼主写代码还是要仔细一些，比如：  printf("%c",a[k]); 这个输出运算符的？
user-0 提问: 求指点

回复:
user: user-0
content: 引用 3 楼 chxchxkkk的回复:printf("%d %d %d", a, b,c); 这里的%d 之间加个空格就不连在一起了 好，谢谢。。。。

user: user-1
content: printf("%d %d %d", a, b,c); 这里的%d 之间加个空格就不连在一起了

user: user-0
content: 引用 1 楼 user-2的回复:输入？？ scanf("%d %d %d"... 11 22 33 什么意思。。。

user: user-2
content: 输入？？ scanf("%d %d %d"... 11 22 33
user-0 提问: C语言指针函数问题求解

回复:
user: user-0
content: 引用 1 楼 寻开心的回复:p=&a[2];         /*将p  指向数组元素a[2]*/ for(i=4;i>=0;i--)     printf("  %d",p[i] );  此时的p[i] 等价于 a[2+i]  根据循环，输出的结果就是a[6], a[5], a[4], a[3]和a[2]  p = &a[4]; for ( i=0; i<=4; I++ )     printf("%d", *p--); 这样倒序输出 谢谢

user: user-1
content: p=&a[2];         /*将p  指向数组元素a[2]*/ for(i=4;i>=0;i--)     printf("  %d",p[i] );  此时的p[i] 等价于 a[2+i]  根据循环，输出的结果就是a[6], a[5], a[4], a[3]和a[2]  p = &a[4]; for ( i=0; i<=4; I++ )     printf("%d", *p--); 这样倒序输出
user-0 提问: C语言

回复:
user: user-1
content: 还有一个技巧补充，毕竟从文件读入要写文件打开和读取等操作，要改代码 下面的技巧，可以不用改代码，那就是利用windows 命令行的管道能力 windows命令管道，可以用文件替代键盘输入 cmd下，比如你的exe是1.exe 那么 1.exe < a.txt 就可以让a.txt当中的内容当做键盘输入的内容到1.exe文件里面去 这样程序代码不用改， 通过编辑1.txt来修正你重复使用的输入内容了

user: user-1
content: 其实这是一个用户体验的问题 要改一下程序的控制逻辑     加一行输出， 提示用户，你刚才输入的是什么， 是否确认，是就继续其他的，否则就返回重新输入 问题是这么做，当你输入的都对的时候，还要一个个的测试，会觉得很麻烦  均衡的办法， 把你要输入的数据，都放入文件当中，让程序从文件当中去读 要改就改文件里面的内容， 改了你可以再确认后保存，然后再去运行程序，规避这个问题
user-0 提问: vs code怎么用

回复:
user: user-1
content: 从图中看至少有一个问题：文件夹和文件名称不能用中文！ 其他请参考本人博客： https://blog.csdn.net/liups/article/details/102512769

user: user-2
content: 没有设置过GCC的路径吧   之前电脑上有装过codeblocks之类的吗？

user: user-3
content: 应该是没有引入C的库和头文件。需要配置一下你的环境～

user: user-4
content: vscode写java的吧，注意vs的图标，写c用的程序不是这个。

user: user-5
content: 初学就别折腾vscode了，乱码等一系列问题太恶心  装个dev c++省点事

user: user-2
content: 引用 5 楼 qq_46344220 的回复:[quote=引用 3 楼 5250的回复:]没有设置过GCC的路径吧   之前电脑上有装过codeblocks之类的吗？ 好像没得怎么办[/quote]  之前电脑没有装过任何编程的东西吗？如果是的话，我从开头告诉你

user: user-1
content: 引用 7 楼 qq_46344220 的回复:[quote=引用 4 楼 liups的回复:]从图中看至少有一个问题：文件夹和文件名称不能用中文！ 其他请参考本人博客： https://blog.csdn.net/liups/article/details/102512769 还是有点懵[/quote] 图中可以看出有中文：前端和C语言！gcc不能有这种中文！

user: user-0
content: 引用 4 楼 liups的回复:从图中看至少有一个问题：文件夹和文件名称不能用中文！ 其他请参考本人博客： https://blog.csdn.net/liups/article/details/102512769 还是有点懵

user: user-0
content: 引用 2 楼 自信男孩的回复:应该是没有引入C的库和头文件。需要配置一下你的环境～ rmmmm具体怎么办？

user: user-0
content: 引用 3 楼 5250的回复:没有设置过GCC的路径吧   之前电脑上有装过codeblocks之类的吗？ 好像没得怎么办
user-0 提问: 子函数的注释影响了主函数的输出，求解答

回复:
user: user-0
content: 引用 6 楼 m0_46108109的回复:哦，我知道了。是这样的，程序运行时，需要将代码链接进堆栈。 例如printf需要将库函数链接进程序的堆栈，第二次调用时，可以复用这段代码。  你如果没在函数中加入printf，那么在主函数第一次调用printf时，printf的代码，覆盖了你原来的堆栈。 所以找不到原来的数据了。  你可以测试，在别处先调用一回printf，就能得到你想要的结果。 当然这个效果依然是未定义，系统并不做此保证。 并没有用，我在主函数里和子函数里都加了printf一个空格，还是老样子。甚至把子函数原来的printf改掉让他不输出c[160]也得不到结果，哦，把输出数组c改成输出指针p倒是没影响，return的是c还是p也没影响。  不过如果在注释掉子函数的情况下，在主函数的printf后面再加一个printf *c，*c就接收不到数据了。如果主函数仅有一个printf去输出*c，倒是有数据。这可能是因为所谓“覆盖”的关系。

user: user-1
content: 哦，我知道了。是这样的，程序运行时，需要将代码链接进堆栈。 例如printf需要将库函数链接进程序的堆栈，第二次调用时，可以复用这段代码。  你如果没在函数中加入printf，那么在主函数第一次调用printf时，printf的代码，覆盖了你原来的堆栈。 所以找不到原来的数据了。  你可以测试，在别处先调用一回printf，就能得到你想要的结果。 当然这个效果依然是未定义，系统并不做此保证。

user: user-2
content: 引用 4 楼 qq_36058799 的回复:[quote=引用 1 楼 真相重于对错的回复:]你返回了函数内部局部变量的地址了，出现什么结果都是可能的 嗯，确实是没有想到是因为局部变量的问题。我也想过在主函数里定义数组c再把地址传到子函数，但一则不想改，二则实在想知道为什么输出不对。但若是因为局部变量被消除的原因，为什么在不注释子函数printf的情况下，输出又是对的呢[/quote] 出现什么结果都是可能的，还是按规范去写代码吧

user: user-0
content: 引用 1 楼 真相重于对错的回复:你返回了函数内部局部变量的地址了，出现什么结果都是可能的 嗯，确实是没有想到是因为局部变量的问题。我也想过在主函数里定义数组c再把地址传到子函数，但一则不想改，二则实在想知道为什么输出不对。但若是因为局部变量被消除的原因，为什么在不注释子函数printf的情况下，输出又是对的呢

user: user-0
content: 引用 2 楼 m0_46108109的回复:char c[160]是局部变量，具有自动存储期，但函数退出时，其地址所存储的内容可能被擦除。 你在函数内打印了一次，能够正常显示，应该是未定义的，系统并不做此保证。 当函数内未打印时，返回的这个地址很可能已经被写入了别的内容。 可我在主函数里输出*c的时候，内容确实是a，甚至*c+4也是1，如果因为是局部变量而没得到数据的话，*c不该有值。在*c明明有值的情况下，printf %s却不能输出数据，实在是没搞懂

user: user-1
content: char c[160]是局部变量，具有自动存储期，但函数退出时，其地址所存储的内容可能被擦除。 你在函数内打印了一次，能够正常显示，应该是未定义的，系统并不做此保证。 当函数内未打印时，返回的这个地址很可能已经被写入了别的内容。

user: user-3
content: 你返回了函数内部局部变量的地址了，出现什么结果都是可能的
user-0 提问: 大神们这是哪里出问题了啊？

回复:
user: user-0
content: 引用 1 楼 寻开心 的回复:首先 第一个for循环，寻找第一个空格的代码有问题 加入， 字符串一个空格都没有， 会如何 i会一直跑到数组结束，或者遇到没有初始化的都数组当中随机出现的某个字符碰巧是空格的时候停止 然后第二个for循环就不知道执行什么了 需要在第一个循环上补充，遇到'\0'也要截止。 或者i从0到strlen(a);  其次，你的第二个循环里面判断了字母是不是大小写或者数字， 但是题目说了只要不是空格的都算单词的组成部分（0除外） 那么当你遇到有标点符号的时候，怎么办？ 所以，第二个循环代码里面只要判断 空格 '\0'和其他字符这三种情况就可以了  这样啊，谢谢大神了！

user: user-1
content: 单词是指连续的不包括空格的字符串 所以只要不是空格，都可以认为是单词的组成部分， 不限于大小写字母和数字

user: user-1
content: 首先 第一个for循环，寻找第一个空格的代码有问题 加入， 字符串一个空格都没有， 会如何 i会一直跑到数组结束，或者遇到没有初始化的都数组当中随机出现的某个字符碰巧是空格的时候停止 然后第二个for循环就不知道执行什么了 需要在第一个循环上补充，遇到'\0'也要截止。 或者i从0到strlen(a);  其次，你的第二个循环里面判断了字母是不是大小写或者数字， 但是题目说了只要不是空格的都算单词的组成部分（0除外） 那么当你遇到有标点符号的时候，怎么办？ 所以，第二个循环代码里面只要判断 空格 '\0'和其他字符这三种情况就可以了
user-0 提问: c语言作业题求助！！！

回复:
user: user-1
content: scanf("%d,%c,%f",&a,&b,&c); if((fp=fopen("int.txt","w"))==NULL)  前面人说的是少了，那个fp=， 没有把fp赋值，后面的fprintf（fp，。。。）的时候，fp是个什么鬼是未知的，所以写不成功

user: user-0
content: 引用 2 楼 自信男孩的回复:fprintf(fp,"%d,%s,%f",a,b,c); 改成： fprintf(fp,"%d,%c,%f",a,b,c);  你没发现第一个程序，没有吧fopen的返回值赋值给fp吗？ 我同学给我发的是他修改之前的代码。。。我改了，但还是空白

user: user-0
content: 引用 2 楼 自信男孩的回复:fprintf(fp,"%d,%s,%f",a,b,c); 改成： fprintf(fp,"%d,%c,%f",a,b,c);  你没发现第一个程序，没有吧fopen的返回值赋值给fp吗？ 他给我发的是他改之前的代码，我晕

user: user-2
content: 你第一个代码 scanf("%d,%c,%f",&a,&b,&c); 这一句，scanf函数中用逗号分隔了，输入的时候也要输入逗号

user: user-3
content: fprintf(fp,"%d,%s,%f",a,b,c); 改成： fprintf(fp,"%d,%c,%f",a,b,c);  你没发现第一个程序，没有吧fopen的返回值赋值给fp吗？

user: user-4
content: 第一个的fp好像没指向
user-0 提问: c语言：尾牙将近问题

回复:
user: user-0

user: user-1
content: 报出每个人获得的奖金金额， 这句应该是报出奖金总额啊 否则都报出来了，还算个什么劲儿 总额 除以 获奖名单人数 就是每个人的奖金数 这个有什么难点需要提问？
user-0 提问: 跪求解答，帮忙修改

回复:
user: user-0
content: 引用 8 楼 寻开心的回复:scanf("%lf",&c);	 for(d=1;d<=b;d++)	a-=(a*c);	  这两行中间， 加上一句 printf("a:%lf b:%d c:%lf\n", a,b,c); 然后，你看看你通过输入获得到的abc各自是多少？  a，b，c输入的不对，才导致for循环计算的结果出问题 谢谢，我还是小白

user: user-1
content: scanf("%lf",&c);	 for(d=1;d<=b;d++)	a-=(a*c);	  这两行中间， 加上一句 printf("a:%lf b:%d c:%lf\n", a,b,c); 然后，你看看你通过输入获得到的abc各自是多少？  a，b，c输入的不对，才导致for循环计算的结果出问题

user: user-0
content: 什么意思啊？你要运行下再修改😂

user: user-1
content: 正确的输出应该是  a：10000 b：10  c：0.0088 这才是你期待的结果 但是实际上你输出应该是   a:0.0088. b:1000 c:10

user: user-1
content: 你看看，你输入的位置 a=0.0008 b=1000 c=10 你可以在获得三个输入之后 printf("a:%lf b:%d c:%lf\n", a,b,c); 看看结果是什么

user: user-0
content: #include <stdio.h> #include <Windows.h> int main() {	 int b,d;	double a,c;		 printf("请输入现在的年折损率:\n");//折损率为c 	printf("请输入你的金额:\n");//金额为a 	 printf("您预期存钱年数:\n");//预存年数为b 	 COORD loc;     loc.X=21;     loc.Y=0;    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);	 scanf("%lf",&a);	 COORD joc;    loc.X=15;     loc.Y=1;    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);	 scanf("%d",&b);	 COORD koc;     loc.X=15;     loc.Y=2;    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);	 scanf("%lf",&c);	 for(d=1;d<=b;d++)	a-=(a*c);	 printf("经计算您现有货币将折损为:%lf",a);	 return 0; }

user: user-0
content: 引用 1 楼 寻开心的回复:a -= a*c c是百分比吧， 你这里的10，应该是0.1    还有不要为了你自己省事儿，贴图而不贴代码 都图自己省事儿，就没人回答你问题了 #include <stdio.h>#include <Windows.h>int main(){	int b,d;	double a,c;		printf("请输入现在的年折损率:\n");//折损率为c 	printf("请输入你的金额:\n");//金额为a 	printf("您预期存钱年数:\n");//预存年数为b 	COORD loc;    loc.X=21;    loc.Y=0;    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);	scanf("%lf",&a);	COORD joc;    loc.X=15;    loc.Y=1;    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);	scanf("%d",&b);	COORD koc;    loc.X=15;    loc.Y=2;    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);	scanf("%lf",&c);	for(d=1;d<=b;d++)	a-=(a*c);	printf("经计算您现有货币将折损为:%lf",a);	return 0; }

user: user-0
content: 引用 1 楼 寻开心的回复:a -= a*c c是百分比吧， 你这里的10，应该是0.1    还有不要为了你自己省事儿，贴图而不贴代码 都图自己省事儿，就没人回答你问题了 这里的10是b

user: user-1
content: a -= a*c c是百分比吧， 你这里的10，应该是0.1    还有不要为了你自己省事儿，贴图而不贴代码 都图自己省事儿，就没人回答你问题了
user-0 提问: 小白：c语言中头文件只做声明还需要加 #ifndef 吗？

回复:
user: user-1
content: 最好加一下，这样以后还可以扩展进行变量定义

user: user-1
content: 最好加一下，这样以后还可以扩展进行变量定义

user: user-2
content: 建议在编译环境里试一下，把你的猜想都试一下。

user: user-3
content: 仅仅函数声明加不加#ifndef问题不大  #ifndef  _***_H_ #define _***_H_ 声明部分 #endif  是防止头文件被多次#include的时候，一方面可能造成冲突，一方面也是浪费  就你这个问题来说，还涉及不到这种情况； 函数多次声明没影响
user-0 提问: 单词计数不运行哪里有问题呢？

回复:
user: user-1
content: #include<stdio.h> #define N 100 int main() {     char a[N];     int j=0,i=0;     printf("Please input some words :\n");     fgets(a, N, stdin);     while(a[i]!='\0') {         if(a[i]==' ')             j++,i++;         else             i++;     }     j++;     printf("Words' number is %d",j);     return 0; } 供参考～  如果少了else i++,while循环可能是死循环～

user: user-2
content: char *a[N];  --->char a[N];  gets(*a);      ---> gets(a);
user-0 提问: C语言指针，在网上找了答案，有部分代码看不明白，输入一串字符，提取其中单词，并按顺序输出，有一小节代码理解有点问题，希望各位帮忙解答，谢谢谢谢！！！

回复:
user: user-0
content: 谢谢谢谢！！！我明白了

user: user-1
content: 假设输入是  get_words()函数中， 	for (i = 0; i<ln; i++) 	{ 		if (str[i] == ' ' || str[i] == '.' || str[i] == ',') 		{ 			str[i] = '\0'; 		} 	} 以上代码将输入的“123,abc.456”修改为“123\0abc\0456”,之后 for (j = 0, words[j++] = str + i; i<ln; i++) 	{ 		if (str[i] == '\0') 		{ 			words[j++] = str + i + 1; 		} 	} 代码的主要作用是根据分隔符“\0”，将“123\0abc\0456”分割成“123”、“abc”和“456” 这个时候，可以看一下words里面的值，实际上保存的是以上三个字符串的地址  比如，我们知道第一个地址，是0x0133fbb4,该内存中保存的就是第一个字符串“abc”  而对于 for (i = 0; str[i] == '\0'; i++); 代码的含义，主要是为了防止如下格式的输入  此时，i的值会变为4，表示输入的字符串在起始位置有4个无效的分隔符，在用分隔符分隔字符串时，利用之后的for循环条件words[j++] = str + i，跳过这些无效的分隔符。

user: user-2
content: 首先这个函数是用来统计单词个数的  for(i=0;str[i]=='\0';i++);  这句话是过滤输入句子中前面的空格，标点的      for(j=0,words[j++]=str+i;i<ln;i++) {         if(str[i]=='\0') {             words[j++]=str+i+1; } }  words[j++]=str+i 记录第一个单词   if(str[i]=='\0') 找到下一个单词   words[j++]=str+i+1; j会+1
user-0 提问: 乐扣岛屿最大面积问题

回复:
user: user-1
content: int maxAreaOfIsland(int **grid, int gridSize, int *gridColSize) {     if (gridSize == 0 || gridColSize[0] == 0)         return 0;     curret_area = 0; // 补充这么一句看看     int i, j, m, n;     m = gridSize;     n = gridColSize[0];     int max_area = 0;

user: user-1
content: 是不是current_area初始的问题呢？ 此时m和n都是1， grid[i][j]也都是0， 如果current_area初始不是0，就直接返回current_area的值  貌似current_area是全局变量， 默认初始化是0  但是，如果程序是支持多个样本测试的话， 这个current_area最好在maxAreaOfIsland一进来的时候，人工初始化一下

user: user-0
content: 是这个问题，我刚才已经解决了，不过还是谢谢
user-0 提问: C语言putchar

回复:
user: user-1
content: 看看这两幅图有区别么？

user: user-2
content: 字符串就需要用双引号的，注意看一下字符串后面的[]，这是类似char str[32] = "hello"; str[3]

user: user-3
content: 把双引号扩上的字符串当中一个char[]数组来看就好了 后面不是还有按照下标取数组里面元素的[]操作嘛  三目运算符（条件） ？表达式1 ： 表达式2； 由条件决定执行表达式1还是表达式2  表达式就是用字符数组里面取字符  拆开了仔细看看，没有特别的地方 能理解了"012345"[3] 就是'3'这个字符，剩下的就是正常的代码了

user: user-0
content: 引用 1 楼 user-4的回复:字符串必须用双引号 能不能帮我解析一下这行代码

user: user-4
content: 字符串必须用双引号
user-0 提问: 用free来释放内存一般是在什么时机释放？

回复:
user: user-1
content: 是一种共享资源，与别的程序一同共享的资源。 你大可以去公共厕所锁上门蹲一天的时间。这种行为别人除了说你素质不好以外，拿你是没有什么办法的

user: user-2
content: 事实上有多种释放方式，例如立即释放、延时释放等，具体可参考各种垃圾回收器的算法。

user: user-3
content: free释放，如果程序一直执行，那么不用的时候建议手动释放free。如果程序运行完就退出了，那么程序退出系统也会把你malloc的内存释放的。但是，建议养成习惯，不用的时候就释放。

user: user-4
content: 什么时候不用了就什么时候释放 malloc的内存是系统内存，所有应用共享的内存空间， 不用了就立刻释放， 对总体性能有好处
user-0 提问: 大神帮帮我/用C输出9×9乘法表

回复:
user: user-1
content: void main(void) { 	const char *pstr = "*123456789"; 	for (int i = 1; i < 10; i++) 	{ 		printf("%c\t", pstr[i]); 	} 	printf("\r\n"); 	for (int i = 1; i < 10; i++) 	{ 		printf("%d\t", i); 		for (int j = 1; j <= i; j++) 		{  			printf("%d\t", j*i); 		} 		printf("\r\n"); 	} 	system("pause"); }

user: user-2
content: 搞错了 再来 #include<stdio.h>   int main() {     for(int m=0;m<10;m++){         if(m==0){             printf(" * ");         }         else{             printf("%3d ",m);         }     }     printf("\n");     for(int i=1;i<10;i++){         printf(" %-2d ",i);         for(int j=1;j<=i;j++){             printf(" %-2d ",i*j);         }         printf("\n");     }     return 0; }

user: user-2
content: int main() {     for(int i=1;i<10;i++){         for(int j=1;j<=i;j++){             printf("%2d ",i*j);         }         printf("\n");     }     return 0; }

user: user-0
content: 引用 1 楼 寻开心的回复:基础题目自己去写吧  要学习，就要自己写  否则没有意义 我最后输出不了这样

user: user-3
content: 引用 2 楼 weixin_46538912 的回复:[quote=引用 1 楼 寻开心的回复:]基础题目自己去写吧  要学习，就要自己写  否则没有意义 我最后输出不了这样[/quote] 能输出什么样子就贴什么样子代码上来就好，只要自己写的

user: user-3
content: 基础题目自己去写吧  要学习，就要自己写  否则没有意义
user-0 提问: 就是把一个算式中的运算符和数分别存在两个数组，求大神看看为何不行

回复:
user: user-1
content: 数字有'0'-'9'，带小数的还有'.'。运算符'+''-''*''/'直接字符比较就好了。

user: user-2
content: if(c[i]>=48 && c[i]>=57) { while(c[i]>=48 && c[i]>=57)  至少这两个地方不行吧， 怎么两个都是>=呢