Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 新手 定义问题

回复:
user: user-1
content: #include<stdio.h> #include <stdlib.h>  void average(int *parr, int len) {     int *end = parr + len;     float sum = 0.0, aver;      for(; parr < end; parr++)         sum = sum + *parr;     aver = sum / len;      printf("平均成绩为：%5.2f\n", aver); }  //void average(int *n, int m);  int main() {      int *p, **arr;     int i, j, f, g;     int col, row;      printf("请输入您的数据组数:\n");     scanf("%d", &row);     scanf("%d", &col);     arr = (int **)malloc(sizeof(int*) * row);     if (!arr)         exit(0);     for (i = 0; i < row; i++) {         arr[i] = (int *)malloc(sizeof(int) * col);         if (!arr[i])             exit(0);     }      printf("请输入您的数据:\n");     for (i = 0; i < row; i++)         for (j = 0; j < col; j++)         scanf("%d", &arr[i][j]);      p = &arr[0][0];     average(p, row * col);      printf("请输入你想要第几组第几个数据：");     scanf("%d%d", &f, &g);     if ((f >= 0 && f < row) && (g>= 0 && g < col))         printf("%d\n", arr[f][g]);     return 0; } 参考一下吧； 对于二维数组作为参数search，至少要确定列数。 基础知识还需要巩固，以上的代码参考一下吧

user: user-2
content: VC不支持如下写法，也不支持可变长数组VLA：  void search(int a[h][y]) int h,y;

user: user-0
content: 求大佬们指教
user-0 提问: 这个哪里错了？

回复:
user: user-1
content: #include<stdio.h> #include <stdlib.h>  struct Student {     long int num;     char name[32];    /*name应该是用字符数组*/     float score; };  int main() {     int i,n;     float average,sum=0;     //struct Student temp;     scanf("%d",&n);     struct Student *stu = (struct Student *)malloc(sizeof(struct Student) * n);     if (!stu)         exit(0);     for(i=0;i<n;i++)     {         scanf("%ld %s %f",&stu[i].num, stu[i].name, &stu[i].score);         sum+=stu[i].score;     }     average=sum/n;     printf("%.2f",average);     for(i=0;i<n;i++)     {         if(stu[i].score<average)             printf("%s %ld\n",stu[i].name,stu[i].num);     }     free(stu);      return 0; }  参考一下吧  2个问题: 第一个：name因该是用字符数组，用%s，则后面直接跟数组名即可(stu[i].name) 第二个：由于数组长度不是在编译时确定，因此建议使用动态申请空间方式获取stu

user: user-2
content: 建议把程序改成几个函数，更容易找出错误

user: user-0
content: 补充一下题目 给定N个学生的基本信息，包括学号（由5个数字组成的字符串）、姓名（长度小于10的不包含空白字符的非空字符串）和成绩（[0,100]区间内的整数），要求计算他们的平均成绩，并顺序输出平均线以下的学生名单。  输入格式： 输入在一行中给出正整数N（≤10）。随后N行，每行给出一位学生的信息，格式为“学号 姓名 成绩”，中间以空格分隔。  输出格式： 首先在一行中输出平均成绩，保留2位小数。然后按照输入顺序，每行输出一位平均线以下的学生的姓名和学号，间隔一个空格。  输入样例： 5 00001 zhang 70 00002 wang 80 00003 qian 90 10001 li 100 21987 chen 60 输出样例： 80.00 zhang 00001 chen 21987
user-0 提问: [C语言]C语言小白求解答

回复:
user: user-1
content: 引用 楼主 feitianqixia的回复:char sex; 	int count = 0; 	for (;;) 	{ 		printf("请输入性别："); 		scanf("%c",&sex); 		fflush(stdin); 		if (sex != 'm' && sex != 'M' && sex != 'f' && sex != 'F') 		{ 			break; 		} 		count++; 	} 	printf("您一共输入正确%d次\n", count); 为什么输入字符f后按回车，程序直接跳出循环结束了？求解答，谢谢 没有进去for 循环的条件

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-3
content: int main(void) {     char sex;     int count = 0;     for (;;)     {         printf("请输入性别：");         scanf("%c",&sex);         getchar();         if (sex != 'm' && sex != 'M' && sex != 'f' && sex != 'F')         {             break;         }         count++;     }     printf("您一共输入正确%d次\n", count);     return 0; } 参考一下吧 因为fflush(stdin);没有起作用。该fflush对于stdin是未定义的。即它不能起到刷新输入缓冲区的作用。建议用getchar();但是这个需要每次只能输入一个字符然后换行，否则结果也是未定义的。

user: user-4
content: 应该是没用getchar（）,这个错误很常见，用它吃空格！

user: user-5
content: scanf("%c",&sex); 		getchar();

user: user-6
content: 回车不属于 'm' 'M', 'f', 'F' 自然就 break 结束了呀
user-0 提问: 编写函数统计单词个数，为什么n的返回值是1（求改正，谢谢！）

回复:
user: user-1
content: #include <stdio.h>  int Fun(char cString[]) {     int iWord = 1, i;      for(i = 0; cString[i]!='\0'; i++) {         putchar(cString[i]);         if(cString[i] == ' ' && cString[i+1] != ' ')             iWord++;      }      return iWord; }  int main() {     char str[100];     int iResult = 0;      printf("请输入一个字符串:\n");     //scanf("%s",str);     fgets(str, 100, stdin);     iResult = Fun(str);     printf("单词个数是:%d\n",iResult);     return 0; }  scanf(“%s”, str);是格式化输入，以空格作为多个输入的分割，遇到空格则完成对str的输入。 建议使用fgets

user: user-2
content: 统计单词个数，简单点可以这样判断，逐个判断字符串的字符，判断当前这个是有效字符（比如A-Z，a-z,0-9，我这里只把英文和数字作为判断是属于单词的有效字符），并且下一个字符不是有效字符的话，单词数就增加1 #include<stdio.h>  int isNumber(char chtmp) //判断是否数字 {   if(chtmp>='0'&&chtmp<='9')   {     return 1;   }   return 0; } int isAlpha(char chtmp)  //判断是否字母 A-Z，a-z {   if(chtmp>='a'&&chtmp<='z')   {     return 1;   }   else if(chtmp>='A'&&chtmp<='Z')   {     return 1;   }   else   {     return 0;   } } int isWord(char chtmp)//判断是否有效字符（字母或者数字） {   if(isNumber(chtmp)||isAlpha(chtmp))   {     return 1;   }   else   {     return 0;   } }  int countWord(char* stringtmp)//计算单词个数 {   int i=0;   int countword=0;   while(stringtmp[i]!=0)//直到结束字符位置   {      if((isWord(stringtmp[i])==1)&&(isWord(stringtmp[i+1])==0))//满足当前字符是有效字符，下一个字符不是有效字符就自增      {        countword++;      }      i++;   }   return countword; }   int main() { char str[100]; int iResult=0; printf("请输入一个字符串:\n"); scanf("%s",str); iResult=countWord(str); printf("单词个数是:%d\n",iResult); return 0;  }  //比如这里的计算单词数量 只执行这两句 char chtest[]="hello   world!this  is 100";    int count=countWord(chtest);//这里的单词数量是5
user-0 提问: 关于用 顺序栈 判断 括号是否匹配 的问题

回复:
user: user-0
content: 这个不应该是 不匹配 么？

user: user-1
content: 引用 2 楼 not_Englishname 的回复:还是不对呀，程序依旧不是正确结果 你测试的demo发一下，或者截个图； 我在我的环境里测试没有问题

user: user-0
content: 还是不对呀，程序依旧不是正确结果

user: user-1
content: #include<stdio.h> #include<string.h>  int match(char exp[],int n) {     //char stack[100];     int top = -1, i;      for(i=0;i<n;i++)     {         if(exp[i]=='(')         {             ++top;             //stack[top]='(';         }         else if(exp[i]==')')         {             if(top==-1)                 return 0;             else                 --top;         }     }     if(top==-1)         return 1;     else         return 0; }  int main() {     char exp[100];     int ret;      printf("请输入要判断的字符串：\n");     gets(exp);     printf("%s\n",exp);      ret = match(exp,strlen(exp));     if(ret)         printf("匹配");     else         printf("不匹配");      return 0; } gets没什么问题，只是会影响安全（不能确定输入的长度）； 并且，已经输出了exp的内容，只要保证输入的输出的一致就没问题。
user-0 提问: while(scanf("%s",p)!=EOF)循环为什么无法结束？

回复:
user: user-1
content: LINUX：ctrl+d,windows: ctrl+z输入EOF

user: user-2
content: <Enter> <Ctrl-Z> <Enter>

user: user-3
content: VS要连续输入三次<ctrl+z>、Enter才行

user: user-1
content: 引用 3 楼 Micope 的回复:那标准输入如何判断数据是否结束？ 输入ctrl+d或ctrl+z就是表示文件的末尾，scanf会返回EOF。

user: user-0
content: 那标准输入如何判断数据是否结束？

user: user-1
content: EOF是文件结束标志，标准输入要输入EOF需要通过通过输入键盘组合键，ctrl+d（Linux）或ctrl+z（Windows)

user: user-4
content: 用 Ctrl + D(Linux) 或者 Ctrl + Z(Windows) 结束输入
user-0 提问: c语言求解

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

user: user-2
content: 原因1，浮点存储的是底数+指数。你看一个符号字节，表示 -128 ~ 127的范围，负数能表示的绝对值要比正数多1. 指数， 也有正负。负的指数范围稍稍宽一倍。其实，没有什么用处。 原因2，浮点溢出后，会产生INF这样的异常值，导致很多不可预测的行为。与INF运算后，很多后续结果都会溢出。而换成倒数后，会溢出为0，这个是一个无穷小的近似值，不会引起后续计算的异常。

user: user-3
content: 数字太大存不下就会溢出  存到什么变量里?

user: user-0
content: 引用 1 楼 das白的回复:数字太大存不下就会溢出  存到什么变量里? 而且 我觉得这两个式子不是等价的吗，为啥一个溢出一个不溢出

user: user-0
content: 引用 1 楼 das白的回复:数字太大存不下就会溢出  存到什么变量里? 范围是什么？？实际数据也没超过int的范围阿 输入6位数就溢出了。
user-0 提问: c语言求助

回复:
user: user-1
content: 这里不是定义了，STU  n={10006,"ZhaoSi", 55, 70, 68}, ss[N];  这里同时定义了一个STU类型的n并初始，同时定义了一个STU[N]类型的ss  如果觉得这种写法可读性不强，建议分成两行来写

user: user-2
content: STU  n={10006,"ZhaoSi", 55, 70, 68}, ss[N]; 注意此处。定义了n并初始化了，后面同时定义了ss数组，这个是属于逗号运算符，ss也是被定义了。

user: user-3
content: 在這一行中  STU  n={10006,"ZhaoSi", 55, 70, 68}, ss[N];  ss是一個長度為N的STU結構體數組
user-0 提问: 关于字符数组问题

回复:
user: user-1
content: 越界访问不是每次都能出现异常的（比如段错误），这是这个越界操作是未定义行为，即有可能越界的数据没有占用不可以写的内存，此时是正常的，但是若越过了不能写的区域，那么就会导致异常，比如段错误；越界访问也可能会将别的数据覆盖，导致程序运行异常。因此越界访问不是编译能检测出来的，而是需要编程的人去控制和避免；

user: user-2
content: 对于你的问题我感觉很疑惑  这是一个基础问题 对于char[]来讲 如果你的下标是5 那么你只能输入4个数字 最后一个保存\0 如果对于int[]来讲 如果你的下标是5  那么你可以输入5个数字 只要每个数字不超过int所支持的最大数字就行 如果你越界保存 可能有问题 也可能没问题 但是这是大忌 小心内存越界

user: user-3
content: 大于就越界啦，越界不是编译问题，可能覆盖了其他数据，造成程序崩溃，就算没崩溃也证明不了什么，最多说明运气好
user-0 提问: 建造BST的问题，之后中序遍历时候结果正确，时而错误，恳请各位帮忙解答一下

回复:
user: user-1
content: BiTree Insert(BiTree T,int v){ if(T==NULL){ T=(BiTree)malloc(sizeof(BiTree));//这句话改为 T=(BiTree)malloc(sizeof(TNode));

user: user-0
content: 引用 1 楼 hdt 的回复:BiTree Insert(BiTree T,int v){ if(T==NULL){ T=(BiTree)malloc(sizeof(BiTree));//这句话改为 T=(BiTree)malloc(sizeof(TNode));谢谢~
user-0 提问: 请教大神，LCC-WIN32下编译问题

回复:
user: user-1
content: 这执行结果不是一样吗

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

user: user-0
content: 非常感谢，我去试试

user: user-3
content: 换一下文件的目录, 不要使用中文和空格试试

user: user-0
content: 求大神不吝赐教啊...拜谢...
user-0 提问: 求大神

回复:
user: user-1
content: 有可能用的中文分号

user: user-2
content: 他的其实也有问题， 及格 后面没有break 你的 switch后面有分号，语法错误

user: user-3
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-4
content: switch  后的分号去掉

user: user-5
content: 不是长得帅，而是缺少一个break；在printf("及格\n");后面缺少一个break; 可能是不全本身就是一种美，所以你比他长得帅。  另外，第二个switch后面去掉分号

user: user-6
content: switch那一行仔细看看

user: user-7
content: switch  后的分号应该没有。

user: user-8
content: switch語句後面的分號，刪掉。
user-0 提问: 新手，为什么（*B）.name 输出的是地址

回复:
user: user-1
content: 注意对于结构体中，name是数组名，数组名本身就是数组的首地址，并且以%d输出，自然是输出的地址（但是这个地址可能不正确，因为地址是无符号数，一般是%u或者%p格式输出的）。

user: user-2
content: #include<stdio.h> #include"stdafx.h" struct student { 	int  name[20]; }; struct student A[100]; int main() { struct student *B; //struct student A[100]; int count=0; int y,C=0;    do   {   scanf("%d",&A[count++].name);    }while((y=getchar()) != '\n');  /*for(B=A;C<1;B++)   C++;*/  B=A;  printf("%d\n",(*B).name[0]);   return 0; } 你先将程序改成这样看看为什恶魔这样就能输出3，看看数组是怎么赋值的，还有的for循环有问题。

user: user-0
content: 谢谢大佬们，解决了

user: user-0
content: 求大佬们教导
user-0 提问: 大一新生 学完c后怎么提升

回复:
user: user-1
content: 编点感兴趣的小程序练手

user: user-2
content: 要多练习才能更好的进步，自己给自己找一些项目来做；

user: user-3
content: 我觉得先不要多看语言，先把基础打牢，基础不牢看得越多就越散，基础打牢了学其他语言就快，而且有一个主打的语言，不会一盘散沙。谭浩强的书我不觉得差，但从知识来说只能算入门的一半。

user: user-4
content: 算法了解下，我倒是觉得大学培养兴趣很重要，要达到工作水平太难了，因为工作做得项目有具体的框架支撑和针对性，这样的东西在学校是很难接触到的，打好基础吧

user: user-5
content: lz试试编写一些自己上网用得上的东西 在编写一些较难的东西 这就是在应用中进步 对以后搞程序总规划也有好处  引用 40 楼 zhao4zhong1 的回复:[quote=引用 14 楼 pkuzhx 的回复:] 楼主是要参加acm的，楼上好几位都指偏了 个人意见：参加acm才是真偏了！[/quote]

user: user-6
content: 看你以后打算往哪方面发展.....C只是一个基础，一个开端，但你学了C之后以后学其他语言压力就会小很多。如果你只是想磨炼你的C语言技术，强烈推荐你多动手编程序而不是看书，比如从网上下一个编程100题，他的难度都是递增的，要是觉得太简单可以跳着做，然后写一点简单的游戏啦，比如猜数字，贪吃蛇这类。或者别的你感兴趣的事物，比如判断密码强度的程序，图书管理程序啦这种很多。如果你想了解以后到底往那方向发展，建议你多问问老师，用纯C的不多，像我们专业是学习嵌入式开发、单片机这一类的，纯C用的比较多，别的我不知道哪里还有纯C的....有也用的，但是用的很少吧。

user: user-7
content: Compiler Theory, 编译理论。

user: user-8
content: 引用 14 楼 pkuzhx 的回复:楼主是要参加acm的，楼上好几位都指偏了 个人意见：参加acm才是真偏了！

user: user-9
content: 上面有很多误导人的，别入坑~

user: user-10
content: 多看书，多敲代码

user: user-11
content: 楼主，如果你觉得C基础都学完了，精通了，那么请把C标准库手动敲上几遍，把它弄懂就差不多了，那些非标准库在要用到时再了解也来的及的

user: user-12
content: 把其他课程作业用C认真实现就好了。数据结构、算法导论/计算方法、数字信号处理、计算机图形学等等，动手第一。

user: user-13
content: 笨办法学C 中文版  https://caimaoy.gitbooks.io/learn-c-the-hard-way/content/ 了解一下

user: user-14
content: 慢慢做呗。每天比别人多做2小时，不够再加2小时。只要努力能解决大部分问题。

user: user-8
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-15
content: 引用 6 楼 wyyy2088511 的回复:c++，windows编程，linux下编程 Windows编程还是直接略过吧

user: user-16
content: 个人觉得还是基础打牢

user: user-17
content: 第一阶段<<C primier plus>> <<C专家编程>> 还有林锐的《高质量C编码》 第二阶段 数据结构C语言版，弄本国外经典的教材，国内严蔚敏的太深奥 第三阶段LINUX C编程，弄本国外经典的教材

user: user-18
content: 套接字、网络编程tcp，ip 进程 结合系统命令的C语言编程 C语言结合图形化编程 嵌入式C语言编程 C语言数据结构（算法） …………很多的其实……

user: user-19
content: 没什么好办法，找Ｃ代码敲敲在敲，熟悉了在说，这是最笨也是最有效的办法。
user-0 提问: c语言问题

回复:
user: user-1
content: 第一个getchar()若是接收了一个除换行符之外的字符，那么第二个getchar()就接收了一个换行符，因为输入缓冲区是属于行缓冲，即只有输入换行符才会将输入缓冲区里的数据刷到内存里，而输入回车后，换行符也会残留在内存里，此时第二个getchar()就接收了这个换行符，所以输出的是一个空行和123 解决办法是：要么去掉第一个getchar();要么第一个输入直接输入一个换行符，再次输入有效字符；

user: user-2
content: 想要什么结果...

user: user-0
content: 编译没有问题，运行不出想要的结果怎么办？？？
user-0 提问: 求大牛解惑，单链表的问题

回复:
user: user-1
content: 感觉...自己设置断点调试一下吧 看哪些值不符合预期 调试是程序员必备技能啊

user: user-1
content: 9 7这个是两个字符 不是九十七

user: user-0
content: 大牛在哪里？

user: user-0
content: 引用 8 楼 user-2的回复:[quote=引用 7 楼 not_Englishname 的回复:] [quote=引用 5 楼 user-2的回复:]如果你要按数字存储，需要对程序相应地方进行调整，如char data; 要改成int data;  接收输出时用%d，以及输入结束的判断等等 用char定义的话 是不是要定义字符串 char*？[/quote]  是的，字符数组，char*你需要先分配好内存[/quote] 感谢大牛  新年快乐啊！

user: user-2
content: 引用 7 楼 not_Englishname 的回复:[quote=引用 5 楼 user-2的回复:]如果你要按数字存储，需要对程序相应地方进行调整，如char data; 要改成int data;  接收输出时用%d，以及输入结束的判断等等 用char定义的话 是不是要定义字符串 char*？[/quote]  是的，字符数组，char*你需要先分配好内存

user: user-0
content: 引用 3 楼 das白的回复:9 7这个是两个字符 不是九十七 那用char定义的，想要输出97就得定义字符串 char*么？

user: user-2
content: 如果你要按数字存储，需要对程序相应地方进行调整，如char data; 要改成int data;  接收输出时用%d，以及输入结束的判断等等

user: user-2
content: 因为你是一个字符一个字符存进去的，而不是一个数字整体存储的

user: user-0
content: 引用 5 楼 user-2的回复:如果你要按数字存储，需要对程序相应地方进行调整，如char data; 要改成int data;  接收输出时用%d，以及输入结束的判断等等 用char定义的话 是不是要定义字符串 char*？
user-0 提问: 新手问个简单的异常问题了

回复:
user: user-1
content: 数组名称 本身就代表整个数组第一个元素的地址 你用指针去指向一个地址 不是不可以 你可以使用二级指针，不过不推荐。

user: user-2
content: 上边笔误  &a 代表一个指针，它指向的内容是一个包含两个元素的整形数组，不能简单的把&a理解为一个二级指针

user: user-2
content: int a[2]; int *p=&a ;//错误 int **p = &a;//错误 &a 代表一个指针，它指向的内容是一个包含两个元素的整形数组，不能简单的把&a理解为一个二级数组 int (*p)[] = &a;//错误，因为p指向的数组没有定义大小 int (*p)[3]=&a;//错误，因为p 指向的数组长度与a不符 正确的写法是 int (*p)[2]=&a; 当然你也可以强制转换 比如 int *p =(int*)(&a);

user: user-3
content: 去掉& i本身就代表数组首地址

user: user-4
content: int *p = i;  或者：  int *p = &i[0];  否则类型不对
user-0 提问: 这段代码有错误么，为什么老是显示ld.exe||cannot open output file D:\Documents\XU.exe Permission d

回复:
user: user-1
content: 有的时候不知道怎么确认环境问题~

user: user-2
content: #include<stdio.h> #include<stdlib.h> #include<string.h>  struct link {     char name[20];     char password[20];     struct link *next; } link,*linklist;   int main() {      struct link *L;     L = (struct link*)malloc(sizeof(struct link));     if (!L)         exit(0);     strcpy(L->name,"oooo");     strcpy(L->password,"pppp");      printf("%s\n",L->name);     printf("%s\n",L->password);     L->next=NULL;     free(L);      return 0; } 程序没问题，建议检查配置环境

user: user-3
content: 代码没问题，出现原因可能是杀软或什么占用着，以致不能重新生成程序，一般重启或者去任务管理器结束了，或者新建另一个工程可正常

user: user-0
content: 现在去编译又很正常，这段代码没有什么实际意义，但是昨天老是出错
user-0 提问: 关于“无法将参数 1 从“int”转换为“const char *””的问题

回复:
user: user-0
content: 引用 1 楼 真相重于对错的回复:和库函数重名了 scanf改个名字 可以了，非常感谢啊！

user: user-1
content: 和库函数重名了 scanf改个名字
user-0 提问: 求大牛解答 头插法建立单链表 以及 输出

回复:
user: user-1
content: 输入输出类型不一样 输出改为 %c 别%d

user: user-2
content: printf("%d", p->next->data);  应该改成：  printf("%c", p->next->data);  你里面存的是字符，你按整数输出实际输出的是对应的ASCII码

user: user-0
content: 大牛们在哪里。。

user: user-0
content: #include <stdio.h>   #include <malloc.h>      typedef struct list   {       char data;       struct list *next;   }linklist;   linklist *CreateList_Front();    void ShowLinklist(linklist *h);   linklist *CreateList_Front() { 	linklist* head; 	linklist* p; 	char x; 	head=(linklist*)malloc(sizeof(linklist)); 	head->next=NULL; 	printf("请输入元素：\n"); 	scanf("%c",&x); 	while(x!='\n') 	{ 		p=(linklist*)malloc(sizeof(linklist)); 		p->data=x; 		p->next=head->next; 		head->next=p; 		scanf("%c",&x); 	}	 	return head; }  void ShowLinklist(linklist *h) { 	linklist* p; 	p=h; 	while(p->next!=NULL) 	{ 		printf("%d",p->next->data); 		p=p->next; 	} }  int main() { 	linklist* head; 	head=CreateList_Front(); 	ShowLinklist(head); 	return 0; 	 }
user-0 提问: 新手指针数组问题求助

回复:
user: user-1
content: main() 中 for(i=1;i<10;i++)  scanf("%d",p++); ===> for(i=0;i<10;i++)  scanf("%d",p++); for(i=1;i<10;i++){ printf("%d",*p); p++; } ===> for(i=0;i<10;i++){ printf("%d",*p); p++; } sort 中 for(j=i+1;i<n;j++) ===> for(j=i+1;j<n;j++)

user: user-0
content: 代码运行不报错，但是运行到最后会卡死，不知道什么原因
user-0 提问: “初始化”: 无法从“const char [3]”转换为“TCHAR *”

回复:
user: user-0
content: 加const可以了，谢谢！

user: user-1
content: 此外，你写成这样试试：   struct { 	const TCHAR *pszCaption; }button = { TEXT("yi") };

user: user-1
content: 引用 4 楼 yi19861209 的回复:怎么检查TCHAR宏和TEXT定义  右键，转到定义

user: user-0
content: 怎么检查TCHAR宏和TEXT定义

user: user-1
content: 引用 2 楼 yi19861209 的回复:为什么我的有错啊，我用vs2007  检查下TCHAR宏和TEXT定义是否被更改

user: user-0
content: 为什么我的有错啊，我用vs2007

user: user-1
content: 在我这测试没问题，无论是UNICODE还是多字节字符
user-0 提问: 关于C语言一个数n的n次方可以分解为n个奇数之和的问题

回复:
user: user-1
content: #include <iostream> #include <math.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { 	int N; 	int start =0; 	cout<<"Input N:"; 	cin>>N; 	int item = pow((double)N,N-1); 	if(N%2==0) 		start = -2*(N/2)+1; 	else 		start = -2*(N/2); 	for( int i=1; i<=N ;i++ ) 	{ 		cout<<item+start<<endl; 		start +=2; 	} 	return 0; }

user: user-1
content: 没仔细看你的代码，具体错误不清楚！ 我认为用暴力求解不合适。 N的N次方肯定能被N整除 然后对商加一个数，同时减一个数，必然会得到一个序列，且和不变 比如3的3次方为27 27除以3 为9 得到的序列为 9 9 9  然后对 9-2 9 9+2  -》7 9 11  或者9-4 9 9+4 ->5 9 13
user-0 提问: 新手求大佬解决问题

回复:
user: user-1
content: #include <stdio.h> int main(void) {     int age;//变量     float assets;//变量     char pet[40];//字符数组，用于储存字符串     printf("Enter your age ,assets,and fovorite pet.\n");     scanf_s("%d %f", &age, &assets);     scanf_s("%s", pet, 40);     printf("%d $%.2f %s\n", age, assets, pet);     return 0;  } pet输入格式有问题。 建议注意一下scanf_s对于%s的输入

user: user-2
content: $是什么鬼  是%吧

user: user-3
content: scanf_s("$S", pet);改为 scanf_s("%s, pet); scanf没有$S格式，字符串格式用%s

user: user-4
content: 重新建立一个项目 别用.cpp，最好用纯C，后缀名.c 再检查一下是不是在一个文件里定义了多个main()函数  最好一个文件/项目只有这个项目应该有的内容

user: user-5
content: 把vs卸了，装mingw-w64
user-0 提问: 生成的 exe文件无法运行

回复:
user: user-1
content: 建议还是使用当前流行的编译器

user: user-1
content: TC不支持64的吧，或者说TC编译生成的exe还是32位的。

user: user-2
content: C与C++程序设计学习与实验系统 2013.3 可以不用建立项目（单文件），简单的试验代码甚至不用保存为文件，直接编译运行观察结果，比较方便。 只有几十M大小。自带VC 6.0编译器和TC编译器（选项可设置），自带DOSBox运行TC生成的exe程序。  TC（Turbo C）老代码（比如小游戏）最好看懂了以后，理解了算法和过程，用VC改写成Windows平台的。  楼主如果想用C玩玩图形、小游戏编程，可以了解一下EasyX，EasyX是Windows平台最简单的绘图函数库（名副其实），兼容BC和TC的绘图函数，在VC下用EasyX来编程跟在TC下编程绘图差不多是完全一样的。EasyX既可以绘图，也支持图像显示和处理。  下载一个EasyX包，里面有完整的函数手册EasyX_Help.chm，有示例。EasyX官网有很多网友上传的实例，包括游戏。  仅供参考： 用绘图语句画机器猫（初学C语言的同学必看） http://blog.163.com/tab_98/blog/static/1192409720150316223680/

user: user-3
content: TC软件非常老了，生成的是16位的软件，而Win 64位的系统已经不支持16位的软件了，只支持32位和64位 所以请换一个能生成32位或64位软件的编译器就可以了

user: user-4
content: TC软件最好在DosBox环境下使用。  或者你干脆改用这个得了：Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-5
content: 现在还用什么TC？vs搞起
user-0 提问: 关于 顺序表 的初始化和建立 求大牛解答！！！

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <malloc.h>  typedef struct {     int* pBase;     int len; }SeqList;  void InitList(SeqList **L); void CreatList(SeqList *L); void ShowList(SeqList *L);  void InitList(SeqList **L) {     *L = (SeqList *)malloc(sizeof(SeqList));     (*L)->len = 0; }  void CreatList(SeqList *L) {     int i;     printf("请输入所需顺序表长度:");     scanf("%d", &L->len);     L->pBase = (int *)malloc(sizeof(int) * L->len);     if (!L->pBase)         exit(0);      printf("请输入顺序表元素:");     for(i = 0; i < L->len; i++)         scanf("%d", &L->pBase[i]); }  void ShowList(SeqList* L) {     int i;     for(i = 0;i < L->len;i++)         printf("%d", L->pBase[i]); }  int main() {     SeqList *L;     InitList(&L);     CreatList(L);     ShowList(L);     return 0; } 参考一下吧 除了InitList有问题，需要用二重指针外，pBase没有申请空间，并且pBase的下表应该从0开始，详见上面的代码；

user: user-0
content: 感谢 感谢 感谢大牛！！！ 提前祝您和家人春节快乐

user: user-2
content: SeqList* L;     InitList(&L);

user: user-2
content: void InitList(SeqList ** L) {     *L=(SeqList*)malloc(sizeof(SeqList));     *L->len=0; }

user: user-0
content: 马上过年了，知道大牛们都很忙。但求百忙之中抽空解答一下，谢谢。
user-0 提问: 求给定精度的简单交错序列部分和为什么不能用while

回复:
user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: while 和 do while是有区别的 while 是先算 后面括号里面bool表达式，如果 为真，执行大括号内的循环体。 do while是先执行大括号里面的语句，最后算while后面括号里面的bool表达式，为真就重新执行循环体。否则退出循环 fabs(0) >eps 只要eps不输入负数永远为假，所以不执行循环体。

user: user-3
content: 引用 3 楼 weixin_41732739 的回复:可我的初始值定的就是1啊，怎么会出现fab（0）这种情况啊？？？？ double num; 我并没有看到double num=1的写法

user: user-0
content: 我知道了，因为我进行while循环的时候，还没有赋值，等于里面的判断条件是无效的，所以不能进入循环，会直接跳出 谢谢一楼大佬解答，二楼的亲。。没看懂你什么意思。。

user: user-0
content: 可我的初始值定的就是1啊，怎么会出现fab（0）这种情况啊？？？？
user-0 提问: 大神们帮我看看我这样申请内存有没有问题啊

回复:
user: user-0
content: 感谢各位！！！！   已找到错误

user: user-1
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-2
content: 应该可以吧，只是为啥分配length长度的内存，却要读length + 1的字符呢？是不是应该length - 1，然后最后一个字节做字符串结束？
user-0 提问: 关于c和windows文本文件行结束符的问题

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！

user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-0
content: 我不知道是不是我问题说的有点怪，因为关于Enter与换行和回车的关系，Enter把字符送入缓冲器里面，然后再送如字符\n，以及文本文件的行结束符的关系有点蒙（关于结束符的关系比如：在上面的两个图上，都按Enter键的话，不考虑是否加\r，单纯就Enter的话代表的是哪个字符？？？是回车还是换行，还是两个都有，还是不管是回车还是换行都一个意思），关系对我来说有点复杂。问题有点多，能否建议一下这些知识在哪有？？？c语言书上根本不详细

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

user: user-2
content: 第一，一般不是判断什么环境，而是直接看有没有\r 第二，\r存在于文件中，而不是编辑环境。换句话说，如果编辑文件时有\r，保存时就会有，否则就没有。  说的还是有点绕。一般来说，Windows文本编辑器会用\r\n换行，于是其保存的文件中会有\r，而Linux文本编辑不带\r，保存的文件就没有。当打开文件时，Windows文本编辑器会找\r，没有的话不换行，Linux文本编辑器则以\n换行，遇到\r时显示一个特殊符号^M。  类似于UltraEdit之类的软件会提供转换功能，所谓DOS转UNIX或反之即是如此，这个功能就是加入或删除\r。在Linux环境下，则可以用dos2unix来把文件中的\r删除掉。
user-0 提问: 小白自学c语言，用的devc++编程，这个报错不知道哪错了？希望大神帮我看一下

回复:
user: user-1
content: (⊙o⊙)…，我也是新手，但是你这样没有头文件，没有主函数main的编程是没法通过编译阶段的。互勉互助，你先试试。

user: user-2
content: 从你的截图看来，编译器没有找到main函数。因为程序都是从main函数开始执行的。你定义的函数，需要在main函数里调用才会执行。

user: user-3
content: 头文件和main函数都没有

user: user-4
content: 提示的意思是，在main函数中没有找到winmain函数。 好吧，你的程序应当是没有main函数，或者winmain函数。

user: user-5
content: main函数都没有。。。。。

user: user-6
content: 除非你是编译lib或dll，否者请写个main函数调用你的函数

user: user-0
content: 还有这张，谢谢
user-0 提问: 数组问题，求大佬

回复:
user: user-1
content: 第一个是初始化赋值，这样是可以的。 第二个，根据数组名不能做左值的规则，这样赋值是不可以的。注意这儿不是初始化，而是赋值。因为上一条语句char str[20];已经定义了str，并且数组内的数组是随机值。 第二条语句就是赋值，因此不可以。可以考虑使用strcpy/memcpy给str赋值

user: user-0
content: 引用 6 楼 自信男孩的回复:第一个是初始化赋值，这样是可以的。 第二个，根据数组名不能做左值的规则，这样赋值是不可以的。注意这儿不是初始化，而是赋值。因为上一条语句char str[20];已经定义了str，并且数组内的数组是随机值。 第二条语句就是赋值，因此不可以。可以考虑使用strcpy/memcpy给str赋值 多谢！

user: user-0
content: 引用 1 楼 user-4的回复:第一种是执行的初始化的过程，第二种则是执行的赋值的过程，数组的赋值要用memcpy,strcpy等函数，不能直接用等于号 谢谢大佬。。。。。。。

user: user-2
content: “变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。

user: user-3
content: 第一种为：在内存堆上开辟20个字节的空间，并把后面的值填进去（赋值）。 第二种为：县开辟空间，然后后面的数值会先放在内存中的静态常量区，然后再将值赋过去。

user: user-2
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-4
content: 第一种是执行的初始化的过程，第二种则是执行的赋值的过程，数组的赋值要用memcpy,strcpy等函数，不能直接用等于号
user-0 提问: win32 API子窗口不显视

回复:
user: user-1
content: 我这用VS测试会显示啊，检查下你各函数返回值有没执行成功，此外ShowWindow后面加上UpdateWindow

user: user-2
content: 楼主也许可以试试C++ Builder。  图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  C++ Builder的较新版本——RAD Studio XE3以上版本添加对iOS和Android的支持工具包，让开发者编写的Delphi/C++应用可以同时在Windows、OS X、iOS和Android平台上运行。现在最新版本是RAD Studio 10.2。  仅供参考： 初学者学习C++ Builder第一个程序（模拟聊天室），经典！ http://blog.163.com/tab_98/blog/static/11924097201693033057497/ C++ Builder绘图示例（模拟时钟） http://blog.163.com/tab_98/blog/static/11924097201611324819376/ 从C语言的菜单界面管理系统到C++ Builder的图形用户界面，一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/   书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。
user-0 提问: 读取内存中字符串的一个小问题

回复:
user: user-1
content: 这个不太好弄吧，在不知道长度情况下你不知道字符串编码就不知道它是以\0还是\0\0结束的

user: user-2
content: 不就是乱码字符串引起的吗？

user: user-3
content: 遇到.dll就认为字符串结束？

user: user-4
content: 至少地址范围能知道吧？而且其中不应该存在不允许访问的地址？

user: user-5
content: c/c艹的字符串以\0表示结尾

user: user-6
content: 引用 3 楼 u011377435 的回复:但是乱码位置的字符无法访问，访问就会崩溃 既然无法访问, 可否代表该内存不是运行程序分配的空间, 不是运行程序的使用内存, 为什么要去访问? 如果你非要这么做, 建议你一个字符一个字符读, 读到崩了, 然后抛异常处理, 代表你已经没法往下读了

user: user-0
content: 但是DbgPrint可以输出

user: user-0
content: 但是乱码位置的字符无法访问，访问就会崩溃

user: user-7
content: 一般是调用strcpy() memcpy()这些函数。 想从无序乱码中读到有效的字符，而你又不知道字符的长度，建议全部读取出来。 用你认为是有效的字符进行条件判断或者比较，然后重新组合。

user: user-0
user-0 提问: 字符单元化和拷贝的问题？

回复:
user: user-1
content: char ion[] = ",.";

user: user-2
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-3
content: 版主说的对，我看了一下，是不是和什么内存重叠有关呢？而且我发现原来的代码只会把偶数个o去掉，奇数的时候不会，比如wow.sohu.bob.fof.com，结果为wow s hu bob f f com，不是很明白为啥，等待高人了

user: user-4
content: strcpy(numm,temp); printf("%s ",numm);  这两句直接换成  printf("%s ", temp);  不就行了  否则你都把numm污染了，后面出现这样的结果也就不足为奇了
user-0 提问: 写一个串口接收程序，不想要补0 ，如何做，跪求各位大神！源码如下

回复:
user: user-1
content: void hexdump(unsigned char * buf, unsigned int len) { int i; char buffer[1024]; char buffer2[64]; strcpy(buffer2,""); for(i=0;i<len;i++) { sprintf(buffer2,"%02X",buf[i]&0x0ff); /*if((i+1)%16 == 0)*/ buffer2[3] = 0;  strcat(buffer,buffer2);  } printf("%s\n",buffer);  memset(buffer,0,sizeof(buffer));  return; }

user: user-2
content: for(i=0;i<len;i++) { sprintf(buffer2[2*i],"%02X",buf[i]&0x0ff); } buffer2[2*len] = '\0'; 试试

user: user-3
content: 引用 4 楼 tuotuomasi 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] sprintf(buffer2,"%02X",(unsigned char)buf[i]);  感谢赵老师 还有个问题是 为什么收到 两个字节就直接打印出来 并不能在一行打印出我发送的一串字符串。[/quote] 参考《编译原理》中的词法分析和有限状态自动机？

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:sprintf(buffer2,"%02X",(unsigned char)buf[i]);  去掉memset 就是这样的 FF FFAC FFAC03

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:sprintf(buffer2,"%02X",(unsigned char)buf[i]);  感谢赵老师 还有个问题是 为什么收到 两个字节就直接打印出来 并不能在一行打印出我发送的一串字符串。

user: user-3
content: sprintf(buffer2,"%02X",(unsigned char)buf[i]);
user-0 提问: //利用指针实现字符串的反转

回复:
user: user-1
content: #include <stdio.h> #include <string.h>  #define MAX 100  void reverse_string(char *string) {     char *last_char, temp;      for(last_char = string; *last_char != '\0'; last_char++)         ;     last_char--;    /* pointer last character (not '\0')*/      while(string < last_char)     {          temp = *last_char;         *last_char-- = *string;         *string++ = temp;      }  }  void reverse_str(char *str) {     char *end_str = str + strlen(str) - 1, tmp;      while (str < end_str) {         tmp = *end_str;         *end_str = *str;         *str = tmp;         str++;         end_str--;     } }  int main() {     char str[MAX];     printf("请输入一个字符串:\n");     gets(str);     reverse_string(str);     //reverse_str(str);     printf("翻转后的字符串是:\n%s\n", str);     return 0; } 参考一下吧

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 你for循环不能那样判断。

user: user-4
content: for (last_char = string; *string != '\0'; last_char++)  这里是个死循环吧，每次递增的是last_char，*string 一开始不为'\0'则永远不会为 '\0'
user-0 提问: 【求解答】PAT乙级 switch函数 字符串的拼接问题

回复:
user: user-1
content: 你好，请问我可以向你求一下那个Java语言程序设计第十版11-20章的答案吗？😭我没有积分，不能下载答案😭拜托你啦

user: user-0
content: 谢谢各位大佬，弄明白了

user: user-2
content: /*PAT.1002. 写出这个数   读入一个自然数n，计算其各位数字之和，用汉语拼音写出和的每一位数字。*/ #include <stdio.h> #include <string.h>  #if 0 void pop(int N,int sum) {     sum=0;     while (1)     {         sum += N%10;         N/=10;         if (N==0) break;     } } #endif #define MAX_SIZE    80  int main() {     //char py[128] = "\0";     char digits[10][8] = { "Ling", "Yi", "Er", "San", "Si", "Wu", "Liu", "Qi", "Ba", "Jiu"};     int i,j;     int sum = 0;     char num_list[MAX_SIZE];     scanf("%s", num_list);      i = 0;     while (i < strlen(num_list)) {         sum += num_list[i++] - '0';     }      for (i = MAX_SIZE-1; sum && i >= 0; i--) {         num_list[i] = sum % 10;         sum /= 10;     }      for (j = i + 1; j < MAX_SIZE; j++)         printf("%s ", digits[num_list[j]]);     putchar(10);      /*     for (i=1;i <= 100; i++)     {         num[i]=summary%10;         summary/=10;         if (summary==0) break;     }     for (j=i;j>0;j--)     {switch (num[j]){                         case 0 : strcat(py,"Ling "); break;                         case 1 : strcat(py,"Yi"); break;                         case 2 : strcat(py,"Er"); break;                         case 3 : strcat(py,"San"); break;                         case 4 : strcat(py,"Si"); break;                         case 5 : strcat(py,"Wu"); break;                         case 6 : strcat(py,"Liu"); break;                         case 7 : strcat(py,"Qi"); break;                         case 8 : strcat(py,"Ba"); break;                         case 9 : strcat(py,"Jiu"); break;                     }     }     printf("%s",py);     */      return 0; } 参考一下吧  楼主的for循环有问题，第二个表达式应该是判断表达式，第三个表达式才是自增表达式

user: user-3
content: char N[101]; char STR[10][5] = { {"Ling"}, {"Yi"}, {"Er"}, {"San"}, {"Si"}, {"Wu"}, {"Liu"}, {"Qi"}, {"Ba"}, {"Jiu"}  };  int main() { 	char  result[3][5]; 	scanf_s("%s", N,100); 	int lenght = strlen(N); 	int total = 0; 	for (int i = 0; i < lenght; i++) 	{ 		if (isdigit(N[i])) 			total += N[i] - '0'; 		else 		{ 			printf("不是数字"); 			return 1; 		} 	} 	printf("和为：%d\n", total); 	int sp = 0; 	while (total) 	{ 		int tmp = total % 10; 		 		total = total / 10; 		strcpy_s(result[sp++],4,STR[tmp]); 	} 	for (int i = sp-1; i >= 0; i--) 	{ 		printf("%s ", result[i]); 	}     return 0; }

user: user-3
content: 思路有问题把 人家要求是10的100次方 想一想计算机整数最大表示是多少？

user: user-4
content: 這個for語句寫錯了，循環繼續條件在中間：  for (i=1;i++;i<=100)
user-0 提问: 关于结构体的问题  困扰了一晚都没睡好

回复:
user: user-0
content: 假设n = 3 那么即创建了动态数组p[3] 发送到函数的形参时应该也只有*(p2+2)就是极限了吧 怎么我p2+10都可以。。但是如果我直接*p2就会报错  甚至我删掉这一句 都不会报错，这又是为什么。。max没有初始化直接就和（*（p2+i）).aver 比较却没问题 这是碰巧的吗。。

user: user-1
content: #include<stdio.h> #include<stdlib.h>  struct student {     int   num;     char  name[20];     float score[3];     float aver; };      void input(struct student *p1,int);     struct student *max(struct student *p2,int n);     void print(struct student *p3);  int main(void) {      int n;     struct student *p;      printf("请输入学生的人数\n");     scanf("%d",&n);      p = (struct student *)malloc(n * sizeof(struct student));      input(p,n);     print(max(p,n));  //省了定义max(p)的值的步骤      return 0; }  void input(struct student *p1,int n) {     int i;      printf("请输入学号、姓名、3科成绩\n");      for(i = 0;i<n;i++)     {         //scanf("%d %s %f %f %f", &(*(p1+i)).num,(*(p1+i)).name,&(*(p1+i)).score[0],&(*(p1+i)).score[1],&(*(p1+i)).score[2]);         //(*(p1+i)).aver = ((*(p1+i)).score[0] + (*(p1+i)).score[1] + (*(p1+i)).score[2]) / 3.0;         scanf("%d %s %f %f %f", &p1[i].num, p1[i].name, &p1[i].score[0], &p1[i].score[1], &p1[i].score[2]);         p1[i].aver = (p1[i].score[0] + p1[i].score[1] + p1[i].score[2]) / 3.0;     } }  struct student *max(struct student *p2,int n)//假设n等于3 {     int i;     struct student *pmax_aver = NULL;      pmax_aver = p2 + 0;      for(i = 1; i< n; i++)         if(p2[i].aver > pmax_aver->aver)             pmax_aver = p2 + i;      return (pmax_aver); }  void print(struct student *p3) {     printf("成绩最高的学生信息如下:\n");      //printf("学号:%d\n姓名:%s\n课程1:%f\n课程2:%f\n课程3:%f\n平均成绩:%f\n\n",(p3).num,(p3).name,(p3).score[0],(p3).score[1],(p3).score[2],(p3).aver);     printf("学号:%d\n姓名:%s\n课程1:%f\n课程2:%f\n课程3:%f\n平均成绩:%f\n\n",             p3->num, p3->name, p3->score[0], p3->score[1], p3->score[2], p3->aver); }   参考一下吧  max.aver = (p2+10)->aver;  //为什么直接是(p2)->aver会出现乱码 为什么p2+10都可以，我明明没有创建这么多 为什么这一句甚至删掉都可以  这个地方不能用p2->aver，因为p2可以理解为数组，这样用会类型不匹配；但是可以这样用(p2+0)->aver；虽然p2和p2+0的地址值一样，但是类型是不一样的。p2接收到的是数组（n个学生信息的首地址）。p2+0是表示第一个学生的地址，所以可以用(p2+0)->aver p2+10若n位小于10，则该操作会导致越界，越界是未定义行为。之所以(p2+10)->aver没问题，是因为类型匹配。但这样做存在很大的危险，很容易导致段错误；  我对max函数做了一些改动，返回aver最大的学生信息的地址，这样在print函数里就可以使用了，因为print函数是输出一个学生信息，因此n参数就是多余，既然多余建议删除，让代码整洁，提高可读性；返回地址而不是返回结构体变量还会节省空间，因为一个指针占用的是int类型大小的空间，而结构体的长度至少大于这个值，因此会节省空间，还会提高函数的执行效率，为什么呢，因为参数传递若是结构变量则要穿很大的结构体（结构体里的值），而传指针可以节省很多的拷贝，节省执行时间，提高效率； 虽然一个小小的程序，但是还是可以往深入的研究的（时间复杂度，空间复杂度）
user-0 提问: 【求助散分】我自己写了个简单的加密，但是解密跟加密竟然不对称，求解

回复:
user: user-1
content: 加密解密不对称

user: user-0
content: 引用 3 楼 ckc 的回复:加减应该是相同的数据。  每字节明文有255种可能，密文也是255种可能，是一一对应关系，加密解密没问题的 因为字符串用0表示结尾，所以要绕过0 比如加10的时候，对于-10到-1之间的数据，+10之后再+1就可以了对 结尾那个我绕过了

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:两个问题： 第一个：加密是+5，而解密是-10，很明显是不对称的。 第二个：解密方法，-10后会不会导致*str == 0？若这个表达式成立，那么解密之后数据（字符串）就可能不全。用-10就可以

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:两个问题： 第一个：加密是+5，而解密是-10，很明显是不对称的。 第二个：解密方法，-10后会不会导致*str == 0？若这个表达式成立，那么解密之后数据（字符串）就可能不全。关键是我用-5 还原不了数据

user: user-2
content: 加减应该是相同的数据。  每字节明文有255种可能，密文也是255种可能，是一一对应关系，加密解密没问题的 因为字符串用0表示结尾，所以要绕过0 比如加10的时候，对于-10到-1之间的数据，+10之后再+1就可以了

user: user-3
content: 即使Decode里改成减5也未必完全还原为原来的，因为判断条件也不对称

user: user-4
content: 两个问题： 第一个：加密是+5，而解密是-10，很明显是不对称的。 第二个：解密方法，-10后会不会导致*str == 0？若这个表达式成立，那么解密之后数据（字符串）就可能不全。
user-0 提问: 这个for循环错在哪，

回复:
user: user-0
content: 忘了加括号，，，，，，，，，，，，，，，尴尬，

user: user-1
content: 看你的逻辑应该是将sum += score[index];放到第一个循环里。但是实际逻辑没有这么做，只是将index = SIZE时加到了sum里。这个也是对于score数组来讲已经越界。 解决办法是：加大括号，将scanf和sum += score[index]括到第一个for循环里。  下次提问建议直接贴代码，而不是帖代码截图。
user-0 提问: 段错误吐核

回复:
user: user-1
content: 信息太少了，但从这个函数不能确定是什么导致的段错误；

user: user-2
content: Windows: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  Linux: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令
user-0 提问: 请问如何保存摄像头传输的图像矩阵？

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:    /** Read camera data.      *      * @return true if successful      */     bool read() {         bool success = true;         try         {             // Read data from the Camera             ROS_DEBUG_STREAM("[" << camera_name_ << "] reading data");             unsigned char *frame = NULL;             uint32_t bytes_used;             int buf_idx = cam_->grab(&frame, bytes_used);             if (buf_idx < 0) {                 ROS_WARN("Could not grab image");             }             else if (frame)             {                 FILE *f;                 f=fopen("d:\\lastframe.dat","wb");                 fwrite((const void *)frame,1,(size_t)(config_.height*config_.width*3),f);                 fclose(f);                 //cv::WImageBuffer3_b image( frame );                 //cv::Mat data(height, width, CV_8UC1, frame, 3 * width);                                 sensor_msgs::fillImage(image_, "bgr8", config_.height, config_.width,                                     3*config_.width, frame);                 cam_->release(buf_idx);             }             ROS_DEBUG_STREAM("[" << camera_name_ << "] read returned");         }         catch (uvc_cam::Exception& e)         {             ROS_WARN_STREAM("[" << camera_name_                     << "] Exception reading data: " << e.what());             success = false;         }         return success;     }   你好  感谢~ 我试了一下  因为我是在Ubuntu系统下使用的   所以把那个地址改成了/home/ros 这种形式  但是运行之后没有找到这个dat文件啊

user: user-0
content: 引用 1 楼 iloveyou418 的回复:不断覆盖~图像需要处理么？如果只是单纯的覆盖的话应该没什么难度啊 你好   图像不需要处理  请问这个要怎么保存然后覆盖啊  谢了~

user: user-1
content: /** Read camera data.      *      * @return true if successful      */     bool read() {         bool success = true;         try         {             // Read data from the Camera             ROS_DEBUG_STREAM("[" << camera_name_ << "] reading data");             unsigned char *frame = NULL;             uint32_t bytes_used;             int buf_idx = cam_->grab(&frame, bytes_used);             if (buf_idx < 0) {                 ROS_WARN("Could not grab image");             }             else if (frame)             {                 FILE *f;                 f=fopen("d:\\lastframe.dat","wb");                 fwrite((const void *)frame,1,(size_t)(config_.height*config_.width*3),f);                 fclose(f);                 //cv::WImageBuffer3_b image( frame );                 //cv::Mat data(height, width, CV_8UC1, frame, 3 * width);                                 sensor_msgs::fillImage(image_, "bgr8", config_.height, config_.width,                                     3*config_.width, frame);                 cam_->release(buf_idx);             }             ROS_DEBUG_STREAM("[" << camera_name_ << "] read returned");         }         catch (uvc_cam::Exception& e)         {             ROS_WARN_STREAM("[" << camera_name_                     << "] Exception reading data: " << e.what());             success = false;         }         return success;     }

user: user-2
content: 不断覆盖~图像需要处理么？如果只是单纯的覆盖的话应该没什么难度啊
user-0 提问: 关于scanf返回值的测试

回复:
user: user-1
content: 引用 9 楼 helloxkcd 的回复:[quote=引用 6 楼 DelphiGuy 的回复:] #include <conio.h> // ...     while(1)     {         x = scanf("%d %d %d",&a,&b,&c);         printf("%d\n",x);         printf("if continue please input 1, or enter 0\n");         fflush(stdin);         if (getchar() != '1') break; //... 不行！！！！！！[/quote]  昨天凭记忆写的没测试，经实测，C++Builder、gcc是可以的，VC++不行。究其原因，fflush(stdin);是未定义行为，能否清除输入缓冲区是实现相关的，稍微修改一下就好了。   #include <stdio.h>  int main() {   int x, a, b, c;    while(1)   {     x = scanf("%d %d %d", &a, &b, &c);     printf("%d %d %d %d\n", x, a, b, c);     printf("if continue please input 1, or enter 0\n");     // fflush(stdin);     fseek(stdin, 0, SEEK_END);  // :)     if (getchar() != '1') break;   }    return 0; }

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

user: user-2
content: 仅供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-3
content: 引用 6 楼 DelphiGuy 的回复:#include <conio.h> // ...     while(1)     {         x = scanf("%d %d %d",&a,&b,&c);         printf("%d\n",x);         printf("if continue please input 1, or enter 0\n");         fflush(stdin);         if (getchar() != '1') break; //... 不行！！！！！！

user: user-3
content: 因为第二个%d没有读取成功，导致后面的都留在缓冲区里。

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 [code=c]//请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。 [/code]

user: user-1
content: #include <conio.h> // ...     while(1)     {         x = scanf("%d %d %d",&a,&b,&c);         printf("%d\n",x);         printf("if continue please input 1, or enter 0\n");         fflush(stdin);         if (getchar() != '1') break; //...

user: user-4
content: 引用 3 楼 waitti 的回复:@自信男孩 可是他下面显示0，又是为什么 因为第一次输入的a 还在输入缓存里，在与变量a匹配时不匹配呢，直接返回了，因此一个也没匹配，所以返回0了。

user: user-4
content: #include<stdio.h> int main() {     int x;     int a,b,c;     int flag = 1;     while(flag == 1)     {         x = scanf("%d %d %d",&a,&b,&c);         printf("%d\n",x);         while (3 - x + 1) {             getchar();             x++;         }         printf("if continue please input 1, or enter 0\n");         scanf("%d",&flag);         printf("flag = %d\n", flag);     }     return 0; } 这种方法可以避免死循环，但是方法不够好，如果有更好的，建议采用更好的方法；

user: user-0
content: @自信男孩 可是他下面显示0，又是为什么

user: user-0
content: 可是他下面显示0，又是为什么

user: user-4
content: 进入死循环了，这是因为输入并没有立即进入内存里，而是在输入缓存里。由于输入的a并不和b类型匹配，所以一直在输入缓存里，下面的flag也是从输入缓存里拿，也是不匹配，然后flag还是1，所以继续循环，由于在输入缓存里的a不能和变量a匹配，所以直接返回0，继续。同样flag也不和a匹配，因此继续循环，flag还是为1，继续循环。  可能会会问，scanf("%d", &flag);为啥不让从终端输入，因为输入缓存里有数据，第一次输入的a, 2
user-0 提问: objective-c新手求助。有前辈能指导吗？

回复:
user: user-1
content: 这是你的签名:  void drawShapes(id shapes, int count)   这是我的签名:  void drawShapes(id *shapes, int count)

user: user-0
content: 引用 1 楼 lexnewgate 的回复: void drawShapes(id *shapes, int count)  shapes你定义的为id的数组,drawShapes的签名不能为id了. 那解决方案是啥？

user: user-1
content: void drawShapes(id *shapes, int count)  shapes你定义的为id的数组,drawShapes的签名不能为id了.
user-0 提问: 简单指针问题

回复:
user: user-1
content: char *str = "abcdef"; 指向是常量区的字符串，不能进行修改

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

user: user-3
content: char *str = "abcdef";这条语句是将字符串的地址存放在指针变量str中；由于该字符串是一个常量，常量是不能修改的。所以reverse_string函数由于对字符常量修改，导致段错误； 若是用char str[MAX] = “abcdef";数组，那么这条表达式就是现将字符串常量拷贝到字符数组中，由于字符数组是可读可写的（在栈上申请的空间），因此调用reverse_string对str修改是没问题的。

user: user-4
content: http://blog.csdn.net/yanbober/article/details/8713250 参考上面链接，"abcdef"存放在文字常量区，不能被写入

user: user-5
content: 这样定义指针，他指向的是常量，不允许修改的。正确的用法是定义后用malloc分配内存。
user-0 提问: 结构体sockaddr_in初始化该如何写？

回复:
user: user-1
content: sockaddr_in servAddr = {     /* servAddr.sin_family      = */ AF_INET,     /* servAddr.sin_port        = */ htons(9092),     {     /* servAddr.sin_addr.s_addr = */ inet_addr("118.85.207.85")     } };   http://bbs.csdn.net/topics/380157851 http://bbs.csdn.net/topics/390150105

user: user-1
content: http://bbs.csdn.net/topics/392094659

user: user-1
content: “变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。

user: user-0
content: 引用 2 楼 paschen 的回复:union只能对第一个元素进行初始化，共享部分内存的值以此初始化值共享，建议像你注释那样写，毕竟程序是给人读的  感谢版主的回答，我刚想到办法 union是可以 指定对象初始化的

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:sockaddr_in servAddr = {     /* servAddr.sin_family      = */ AF_INET,     /* servAddr.sin_port        = */ htons(9092),     {     /* servAddr.sin_addr.s_addr = */ inet_addr("118.85.207.85")     } };   http://bbs.csdn.net/topics/380157851 http://bbs.csdn.net/topics/390150105   这么写 不行呢，我是在Windows下编译   in_addr里不是一个成员  windows下头文件里的是个共用体 里面有三个成员

user: user-2
content: 结构体初始化，一般就是直接赋值。内存拷贝memcpy、字符串拷贝strcpy等。

user: user-3
content: http://en.cppreference.com/w/cpp/language/union

user: user-3
content: union只能对第一个元素进行初始化，共享部分内存的值以此初始化值共享，建议像你注释那样写，毕竟程序是给人读的

user: user-4
content: sockaddr_in addr = {0} 不就这样么
user-0 提问: 求从内存4区指导分析这个执行结果

回复:
user: user-1
content: VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533

user: user-2
content: i和buf尽管是函数栈里的局部变量，但是它们存在时总是在某个位置的，所以你能得到这些局部变量的地址；  局部变量的生命周期由编译器控制的，函数执行结束时就会释放，你无法判断这个时候这些地址指向的内容有没有被改变，所以不要试图去获取已被释放的局部变量所在地址指向的内容

user: user-3
content: 为什么老师到哪都发这个。。。

user: user-1
content: 栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-4
content: 首先,*i);传了一个值。 buf只传了地址，之后又被修改了。

user: user-5
content: 这两个都是返回局部变量地址，需要注意的是局部变量是在函数栈上申请的，作用域是函数内，生命周期是从函数调用开始，函数调用结束（得到返回值），函数栈就会被释放，什么意思呢，释放了就是在使用也没有意义，释放之后就可能被其他的函数栈再次使用，如果别的函数栈使用了，上一个函数用于存放buf和i的地址，那么你得到的buf/i的内容就是随机的了，如果没有被使用，那么可能会得到你想要的结果；因此返回局部变量的地址具有不确定性，那么使用它就失去了我们编程的逻辑和确定性。

user: user-6
content: 引用 2 楼 muniq 的回复:引用 1 楼 user-6 的回复:两个都是不对的，局部变量在函数调用完就销毁了，你例子什么都不能说明，如果输出的值是你期望的，最多也只能说明这个地址还没有被其他数据覆盖，你试下在system("pause");前再输出下i的值看还是不是你期望的我知道这个不能说明什么 ，栈内存在执行完就会被析构，只是想知道为什么会有这样的结果  什么样的结果都是可能的，使用销毁的内存是一个未定义行为，局部变量销毁不代表清0，只是移动了栈顶指针

user: user-0
content: 引用 1 楼 user-6 的回复:两个都是不对的，局部变量在函数调用完就销毁了，你例子什么都不能说明，如果输出的值是你期望的，最多也只能说明这个地址还没有被其他数据覆盖，你试下在system("pause");前再输出下i的值看还是不是你期望的 我知道这个不能说明什么 ，栈内存在执行完就会被析构，只是想知道为什么会有这样的结果

user: user-6
content: 两个都是不对的，局部变量在函数调用完就销毁了，你例子什么都不能说明，如果输出的值是你期望的，最多也只能说明这个地址还没有被其他数据覆盖，你试下在system("pause");前再输出下i的值看还是不是你期望的
user-0 提问: Mac上执行gcc命令出现xcrun: error: invalid active developer path....如何解决？

回复:
user: user-1
content: 直接命令行输入：xcode-select --install 你会有惊喜 记得给积分哦

user: user-2
content: http://blog.csdn.net/kedongjun/article/details/51470506 https://www.cnblogs.com/espooky/p/5979920.html
user-0 提问: 小白求教基本函数问题（double与float）

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

user: user-2
content: 因为double和float的占用内存大小不一样。  若定义double a，那么输入时需要注意应该用%lf 因为%f是针对float，而%lf是对应double
user-0 提问: 题目是poj1008，问题是结构体数组中数组成员变量的调用

回复:
user: user-1
content: 仅供参考：//codegen.c // 输入一组字符串，比如 // aa ss ddd dd 33 dd // 然后自动生成一个函数 int A(const char*); // 实现A("aa")返回0  A("ss")返回1 依次类推 #include <stdio.h> int main(int argc,char **argv) {     int i;     if (argc<2) {         printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);         return 1;     }     //printf("#include <string.h>\n");     printf("int A(const char *a) {\n");     for (i=0;i<argc-1;i++) {         printf("    if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);     }     printf("    return -1;\n");     printf("}\n");     return 0; } //C:\test\Debug>codegen.exe //codegen.exe p1 [p2 ...] [>result.c] //Generate code int A(const char *a); 0==A("p1") 1==A("p2") ... //C:\test\Debug>codegen.exe aa ss ddd dd 33 dd //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} // //c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c // //c:\test\Debug>type result.c //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} //

user: user-2
content: 代码，不是这么写滴。

user: user-3
content: switch(ch) ... case要求ch是整型数，字符串是不可以的。

user: user-4
content: case 不支持字符串，只能用 if(strcmp(s1, s2) == 0) 以及 else if 这样多个逐一判断。

user: user-5
content: 字符串能case的吗？

user: user-6
content: 基础知识的问题，switch语句用的不对。首先，明确switch语句中，语法格式是这样的： switch (e) { 		case c1: 			//执行相应语句  		break; 		case c2: 		    //执行相应语句 		break; 			//. . . 其他case事件 . . . 		default: 			//执行相应语句 		break; 	} 其中，e为一个整型的常量，！！当switch中的e的值恰好与case语句前的数字相同的时候执行相应的语句。因此你前面定义的是char类型的数组，后面将它用在switch语句中，就会出现不存在从char类型转换成int类型的错误。这个问题的

user: user-7
content: 我觉得你倒不如来个二维字符数组 。。。

user: user-8
content: case后面的值必须是编译时就能确定的常量，否则不能用swich，你可以使用if去判断
user-0 提问: 打字小游戏

回复:
user: user-1
content: http://download.csdn.net/detail/zhao4zhong1/4084259

user: user-2
content: 游戏开发（一）——控制台 贪吃蛇 游戏开发（二）——控制台 俄罗斯方块

user: user-3
content: 楼主如果想用C玩玩图形、小游戏编程，可以了解一下EasyX，EasyX是Windows平台最简单的绘图函数库（名副其实），兼容BC和TC的绘图函数，在VC下用EasyX来编程跟在TC下编程绘图差不多是完全一样的。EasyX既可以绘图，也支持图像显示和处理。  下载一个EasyX包，里面有完整的函数手册EasyX_Help.chm，有示例。EasyX官网有很多网友上传的实例，包括游戏。  仅供参考： 用绘图语句画机器猫（初学C语言的同学必看） http://blog.163.com/tab_98/blog/static/1192409720150316223680/