Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言的一个小错误，大神帮忙看看

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

user: user-2
content: 楼主这个小程序，函数的入参没必要那么复杂。学生个数直接传递就可，学生信息的结构体用 指向结构体的指针就可以（仅一层），不用传递指向结构体指针的指针。 下面简单修改了下，仅供参考。  /*     日期：2017年1月1日     目的：学生信息管理系统      总结: 总结一下前面所学的知识  */   # include <stdio.h> # include <malloc.h>   struct student {     char name[100];        //姓名      int age;            //年龄     float score;        //成绩  };       void input(int , struct student *); void output(int , struct student *);   int main(void) {     int len;     struct student * only;     printf ("请输入学生个数：");     scanf ("%d", &len);           only = (struct student *)malloc(len * sizeof(struct student));           input(len,only);     output(len,only);     return 0; }   void input(int carry, struct student * bbq)                    //输入函数  {     printf("请输入学生个人信息：\n");     int i;     for (i=0; i< carry; ++i)     {         printf("学生姓名：");         scanf("%s", bbq[i].name);         printf("学生年龄：");         scanf("%d", &bbq[i].age);         printf("学生成绩：");         scanf("%f", &bbq[i].score);     } }   void output(int zeff, struct student * bbc)                    //输出函数  {     int i;      for (i=0; i<zeff; ++i)     {         //printf("系统已根据数据排列出学生情况,优秀在上\n");          printf("学生姓名：%s\n", bbc[i].name);         printf("学生年龄: %d\n", bbc[i].age);           //  printf("学生年龄: %d", *bbc[i].age);             printf("学生成绩：%f\n", bbc[i].score);     }       }

user: user-3
content: int * only;  改成：  struct student * only;   printf("学生姓名：%s\n", &bbc[i]->name);  改成：  printf("学生姓名：%s\n", bbc[i]->name);   printf("学生成绩：%d\n", bbc[i]->score);  改成  printf("学生成绩：%f\n", bbc[i]->score);

user: user-4
content: void input(int  carry, struct student * bbq)                    //输入函数  {     printf("请输入学生个人信息：\n");     int i;     for (i=0; i<carry; ++i)     {         printf("学生姓名：");         scanf("%s", bbq[i]->name);         printf("学生姓名：");         scanf("%s", bbq[i]->name);         printf("学生年龄：");         scanf("%d", &bbq[i]->age);         printf("学生成绩：");         scanf("%d", &bbq[i]->score);     } }  output input(len,only); output(len,only);  按照这样子改

user: user-0
content: 大神可以具体一点吗，我是初学者，不懂啊

user: user-5
content: 把参数的指针都去掉一层
user-0 提问: 路径中包含空格，什么情况下不需要用双引号括起来？

回复:
user: user-1
content: 引用 2 楼 jianwen0529 的回复:环境问题啊 你system其实执行的是cmd命令吧 那你在控制台窗口输入有空格的必须用引号包含起来 但是c++中有需要一个字符串参数，所以再包一层引号最后多一个反斜杠吧  system("\"C:\\Users\\Public\\Music\\Sample Music\\1.mp3\"");  也就是cmd执行的是"C:\\Users\\Public\\Music\\Sample Music\\1.mp3\" 外层引号是函数参数指定字符串的需要这一句字符串，如果没有空格那完全就不需要了对吧

user: user-0
content: 在不需要的情况下多输入了也是不行的，可能在某些场合是可以的，但是不是通用的。

user: user-2
content: 凡是不需要用半角双引号括住的地方，你多括了，也不会有问题。我觉得。

user: user-3
content: adlay 所说的其实只是常见的规律，但实际上并不完全是这样。支持多个参数的命令行参数字符串，大多都是需要引号的。只传一个路径进去而不是需要参数的那种也不见得就一定不需要引号。某些特例还是需要自己去查阅资料的。

user: user-4
content: 环境问题啊 你system其实执行的是cmd命令吧 那你在控制台窗口输入有空格的必须用引号包含起来 但是c++中有需要一个字符串参数，所以再包一层引号  system("\"C:\\Users\\Public\\Music\\Sample Music\\1.mp3\"");  也就是cmd执行的是"C:\\Users\\Public\\Music\\Sample Music\\1.mp3\"这一句字符串，如果没有空格那完全就不需要了对吧 外层引号是函数参数指定字符串的需要

user: user-5
content: 只接受单个文件路径的无需引号, 如果是 程序+参数 的形式就需要, 因为程序和参数以及参数之间都是用空格来分割的, 路径中有空格就歧义了
user-0 提问: 求大神帮忙写一道c语言的题

回复:
user: user-1
content: 引用 4 楼 Linglong_svip的回复:有谁能写出代码来，非常感谢，跪求 自己尝试去写下。。别人帮你写你永远都学不会。。

user: user-0
content: 有谁能写出代码来，非常感谢，跪求

user: user-2
content: 编程是解决问题的，不是用什么结构的。 选择什么算法和方式都是为了解决问题。  你这问题选择struct来存储自然是可以的

user: user-0
content: 是这个思想，但是代码不会写啊

user: user-1
content: 结构里面定义四个成绩和一个平均分，然后主函数里面分配大小为5的结构数组。
user-0 提问: 帮忙看看哪错了，加一本书会多一个空的结构体。。。。

回复:
user: user-1
content: 可能是initb里的while多循环了一次。 对于feof()这个函数, 它是先读再判断是否到文件尾, 也就是说在它之前一定要读一次才能做出判断     `while(!feof(P))//这是对的 {     printf("%s",s);//打印出每行数据     fgets(s,sizeof(s),P);//读取下一行 }`     `while(!feof(P))//这是错的 {     fgets(s,sizeof(s),P);//读取下一行     printf("%s",s);//打印出每行数据 }`     */

user: user-2
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: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 函数作用域

回复:
user: user-1
content: C++标准草案n4296  3.3.5 Function scope [basic.funscope] 1 Labels (6.1) have function scope and may be used anywhere in the function in which they are declared. Only labels have function scope.

user: user-2
content: 这翻译的太恶心了

user: user-3
content: 你看的是哪个翻译的，我也在看这本书是云颠工作室翻译的，怎么没有读到你这页，在第几章

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

user: user-5
content: 神翻译

user: user-6
content: 引用 2 楼 BInzzz 的回复:[quote=引用 1 楼 hijack00 的回复:] `函数作用域（function scope）仅用于goto 语句的标签`这句话说不通啊，能把原话贴出来吗   就是这句，没搞懂。谢谢啦！！  [/quote]  我以为你看的是英文的，本来是期望你把英文上下文贴出来的的。这句话翻译的读起来都拗口。上面提到的关于goto标签与函数作用域的问题我到现在都没遇到过，其实你不必过分纠结这句话。

user: user-7
content: 上下文相关，函数作用域应该是特指某类情况下。这句话写得如此晦涩还不如扔了 看后面的解释 就是说不管goto的标签声明在函数的哪里，在函数的任何地方都可以goto  例如下列函数 void func { //代码 //代码  goto Label;  //代码  Label:  int i = 10; }

user: user-0
content: 引用 1 楼 hijack00 的回复:`函数作用域（function scope）仅用于goto 语句的标签`这句话说不通啊，能把原话贴出来吗   就是这句，没搞懂。谢谢啦！！

user: user-6
content: `函数作用域（function scope）仅用于goto 语句的标签`这句话说不通啊，能把原话贴出来吗
user-0 提问: 关于特殊字符串的读取。

回复:
user: user-1
content: 去看看这几个函数open read close

user: user-2
content: 尝试创建一个二维指针数组，然后用指针指向你想要读取的位置。

user: user-2
content: 引用 3 楼 qq_37171619 的回复:[quote=引用 1 楼 user-2 的回复:] 尝试创建一个二维指针数组，然后用指针指向你想要读取的位置。 能说的详细点吗？[/quote] 比如说你有一串{{askdjaf}{aslfkckvm}{fvrhvdu}}这样的三行字符数组，你在开始的时候就应该设置一个2重循环来读写他的行和列，然后将你输入的值依次放在数组里面，然后通过行和列来查找你要读取的字符，然后从这里开始依次往下读取。

user: user-0
content: 引用 1 楼 user-2 的回复:尝试创建一个二维指针数组，然后用指针指向你想要读取的位置。 能说的详细点吗？
user-0 提问: 关于文件的读写，急。

回复:
user: user-1
content: 二进制写入，一个int就是四个字节的内存存入文件中。直接打开文本查看的时候，一般是两个字节一个汉字显示，所以出现乱码很正常。

user: user-0
content: 再说一句，我读写的文件的时候，也读不出来。 void function2() {   void read();  read();     int i;  char n[10];     system("cls");  printf("请输入自己的学号\n");     scanf("%s", n);  for (i=0; i<len; i++)  {   if (strcmp(n, student[i].id) == 0)   {    printf("math：%d chinese:%d english:%d computer:%d\n", student[i].math, student[i].chinese,      student[i].english, student[i].computer);   }  } ｝

user: user-0
content: 我感觉给你的一样啊，就是不能打印出来。  引用 6 楼 Potato_Lyy 的回复:楼主的代码是对的，打开文件查看是乱码是因为fwrite函数本身就是以二进制数据进行存储，想要查看所存储的数据可以使用fread函数。 我想问，为什读了文件后打印不出来？

user: user-2
content: 楼主的代码是对的，打开文件查看是乱码是因为fwrite函数本身就是以二进制数据进行存储，想要查看所存储的数据可以使用fread函数。

user: user-3
content: #include <stdio.h>  #define N 1  struct info {  char id[10];  char name[10];  int banji;  char zhuanye[10];  int math;  int chinese;  int english;  int computer;  float ave; }student[N] = {"1", "li", 1, "hehe", 100, 100 ,100, 100, 100};  void write() {         FILE *fp = fopen("data.txt", "wb");         int i,len;         if(fp == NULL)         {                 printf("error\n");                 exit(-1);         }         for (i=0; i<N; i++)         {                 len = fwrite(&student[i], sizeof(struct info), 1, fp);         }         printf("save ok! len = %d\n",len);         fclose(fp); }  void read() {         FILE *fp;          int i;         if ((fp = fopen("data.txt", "rb"))==NULL)         {                 printf("error");                 exit(-1);         }         for (i=0; i<N; i++)         {                 fread(&student[i], sizeof(struct info), 1, fp);         }          printf("name = %s banji = %d zhunaye = %s nath = %d chinese = %d english = %d conputer = %d ave = %lf\n", student[0].name, student[0].banji, student[0].zhuanye,student[0].math, student[0].chinese, student[0].english, student[0].computer, student[0].ave);         fclose(fp); }    int main() {         write();         read();          return 0; }    我的这个是可以读写的，你的应该是哪里大意了 可以把对应数组的下标和值打印出来看看是不是你想要的值，查看文件是可以看的，并不是乱码的

user: user-0
content: 可是我为什读文件后，打印不出来各科的成绩。

user: user-4
content: 你把数组放大一点吧一个汉字2字节也就是8位，你最多就存一个字，而且你后面如果输入数据过大的话，也不应该用int要用long long int
user-0 提问: 这个程序哪里有问题，求指教！！！！！！！！！！！！！

回复:
user: user-1
content: 上面忘记加括号了QAQ

user: user-1
content: int list(struct node **h) { *h=(struct node*)malloc(sizeof(struct node)); *h->date=9; *h->next=null; } list(&p);

user: user-2
content: #include<stdio.h> #include<stdlib.h>  struct node { 	int data; 	struct node *next; };  void list(struct node *h) { 	h->data = 9; 	h->next = NULL; 	return; }  int main() { 	struct node n, *p = &n; 	list(p); 	printf("%d", p->data); 	return 0; }

user: user-2
content: #include<stdio.h> #include<stdlib.h>  #define null 0  struct node { 	int data; 	struct node *next; };  int list(struct node *h) { 	h->data = 9; 	h->next = null; 	return 0; }  int main() { 	struct node n, *p = &n; 	list(p); 	printf("%d", p->data); 	return 0; }

user: user-3
content: 你的那个 p 并不是指向分配的内存的首地址。  #include<stdio.h> #include<stdlib.h> #define null 0 struct node { int date; struct node *next; }; struct node * list(void) { struct node *h; h=(struct node*)malloc(sizeof(struct node)); h->date=9; h->next=null; return h; } int main() { struct node *p; p=list(); printf("%d",p->date); }

user: user-4
content: 引用 2 楼 q3733353520 的回复:把p传进去以后，h本身是和p是指向同一个地址。 但是执行malloc以后h的地址改变了，所以到最后,p还是指向之前的地址，而h才是指向的结构体的首地址。 #include <stdio.h> #include <stdlib.h> #define null 0  struct node  { 	int date; 	struct node* next; };  void list (struct node* h) { 	h->date = 9; 	h->next = NULL;  }  int main () { 	struct node* p; 	list(&p); 	printf ("%d",&p->date); 	 	free(p); 	return 0; }  参考此代码，可以正常实现list的函数功能，本人感觉define null 0是没必要的，NULL似乎也就是0 的意思。

user: user-5
content: 把p传进去以后，h本身是和p是指向同一个地址。 但是执行malloc以后h的地址改变了，所以到最后,p还是指向之前的地址，而h才是指向的结构体的首地址。
user-0 提问: 怎么用c语言编写一个检测统计电脑上的软件使用频率的程序

回复:
user: user-1
content: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\* 不一定对，仅供参考。

user: user-2
content: 引用 1 楼 zhao4zhong1 的回复:Windows的注册表里面本来就有电脑上软件使用频率信息。 请教赵老师，这些注册表信息应该在哪里获取

user: user-1
content: Windows的注册表里面本来就有电脑上软件使用频率信息。
user-0 提问: 这个n为什么不计数呢？假设n=0

回复:
user: user-1
content: 没有上下文，谁知道你n是哪儿来的，还有不复制肯定就是没运行那语句

user: user-2
content: 你不是直接把 j 的值赋值给 n 了吗？为什么计数？
user-0 提问: 请问c++里面全局变量是不是默认为静态的？

回复:
user: user-1
content: 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式， 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序， 当一个源程序由多个源文件组成时，非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域， 即只在定义该变量的源文件内有效， 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内，只能为该源文件内的函数公用，因此可以避免在其它源文件中引起错误。

user: user-2
content: 我认为C语言的存储类很好的说明了这一点：  静态是指存储时期，就是何时加载，全局变量在C语言学习中指的是外部链接的静态，外部链接，顾名思义就是可供其他文件调用， 但是需要做引用声明。而上面所说的静态应该就是我们C语言中所说的具有内部链接的静态，意思就是只可在本文件中使用，易语言中叫程序集变量。  以上是C语言知识，没有学过C++，仅供参考。

user: user-3
content: 说一下比较明显的区别，静态在程序被加载到内存中就创建了，而全局变量需要在调用了构造函数之后才会进行创建。希望能理解。

user: user-3
content: 两者是不同的。

user: user-4
content: 默认是external 参考http://stackoverflow.com/questions/4239834/global-variable-in-c-are-static-or-not

user: user-5
content: 全局和静态可没有任何关系哟

user: user-6
content: 不是  全局静态变量要加上static，只在本文件中使用

user: user-7
content: 全局是全局，静态是静态
user-0 提问: 这个程序到底那里出错了

回复:
user: user-1
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-2
content: 你这个程序是不是没打完？？ 好多变量名，函数名都没定义。 还有，注意下格式，我都看到你有些括号都漏掉了

user: user-3
content: 使用VS打开源文件，看智能提示。 修改完之后，编译，看错误信息。

user: user-4
content: 先自己用断点调试一下吧，不过我估计你是不是下面没有创建无名数组就在开始写函数啦？
user-0 提问: C语言简单输入格式

回复:
user: user-0
content: 好吧，虽说还是没懂，谢了

user: user-1
content: 撸码的人不教学，教学的人不撸码。

user: user-2
content: scanf(“%c%c”,&c1,&c2); printf(“%c%c”,c1,c2);

user: user-2
content: 我在VS下试过，虽然能正确读入，但是最终导致程序崩溃 出题人脑子有坑

user: user-2
content: 引用 2 楼 qq_36790578 的回复:%4c怎么整的 %d，%s知道，这%4c怎么回事，用处在哪，输入一个字符不就完了， 意思一样啊，取四个字符作为一个输入 不过这样子读入char字符，难保发生什么不可预料的后果

user: user-0
content: %4c怎么整的 %d，%s知道，这%4c怎么回事，用处在哪，输入一个字符不就完了，
user-0 提问: C语言理论题（初学）

回复:
user: user-1
content: 这个题目确实不够严谨。  它的意思是int的长度是16位的，而long的长度是32位的。  y = ( x = 32767, x - 1 );  逗号表达式从左到右计算，x赋值为32767，然后x-1的值作为逗号表达式的结果并赋给y。  z = m = 0xFFFF  0xFFFF是16进制的表达方法，因此m的值就是65535。  而z是16位整型，其取值范围是[-32768,32767]，因此65535实际上就是-1，因为65535的原码与-1的补码相同。

user: user-0
content: 这个题目根本就不对。它其实考你int类型的长度，是否存在上下溢，但是这个和你的机器的字长毫无关系，这个是编译器决定的。出题的人显然基础知识不过关。 第一个问题可以得到32766，因为逗号表达式从左往右求值，结果是最后一个表达式。所以x先等于32767，此时x-1=32766，作为表达式的值传给y，所以y也是32766。 这是问答上的人回我的 16微机这个不是指机器字长吗， 0xffff这种格式什么意思，还是不懂

user: user-2
content: 16位上int型就是16位的,所以0xffff就是-1, 而long是32位的，0xffff是正数

user: user-0
content: 还有就是这个地方问答怎么我提交了问题，显示别人回答了，我再去点就点不开了，感觉被删除了，

user: user-0
content: 这个16微机了这些数据类型会有什么变化

user: user-2
content: 题目有问题，没说是有符号整型
user-0 提问: Windows Socket实现通信聊天 ,WSAGetLastError报错10061.求助!

回复:
user: user-1
content: 对端没有accept就直接closesocket了。

user: user-0
content: 是阻塞的问题吗?

user: user-1
content: 10061 由于目标机器积极拒绝，无法连接。
user-0 提问: 请帮忙看看这个代码哪里有问题，非常简单的利用asc码比较两个字符但是好多人说不出所以然

回复:
user: user-0
content: 终于明白了，因为空格也是字符，也有asc值

user: user-1
content: 两个%c之间加空格，那么你输入的两个字符之间也要加空格
user-0 提问: 用链表 注册登录，存到文件。。。。。

回复:
user: user-1
content: 连接链表部分不对，弄个cur指针记录最后一个结点的地址，然后cur->next = t;连接上新malloc的结点（尾插法）  people* initp() { 	people *head, *cur; 	head = (people*)malloc(sizeof(people)); 	head->next = NULL; 	cur = head; 	FILE *fp; 	fp = fopen("people.dat", "r"); 	while (!feof(fp)) 	{  		people *t; 		t = (people*)malloc(sizeof(people)); 		fread(t, sizeof(people), 1, fp); 		puts(t->name); 		if (feof(fp)) 			break;  		cur->next = t; 		cur = t;  	} 	t->next = NULL; 	fclose(fp);  	return head; }

user: user-2
content: t->next= NULL; // head->next; 这里有点问题 head->next=t;
user-0 提问: UVa1368 DNA序列 学过C语言的帮我看一下问题在哪里，怎么改好吗？

回复:
user: user-0
content: 引用 3楼赵4老师 的回复:%c和%C不是一回事！改回来了…%C没有影响（虽然语法上是不对，不过可能我用的是cpp，c++有出入吧）…是语意错误

user: user-1
content: %c和%C不是一回事！

user: user-0

user: user-0
content: //Ps：自己测试过的中间数据，输入计算好像没有问题，可能在输出这一块，试过好多种方法了
user-0 提问: [Error] variable-sized object `a请问这个怎么解决，学C新手

回复:
user: user-1
content: 直接使用malloc不是也可以吗，何必一定要写成a[b]的数组形式。 http://beyond316.blog.51cto.com/7367775/1229644/

user: user-2
content: 一定要在windows上的话，可用Cygwin

user: user-0
content: Windows编译器完美支持gcc的推荐下

user: user-2
content: 若你是vc，这实现不了！若是gcc，把初始化的那个(也就是 = {2})去掉即可

user: user-2
content: 当然，gcc的话允许动态长度的数组，但是不能像a[n] = {0} 这样初始化

user: user-2
content: 变量不能赋值给常量的，数组的长度也必须是静态的
user-0 提问: vs2012写入位置0xCCCCCCCC 时发生访问冲突.

回复:
user: user-1
content: 你对输入的理解不太对啊，参数列表都没有对应上，你对照着改一下  printf ("需要添加一个学生信息吗(y/n)\n"); scanf ("%c",&Temp);  if (Temp == 'y' || Temp == 'Y') { 	printf ("准备接受学生信息...\n");  	printf ("请输入学生姓名\n"); 	scanf ("%s",Student1.name); 	printf ("请输入学生学号\n"); 	scanf ("%ld",&(Student1.Student_ID)); 	printf ("请输入学生性别\n"); 	scanf ("%s",Student1.sex); 	printf ("请输入学生年龄\n"); 	scanf ("%d",&(Student1.age)); 	printf ("请输入学生班级\n"); 	scanf ("%s",Student1.squad)  如果变量是一个数组，数组名就代表了首地址没所以不用加地址符&，其他的类型读取数据的变量前都要加&

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-0
content: 该过之后还是一样 的错误，估计错误不在于输入Temp的时候

user: user-3
content: scanf ("%s",&Temp); 改成 scanf ("%c",&Temp);
user-0 提问: user.txt中存放了120万余条用户编号(user_id)、密码(password)的记录。

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <time.h> unsigned long ulrand(void) {     return (      (((unsigned long)rand()<<24)&0xFF000000ul)     |(((unsigned long)rand()<<12)&0x00FFF000ul)     |(((unsigned long)rand()    )&0x00000FFFul)); } unsigned __int64 ullrand(void) {     return (      (((unsigned __int64)ulrand())<<32)     | ((unsigned __int64)ulrand())); } int i; unsigned long ul; unsigned __int64 ull; void main() {     srand(time(NULL));     for (i=0;i<10;i++) {         ul=ulrand();         printf("%010lu 0x%08x\n",ul,ul);     }     for (i=0;i<10;i++) {         ull=ullrand();         printf("%020I64u 0x%016I64x\n",ull,ull);     } } //3971076432 0xecb1d150 //2433428051 0x910b2a53 //1415415336 0x545d8628 //1312330759 0x4e389407 //1845758378 0x6e0409aa //0008069933 0x007b232d //4202720757 0xfa806df5 //2669855255 0x9f22c217 //0312068736 0x1299ca80 //2084555989 0x7c3fccd5 //03502077880857307931 0x3099e1472040ab1b //16884702393146816355 0xea52835e19b43763 //01877364819396611730 0x1a0dbd5b45f34e92 //07839440151924835771 0x6ccb4948756a05bb //09471412086917299176 0x8371371c820bfbe8 //04411255971577469925 0x3d37edef2f321be5 //13735846279546091130 0xbe9f876a65b7367a //04512980766520059820 0x3ea15418aa9927ac //15821377118299441610 0xdb90d2a9f1bb49ca //15512417228822200185 0xd7472d480398bf79

user: user-2
content: 引用 楼主 nikew 的回复:读取user.txt，使用链表存放，使用顺序查找，随机生成2000个user_id（1～1,230,000之内的），再随机生成20个user_id（大于1,230,000的），输出查找所花总时间。  讲的不是很清楚。user.txt里面存储的是user_id？随机生成的user_id作为查找的关键字？
user-0 提问: 学完了C语言的全部语法，下一步应该看什么书？

回复:
user: user-1
content: 《深入理解C指针》 《C语言点滴》 《C语言课程设计案例精编》 C语言程序开发范例宝典 C语言经典编程282例

user: user-2
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）

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

user: user-3
content: 先看别人的代码吧，既然基础语法都学会了，就没必要在花时间去看前4本的书，那些都是将基础语法写的很完整的书，但是后面的书只会基础语法也是根本看不懂的，所以不要认为书看得多就好。代码才是。

user: user-4
content: 多做东西才行，不做东西，看再多书都不行

user: user-5
content: 要动手敲代码，做项目
user-0 提问: C语言想问问指针的一个小问题

回复:
user: user-0
content: O(∩_∩)O谢谢帮忙，万分感谢！

user: user-1
content: 有区别的 p = &i;    //将i的地址赋值于p *p = i;    //将i的值赋值于p指向的地址
user-0 提问: 关于随机数

回复:
user: user-1
content: 随机必然有重复，所谓“不重复的随机”实际上是洗牌。洗牌算法参考下面： #include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b,t; int c,j; void main() {     srand(time(NULL));     printf("shuffle 0..n-1 demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=0;i<n;i++) d[i]=i;/* 填写0～n-1 */             for (i=n;i>0;i--) {/* 打乱0～n-1 */                 a=i-1;b=rand()%i;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=0;i<n;i++) printf("%d",d[i]);             printf("\n");         }     }     printf("shuffle 1..n demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */             for (i=n;i>1;i--) {/* 打乱1～n */                 a=i;b=rand()%i+1;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=1;i<=n;i++) printf("%d",d[i]);             printf("\n");         }     } }

user: user-2
content: 可以这样 省去循环查找的事情，用一个int [33]的数组，初始化全0，每生成一个对应的数，先判断该index下的数是否为0，是说明还没有这个数字，将其置1，同时存入这个数

user: user-3
content: 呵呵，你也可以将随机数最后一个字节清零，再加上数组33的 索引值嘛

user: user-0
content: #include<stdio.h> #include<time.h> #include<stdlib.h>   int main() { 	int s[33]={0}; 	int i,a,j,b,k,c,d; 	i=0,j=0,d=0; 	srand((unsigned)time(NULL)); 	while(j!=33) 	{ 		a=rand()%31; 		for(j=0;j<=i;j++) 		{ 			 			if((a!=s[j])&&(j==i)) 			{ 				s[i]=a; 			} 		} 		while(d!=3333) 		{ 			c=rand()%31; 			for(k=0;k<=i;k++) 			{ 				if(c==s[k]) 				{ 					d=9999; 					break; 				}else{ 					if(k==i) 					{ 						s[i]=c; 						d=3333; 					} 				} 			} 		} 		i++; 	} 	for(i=0;i<=32;i++) 	{ 		printf("%d\n",s[i]); 	} }

user: user-4
content: 引用 4 楼 qq423399099 的回复:http://www.jb51.net/article/66365.htm 这个不错。 总结一下思路，就是数找个数组放好，然后随机取出来，取一个，数组少一个。 数组为空时也就计算结束了。 当然，这种问题即使使用Sinox操作系统也得自己慢慢探索。

user: user-5
content: http://www.jb51.net/article/66365.htm

user: user-6
content: [1,32] 都扔到数组里，然后 shuffle 一下数组，然后按顺序读就行了。
user-0 提问: 关于printf和char的问题

回复:
user: user-1
content: 引用 1 楼 heyuhang112 的回复:因为你是个循环，，循环读入，然后输出每一个字符，当然你看到的就是一个字符串 scanf是要你按了回车后才开始一个一个的读的

user: user-1
content: 因为你是个循环，，循环读入，然后输出每一个字符，当然你看到的就是一个字符串

user: user-1
content: 引用 3 楼 FelixKYD 的回复:[quote=引用 2 楼 heyuhang112 的回复:] [quote=引用 1 楼 heyuhang112 的回复:] 因为你是个循环，，循环读入，然后输出每一个字符，当然你看到的就是一个字符串 scanf是要你按了回车后才开始一个一个的读的[/quote]  就是说，我输入字符串的时候，这些字符串都存在缓存里了，我按回车后，scanf从缓存中每次只读一个字符，赋值给i，然后马上打印，指导发现字符串中有“1”才停下，对吧？ [/quote] 对，就是这样！

user: user-2
content: 单步一下就清楚了。 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 你的变量 i 会依次接收到 'a' ，输出'a'， 接收到's'， 输出's'............  最后i 中存的只是最后那个字符，但中间会依次接收到各个字符，并输出这个字符

user: user-0
content: 引用 2 楼 heyuhang112 的回复:[quote=引用 1 楼 heyuhang112 的回复:] 因为你是个循环，，循环读入，然后输出每一个字符，当然你看到的就是一个字符串 scanf是要你按了回车后才开始一个一个的读的[/quote]  就是说，我输入字符串的时候，这些字符串都存在缓存里了，我按回车后，scanf从缓存中每次只读一个字符，赋值给i，然后马上打印，指导发现字符串中有“1”才停下，对吧？
user-0 提问: 关于fread用指针读入结构体文件问题

回复:
user: user-0
content: 引用 1 楼 user-1的回复:pLogin=(struct People*)malloc(sizeof(struct People)); 这只申请了存一个结构体的空间 试试 pLogin = (struct People *)malloc(sizeof(struct People) * 2); 刚才试了，确实可以了，在学链表的时候不够深入，谢谢了

user: user-1
content: pLogin=(struct People*)malloc(sizeof(struct People)); 这只申请了存一个结构体的空间 试试 pLogin = (struct People *)malloc(sizeof(struct People) * 2);
user-0 提问: 大神请看过来！使用Visual C++6.0运行程序时出现程序停止工作的提示，哪位大神知道咋回事？

回复:
user: user-0
content: 我刚刚也发现了，很尬尴谢谢啦！

user: user-1
content: if(strcmp(string,str[2]<0)) 右括号位置错了
user-0 提问: 怎么复制文件内容的同时输出进度百分比? 新手求助

回复:
user: user-1
content: int file_size(char* filename)   {       FILE *fp=fopen(filename,"r");       if(!fp) return -1;       fseek(fp,0L,SEEK_END);       int size=ftell(fp);       fclose(fp);              return size;   }    上述方法利用fseek移动一个文件的存取位置到文件的末尾，然后利用ftell获得目前的文件访问位置。

user: user-2
content: 这个简单，首先你可以用fseek和ftell得到文件的大小，之后按照你写的程序一个字节一个字节地复制，那么你可以定义一个变量用于计算你复制到第几个字节了，有大小和现在复制地字节数，显式个百分比就很容易了。
user-0 提问: 下面的代码有什么错啊？小吧求助

回复:
user: user-1
content: 注意=和==优先级

user: user-2
content: LZ是不是想输入两文件名~然后一个字节一个字节copy并显示到另一个文件？  in=fopen(infile, "r"); 	if (in == NULL) 	{ 		printf("can not open the file!\n"); 		exit(0); 	} 	out=fopen(outfile, "w"); 	if (out== NULL) 	{ 		printf("can not open the file!\n"); 		exit(0); 	}

user: user-3
content: if(in=fopen(infile,"r")==NULL)  改成：  if((in=fopen(infile,"r"))==NULL)  同理把这句也改了：  if(out=fopen(outfile,"w")==NULL)
user-0 提问: 习语言数据库程序欣赏

回复:
user: user-1
content: 英译汉

user: user-2
content: 引用 8 楼 paschen 的回复:C语言的代码更有欣赏价值...  用英文写起来更简洁  if 和 如果， 我就觉得if看着舒服，打字也快...  整数类型 主函数()  和  int main() 肯定后面的有欣赏性吧

user: user-3
content: 你这真算不上代码,  这3型文法就能处理的一点点小玩意, 用脚本写也就200行的事情,  值得你到处吹么,  无聊死了..

user: user-4
content: 习惯问题，看书看文档习惯中文，看程序习惯英文，为什么不能反过来呢？

user: user-5
content: 字太密集看起来会累。

user: user-6
content: 辣眼睛！

user: user-7
content: 引用 12 楼 paschen 的回复:[quote=引用 8 楼 paschen 的回复:] C语言的代码更有欣赏价值...  用英文写起来更简洁  if 和 如果， 我就觉得if看着舒服，打字也快...  整数类型 主函数()  和  int main() 肯定后面的有欣赏性吧[/quote]  都还好啊！ 程序主要的目的不是为了欣赏。

user: user-0
content: 引用 2 楼 mLee79 的回复:看着头就晕,  这样发广告也没事.你意志力不好，看了一点代码就头晕，编程和你无缘，早日改行吧.

user: user-0
content: 引用 8 楼 paschen 的回复:C语言的代码更有欣赏价值... 是哪里做的不好没了欣赏价值？

user: user-8
content: 看着头就晕,  这样发广告也没事.

user: user-7
content: 楼上这么多头晕的，看来熬夜多，睡眠少，体质下降的太厉害啦！怪不得说IT是高危行业，都不珍惜自己身体怎么行？

user: user-9
content: 看着头就晕,  这样发广告也没事.

user: user-10
content: 看着头就晕,  这样发广告也没事.

user: user-11
content: 看着头就晕,  这样发广告也没事.

user: user-2
content: C语言的代码更有欣赏价值...

user: user-3
content: 看着头就晕,  这样发广告也没事.
user-0 提问: 关于printf的转换说明修饰符lf和Lf有没有区别？

回复:
user: user-1
content: 提醒：printf是开源的，参考其源代码C:\Program Files\Microsoft Visual Studio 1x.0\VC\crt\src\output.c

user: user-2
content: %lf和%f是相同的，对应double，Lf对应long double double和long double是不同的类型，但有时候存储方式是一样的。

user: user-3
content: %Lf 是对应long double  %lf是double  输出的时候你可能感觉不到不同，但输入(scanf)的时候就有明显区别

user: user-4
content: 有区别。  ===============  但是 double 和 long double 有时候在内部表示上没有区别。
user-0 提问: 在Ubuntu x64系统下怎么编译出源程序的arm平台版本？

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:修改Makefile中的CC变量，或者敲make是指定其值 make CC=arm-linux-gnueabi-gcc 吗？

user: user-0
content: 引用 2 楼 mLee79 的回复:./configure --host=arm-linux-gnueabi 我执行该命令时，报错：error: invalid option "--host=arm-linux-gnueabi"

user: user-1
content: ./configure --host=arm-linux-gnueabi

user: user-2
content: 修改Makefile中的CC变量，或者敲make是指定其值
user-0 提问: 这个程序哪里有问题吗？

回复:
user: user-1
content: for循环那里有问题

user: user-2
content: scanf("%d%s%c%s%d",&w[i].num,w[i].name,&w[i].sex,w[i].part,&w[i].phone);这样不行的 改成scanf("%d%s%*c%c%s%d", &w[i].num, w[i].name, &w[i].sex, w[i].part, &w[i].phone); 输入的时候分成五行来输入，比如： 1 zhang w houqin 9877 2 wang w jingli 9877  #include<string.h> #include<stdio.h> struct worker { 	int num; 	char name[10]; 	char sex; 	char part[10]; 	int phone; }; void main() { 	void change(struct worker s[]); 	struct worker w[5]; 	int i; 	printf("请输入五个职工的职工号码、姓名、性别、部门、电话：\n"); 	for (i = 0; i<5; i++) 	{ 		scanf("%d%s%*c%c%s%d", &w[i].num, w[i].name, &w[i].sex, w[i].part, &w[i].phone); 	} 	change(w); } void change(struct worker s[]) { 	int i; 	char b[10] = { "houqin" }; 	for (i = 0; i<5; i++) 	{ 		if (strcmp(s[i].part, b) == 0) 		{ 			s[i].phone = 9800; 			printf("职工号码：%d姓名：%s性别：%c部门：%s电话：%d\n", s[i].num, s[i].name, s[i].sex, s[i].part, s[i].phone); 		} 	} }

user: user-3
content: 一般出现什么烫这种字，多半是取字符的时候，所在的内存为空，一直向后读取字符串直到遇到/0，就会一直读出烫字。  改成scanf("%d %s %c %s %d",&w[i].num,w[i].name,&w[i].sex,w[i].part,&w[i].phone);//加一空格 添加的时候 一行写5个 每个之间必须空一格
user-0 提问: 结构体赋值问题

回复:
user: user-1
content: 用vs2010没有问题。

user: user-2
content: 如果变量i和j是有效的，那可能是你编译器的问题，换下一个比较新的编译器，或者使用memcpy来进行复制

user: user-3
content: 我这里VS2013可以的，楼主编译器可能真的比较老吧。 考虑用memcpy?

user: user-4
content: 提示说是实体问题的话，可能是你的 i 和 j 哪里有问题，把 i 和 j 就改成常数试试

user: user-5
content: 这种用法是可以的。。应该是你的编译太老了。。
user-0 提问: C语言字符串结尾可以用\n判断吗

回复:
user: user-1
content: 引用 14 楼 qq_41555428 的回复:可以的，不接受反驳，直接上代码 #include <stdio.h> int fac(char ch) {     int sum=0;     ch=getchar();     while(ch!='\n')     {         sum++;         ch=getchar();     }     return sum; } int main() {     char ch;     printf("%d",fac(ch));     return 0; }我这个是计算字符串长度的

user: user-1
content: 可以的，不接受反驳，直接上代码 #include <stdio.h> int fac(char ch) {     int sum=0;     ch=getchar();     while(ch!='\n')     {         sum++;         ch=getchar();     }     return sum; } int main() {     char ch;     printf("%d",fac(ch));     return 0; }

user: user-2
content: 这样是不可以的

user: user-3
content: 应该是不可以的，因为系统自动识别‘\0’作为字符串结束标志的，除了‘\0’,无其他结束标志了

user: user-4
content: 一般不这样用，除非你的字符串比较特殊

user: user-5
content: 引用 8 楼 shihengzhen101 的回复:字符串的结尾只能'是'\0','\n'是回车不能用来判断结束，一个字符串中可以有若干个回车 说错了，\n是换行

user: user-5
content: 字符串的结尾只能'是'\0','\n'是回车不能用来判断结束，一个字符串中可以有若干个回车

user: user-6
content: 不可以，后面要加\0

user: user-7
content: 你可以用任何一种分隔符作自己的业务处理。\0只是大多数字符串处理函数所认可的结束符。

user: user-8
content: 不可以

user: user-9
content: 不可以呀，/n是换行

user: user-10
content: 引用 3 楼 CharlesSimonyi 的回复:当然可以，但是\n后面还是要有一个\0 而且\n你得自行添加 另外如果你的字符串需要换行\n怎么办 这不是自找麻烦。。

user: user-11
content: 当然可以，但是\n后面还是要有一个\0 而且\n你得自行添加 另外如果你的字符串需要换行\n怎么办

user: user-10
content: 你的字符串中根本就不存在\n这个元素。

user: user-12
content: \n是回车。后面有字符串会显示在第二排
user-0 提问: 像这种编程语言中的二进制数如何转换

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

user: user-2
content: 原码  补码  反码

user: user-3
content: 如果你说的是某带符号整数的8位补码表示为10000001，那么答案是-127 因为是带符号数,所以最左边的1表示负数；然后除最左边一位外,全部取反,末位加1.故为-127

user: user-4
content: 左侧第一个“1” 表示的是数字的符号 0为正数 1为负数  取反后 1*2^6＋1*2^5 1*2^4 1*2^3 1*2^2 1*2^1 1*2^0=127

user: user-5
content: 有符号数一般是用补码表示的 如果没学过的话 建议你可以看看《深入理解计算机系统 》 的第二章 里面对这方面说的很详细
user-0 提问: 谁帮我看下这个程序怎么理解，

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

user: user-0
content: 引用 1 楼 jianwen0529 的回复:while (i++<x){ // 进入时： i++ 返回的是 0，1，2......    if(i%2==0) // 但是此时你的 i 值已经变化了，是从 1 开始，i = 1，2，3......               putchar('-');    else               putchar('+');   }谢谢了，我懂了

user: user-2
content: 1%2==1，1/2==0，哈哈

user: user-3
content: while (i++<x){ // 进入时： i++ 返回的是 0，1，2......    if(i%2==0) // 但是此时你的 i 值已经变化了，是从 1 开始，i = 1，2，3......               putchar('-');    else               putchar('+');   }
user-0 提问: 堆数组指针释放报错

回复:
user: user-0
content: 引用 6 楼 cutmelon 的回复:内存越界啊，假设你这是32位程序，TCHAR **a = (TCHAR**)malloc(sizeof(TCHAR*));这里其实相当于 TCHAR *a[4]; 然后你在RegEnum_Key里申请内存，data[i]这里的i必须超过4吧？ 测试的时候 确实是4个成员

user: user-1
content: 内存越界啊，假设你这是32位程序，TCHAR **a = (TCHAR**)malloc(sizeof(TCHAR*));这里其实相当于 TCHAR *a[4]; 然后你在RegEnum_Key里申请内存，data[i]这里的i必须超过4吧？

user: user-0
content: 引用 4 楼 qq423399099 的回复:二维数组一般这样：  int **a; int i; a = (int **)malloc(sizeof(int *)*5); for (i=0; i<5; i++)     a[i] = (int *)malloc(sizeof(int)*3);  你没看完代码  上面还有 - -  我的意思是 释放堆内存的问题. 我在main函数中初始化**a ,在RegEnum_Key函数中为成员分配的

user: user-2
content: 二维数组一般这样：  int **a; int i; a = (int **)malloc(sizeof(int *)*5); for (i=0; i<5; i++)     a[i] = (int *)malloc(sizeof(int)*3);

user: user-0
content: 引用 1 楼 qq423399099 的回复:你需要为每个指针也分配空间才行，类似这样：  for (ca = 0; ca < 4; ca++) 		a[ca] = (TCHAR*)malloc(sizeof(TCHAR) * 64);  难道在函数中动态分配的堆内存不在其他函数中释放? 不科学啊

user: user-0
content: 引用 1 楼 qq423399099 的回复:你需要为每个指针也分配空间才行，类似这样：  for (ca = 0; ca < 4; ca++) 		a[ca] = (TCHAR*)malloc(sizeof(TCHAR) * 64);  函数内部已经循环分配了

user: user-2
content: 你需要为每个指针也分配空间才行，类似这样：  for (ca = 0; ca < 4; ca++) 		a[ca] = (TCHAR*)malloc(sizeof(TCHAR) * 64);
user-0 提问: 一个位移计算的题目，我很懵，请指教……

回复:
user: user-0
content: 引用 10 楼 GKatHere 的回复:for(...)  //没括进去 { printf(...) sum... }  啊……我果然还是太粗心大意了……非常感谢！

user: user-1
content: for(...)  //没括进去 { printf(...) sum... }

user: user-0
content: 引用 8 楼 sdghchj 的回复:[quote=引用 7 楼 Lamuna 的回复:] [quote=引用 3 楼 sdghchj 的回复:] 1<<0等于没有移动。 你的i是从0开始到15，1就移了15位，哪里移了16位？ 你的代码和输出结果不匹配，再检查检查  这样算的话……哦！也就是说最后其实就是 0000 0000 0000 0001左移了15位，也就是1000 0000 0000 0000…… 我明白了……  不过我还是没明白为什么 printf("sum is 0x%x(%d)",sum,sum); 循环过程中这句打印的都是sum is 0x0(0)？……[/quote] prinf("sum is : 0x%x(%d)\n",sum,sum);  说了printf都没打对。[/quote]  不好意思，这个是我打到帖子中之后才少打这个的，不然gcc早就报错了吧=_,=|||…… 目前程序状况是这样的：

user: user-2
content: 引用 7 楼 Lamuna 的回复:[quote=引用 3 楼 sdghchj 的回复:] 1<<0等于没有移动。 你的i是从0开始到15，1就移了15位，哪里移了16位？ 你的代码和输出结果不匹配，再检查检查  这样算的话……哦！也就是说最后其实就是 0000 0000 0000 0001左移了15位，也就是1000 0000 0000 0000…… 我明白了……  不过我还是没明白为什么 printf("sum is 0x%x(%d)",sum,sum); 循环过程中这句打印的都是sum is 0x0(0)？……[/quote] prinf("sum is : 0x%x(%d)\n",sum,sum);  说了printf都没打对。

user: user-0
content: 引用 3 楼 sdghchj 的回复:1<<0等于没有移动。 你的i是从0开始到15，1就移了15位，哪里移了16位？ 你的代码和输出结果不匹配，再检查检查  这样算的话……哦！也就是说最后其实就是 0000 0000 0000 0001左移了15位，也就是1000 0000 0000 0000…… 我明白了……  不过我还是没明白为什么 printf("sum is 0x%x(%d)",sum,sum); 循环过程中这句打印的都是sum is 0x0(0)？……

user: user-0
content: 引用 1 楼 jianwen0529 的回复:sum = sum + 1U<<i;  相当于 sum = (sum + 1U)<<i;   sum += 1U<<i;  相当于 sum += (1U<<i);   我把代码改为原来的样子：  #include <stdio.h> int main(void){   int i = 0;  unsigned int sum = 0;  for(;i<16;i++){     prinf("sum is : 0x%x(%d)\n",sum,sum);     sum = sum + 1U << i;  } printf("***Final Result***\nsum is 0x%x(%d).",sum,sum);   return 0; }   打印结果没有发生变化……是我哪里写的不对么？  另外，sum = sum +1U << i 的话，不就是sum 先+1然后左移i个位置么？……那么一旦i自增到16，岂不是会全被补0了？ 毕竟只有16个位，不管是0000 0000 0000 0001 还是1111 1111 1111 1111 左移16次正好是0000 0000 0000 0000才对……  是我哪里理解的有问题吧？……

user: user-3
content: 运算符优先级，1L已经说清楚了

user: user-2
content: printf关键字都没打对。

user: user-2
content: 1<<0等于没有移动。 你的i是从0开始到15，1就移了15位，哪里移了16位？ 你的代码和输出结果不匹配，再检查检查

user: user-4
content: 关于你 1U的疑问  U u 后缀表示这是一个 unsigned int 值   L 是loog 数据，f 是float数据 其中还有 ul，ull，ll 等后缀

user: user-4
content: sum = sum + 1U<<i;  相当于 sum = (sum + 1U)<<i;   sum += 1U<<i;  相当于 sum += (1U<<i);
user-0 提问: 二叉排序树的建立和检索运行不了

回复:
user: user-0
content: 感谢，问题解决了

user: user-1
content: CreateSearchTree函数写的不对，需要为dic->element分配空间，同时下标应该从0开始到dic->n  int CreateSearchTree(PBinSearchTree ptree, SeqDictionary *dic) { 	int i; 	*ptree = NULL; 	printf("请输入元素个数:"); 	scanf("%d", &dic->n); 	dic->element = (DicElement *)malloc(sizeof(DicElement)* dic->n); 	printf("请依次输入二叉树元素:\n"); 	for (i = 0; i < dic->n; i++) 	{ 		scanf("%d", &dic->element[i].key); 	} 	for (i = 0; i<dic->n; i++) 	{ 		if (!insert(ptree, dic->element[i].key))return 0; 	} 	return 1; }
user-0 提问: 对于做的程序代码有些问题

回复:
user: user-0
content: 可不可以还用randomize函数？因为这个函数是老师给的。

user: user-1
content: randomize和random改成用srand和rand  #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> int main() { 	char c; 	int a[4], b[4], i, j, k; 	srand((unsigned)time(0)); 	for (i = 0; i<4; i++) 	{ 		a[i] = rand() % 10; 	} 	do 	{ 		for (j = 0; j<4; j++) 		{ 			scanf("%d", b[j]); 			while (i<4); 			{ 				if (i == j&&a[i] == b[j]) 				{ 					i++; 					j++; 					k++; 				} 				else 				{ 					i++; 					j++; 				} 			} 			printf("%d", k); 			scanf("%c", c = getch()); 		} 	} while ((c = getch()) != 27); 	return 0; }

user: user-2
content: 引用 2 楼 qq_37177328 的回复:可不可以还用randomize函数？因为这个函数是老师给的。 如果老师给的函数代码，把函数直接加进来； 如果是lib，把头文件加进来
user-0 提问: 运行程序时出现停止运行

回复:
user: user-1
content: 你这个程序问题很多啊

user: user-2
content: 定义了char *p[6]以后，没有进行初始化赋值，这是很忌讳的。

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-4
content: 崩溃问题主要表现在你没有对指针进行分配内存，改一点代码就可以了  char *p[6];//对其进行分配内存 //如下即可 char *p[6] = { new char[100], new char[100], new char[100], new char[100], new char[100], new char[100] };

user: user-5
content: 楼主可以在for循环输入值的时候加上p[i]=(char*)malloc(sizeof(char));就可以了。其他的for循环问题还有p+n的问题楼上意见指出来了 #include<stdio.h> #include<stdlib.h> int main() { char *p[5]; int i,m,n; char q; for(i=0;i<5;i++) { 	printf("输入\n"); 	p[i]=(char*)malloc(sizeof(char)); scanf("%s\n",*(p+i)); getchar();      } for(m=1;m<5;m++) { for(n=0;n<5-m;n++) if(**(p+n)>**(p+n+1)) { 	printf("1");     q=**(p+n);     **(p+n)=**(p+n+1);     **(p+n+1)=q; 	 } } for(i=0;i<5;i++) printf("%s",*(p+i)); printf("\n"); return 0;  }

user: user-6
content: 你这个程序很多问题。 char *p[6];是指针数组，你这样的写法只是申请了6个指针（但是指针指向的是未知区域，你要分配过空间才能scanf %s写入） 而且你的scanf和printf都是错误的。 写成这样才对： scanf("%s", *(p + i));//或者scanf("%s", p[i])); printf("%s", *(p + i));

user: user-7
content: 你第二个循环里p+i这个i哪里来的，不应该是n？
user-0 提问: 为什么llu或lld输出小值的时候无法得到正确结果？

回复:
user: user-1
content: 因为提供的参数和格式并不匹配。

user: user-2
content: printf("%ld\n",2L); printf("%lu\n",2UL); printf("%lld\n",2LL); printf("%llu\n",2ULL);

user: user-2
content: 因为2、223这些字面量默认是int类型的，4字节。 而格式化lld和llu会用8个字节的数来格式化，以2为例，2本身只占4字节，在小端字节序时，格式化时用到了2所占的4字节以及2后面4字节，该高位4字节是未定义的伪随机数，结果就是一个很大的伪随机数，如果将该大数强制转成int型，会得到2.

user: user-3
content: %llu是C语言格式化字符的一种，用于格式化输入输出函数中，比如printf和scanf。 %llu对应的数据类型为unsigned long long，这是C语言用来表示整数的最大类型。 不过对于此类型，C规范中并没有明确规定，只是在C99中建议编译器支持比long更大的整型数据类型，由于各编译器实现方式不同，导致unsigned long long 和对应的有符号类型long long并不是所有的编译器都支持。 "%lld"和"%llu"是linux下gcc/g++用于long long int类型(64 bits)输入输出的格式符。
user-0 提问: 请教一下把两个字符串连在一起的原理或者算法是什么

回复:
user: user-0
content: 引用 1 楼 hdt 的回复:大致，开一个两个字符串长度的内存 把第一个串copy到0处，第二个串copy到第一个串长度处 虽然你这太高级了，不过我已经连起来了，谢谢了

user: user-1
content: 大致，开一个两个字符串长度的内存 把第一个串copy到0处，第二个串copy到第一个串长度处
user-0 提问: 数组循环赋值，太快？

回复:
user: user-1
content: LZ试试memcpy，把指针和length设置好就可以了。 PS：LZ每次取的是64字节不是位，还有你的4个数组总长4096，也存完你的8KB，loop循环1024个人不能理解。

user: user-2
content: 循环里咋全是a，a，a，a

user: user-0
content: 引用 2 楼 LonelyRoamer 的回复:循环里咋全是a，a，a，a写错了

user: user-0
content: 写错了，不是全a，是想a，b，c，d四个数组赋值。

user: user-3
content: 帮顶帮顶帮顶

user: user-4
content: 个人感觉memcpy更快
user-0 提问: 新产品研制工序序列,,,急需，，帮个忙，，

回复:
user: user-0
content: 引用 1 楼 user-1的回复:搜有向图邻接表存储 谢谢，，弄好了已经，

user: user-1
content: 搜有向图邻接表存储
user-0 提问: C语言求拯救

回复:
user: user-1
content: 冒泡排序！  int fun(int s[], int *x) { 	int r = 0; 	*x = 0; 	for (int i = 9; i >= 0; i--) 	{ 		for (int j = 0; j < i; j++) 		{ 			if (s[j] < s[j + 1]) 			{ 				std::swap(s[j], s[j + 1]); 			} 		}  		if (s[i] < 60) 		{ 			(*x)++; 		} 		else if (s[i] >= 90) 		{ 			r++; 		} 	}  	return r; }

user: user-2
content: int fun(int s[],int *x) { 	int i,j; 	int t; 	*x = 0; 	for(i = 0;i < 10 - 1;++i)//10个人 	{ 		for(j = i + 1;j < 10;++j) 		{ 			if(s[i] < s[j]) 			{ 				t = s[i]; 				s[i] = s[j]; 				s[j] = t; 			} 		} 	} 	for(i = 0;i < 10 - 1;++i) 	{ 		if(s[i] < 60) 		{ 			*x += 1; 		} 	} 	return 10 - *x; }
user-0 提问: 关于locale.h库

回复:
user: user-1
content: 引用 2 楼 ID870177103 的回复:[quote=引用 1 楼 shihengzhen101 的回复:] 应该是c语言的标准库，C语言，你是在那个平台用的这些函数，你的locale.h不是windows的吧 就是在windows上 _lock_locales在g++的头文件里就没有 _create_locale虽然有声明，但连接的时候会报错[/quote] 标准里没听说过这个函数，没准是Win32平台特有的

user: user-0
content: 引用 1 楼 shihengzhen101 的回复:应该是c语言的标准库，C语言，你是在那个平台用的这些函数，你的locale.h不是windows的吧 就是在windows上 _lock_locales在g++的头文件里就没有 _create_locale虽然有声明，但连接的时候会报错

user: user-1
content: 应该是c语言的标准库，C语言，你是在那个平台用的这些函数，你的locale.h不是windows的吧
user-0 提问: c程序，求助！！！！急！！

回复:
user: user-1
content: 引用 4 楼 cy1176058800 的回复:怎么加入参数？ 5楼说得很详细了

user: user-2
content: DOS年代运行程序都是输入命令行的，由常驻内存的command.com这个DOS下命令解释器（类似Linux下的sh、bash）解释执行 比如： edit  a1.txt dir  /a  /w edit.exe是外部命令，就是一个具体的程序名字，由command.com调用执行 dir是command.com的内部命令，直接执行它自身的部分代码 命令后面的就是命令的参数 如edit  a1.txt，argc==2, argv[0]=="edit", argv[1]=="a1.txt" 你也可以在命令行cmd（Win-R组合键，输入cmd运行）下运行你的程序，后面输入参数。  在Win7下假如你用VC，假如你的程序目录在D:\C\151023_t2，可执行文件在D:\C\151023_t2\Debug，你在资源管理器窗口里打开D:\C\151023_t2文件夹，按住Shift键然后右键点击Debug文件夹，出现右键菜单，选择【在此处打开命令窗口】，就出现一个黑色的命令行窗口，输入：dir【回车】可以看到 151023_t2.exe ，输入：151023_t2【回车】可以运行这个程序，输入：151023_t2  aa  bbb【回车】可以带参数运行这个程序，aa和bbb就是两个参数。

user: user-0
content: 怎么加入参数？

user: user-0
content: 那里执行命令行？@ipqtjmqj

user: user-3
content: 明显是执行时参数不够嘛。。。

user: user-1
content: 按住shift右击，在此处运行命令行
user-0 提问: 求大神帮忙看看程序有没有错误，特别是save函数，输出不对（刚开始学文件）

回复:
user: user-1
content: fwrite完先fclose将缓存中的数据写入到文件，然后重新fopen  #include<stdio.h> void input(struct Student *p); void save(struct Student *p); struct Student { 	int num; 	char name[20]; 	int score[3]; }; int main() { 	struct Student stu[5]; 	struct Student *p = stu; 	input(p); 	save(p); 	return 0; } void input(struct Student *p) { 	for (int i = 0; i<5; i++) 		scanf("%d %s %d %d %d", &(p + i)->num, (p + i)->name, &(p + i)->score[0], &(p + i)->score[1], &(p + i)->score[2]); } void save(struct Student *p) { 	FILE *fp; 	fp = fopen("D:\\stud.dat", "wb+"); 	for (int i = 0; i<5; i++) 		fwrite(p + i, sizeof(struct Student), 1, fp); 	fclose(fp); 	fp = fopen("D:\\stud.dat", "r"); 	for (int i = 0; i<5; i++) 	{ 		fread(p + i, sizeof(struct Student), 1, fp); 		printf("%d %s %d %d %d", (p + i)->num, (p + i)->name, (p + i)->score[0], (p + i)->score[1], (p + i)->score[2]); 	} 	fclose(fp); }

user: user-2
content: 你读的时候需要把文件指针重新移到开头，或者重新打开文件

user: user-0
content: 引用 1 楼 paschen 的回复:你读的时候需要把文件指针重新移到开头，或者重新打开文件 读这个文件，只是想要检查文件里面的数据是不是对的，现在的主要问题是文件里面的数据都是乱码的  引用 2 楼 qq423399099 的回复:fwrite完先fclose将缓存中的数据写入到文件，然后重新fopen  #include<stdio.h> void input(struct Student *p); void save(struct Student *p); struct Student { 	int num; 	char name[20]; 	int score[3]; }; int main() { 	struct Student stu[5]; 	struct Student *p = stu; 	input(p); 	save(p); 	return 0; } void input(struct Student *p) { 	for (int i = 0; i<5; i++) 		scanf("%d %s %d %d %d", &(p + i)->num, (p + i)->name, &(p + i)->score[0], &(p + i)->score[1], &(p + i)->score[2]); } void save(struct Student *p) { 	FILE *fp; 	fp = fopen("D:\\stud.dat", "wb+"); 	for (int i = 0; i<5; i++) 		fwrite(p + i, sizeof(struct Student), 1, fp); 	fclose(fp); 	fp = fopen("D:\\stud.dat", "r"); 	for (int i = 0; i<5; i++) 	{ 		fread(p + i, sizeof(struct Student), 1, fp); 		printf("%d %s %d %d %d", (p + i)->num, (p + i)->name, (p + i)->score[0], (p + i)->score[1], (p + i)->score[2]); 	} 	fclose(fp); } 我明白了 ，是我打开文件的方式不对。。。

user: user-0
content: 引用 2 楼 qq423399099 的回复:fwrite完先fclose将缓存中的数据写入到文件，然后重新fopen  #include<stdio.h> void input(struct Student *p); void save(struct Student *p); struct Student { 	int num; 	char name[20]; 	int score[3]; }; int main() { 	struct Student stu[5]; 	struct Student *p = stu; 	input(p); 	save(p); 	return 0; } void input(struct Student *p) { 	for (int i = 0; i<5; i++) 		scanf("%d %s %d %d %d", &(p + i)->num, (p + i)->name, &(p + i)->score[0], &(p + i)->score[1], &(p + i)->score[2]); } void save(struct Student *p) { 	FILE *fp; 	fp = fopen("D:\\stud.dat", "wb+"); 	for (int i = 0; i<5; i++) 		fwrite(p + i, sizeof(struct Student), 1, fp); 	fclose(fp); 	fp = fopen("D:\\stud.dat", "r"); 	for (int i = 0; i<5; i++) 	{ 		fread(p + i, sizeof(struct Student), 1, fp); 		printf("%d %s %d %d %d", (p + i)->num, (p + i)->name, (p + i)->score[0], (p + i)->score[1], (p + i)->score[2]); 	} 	fclose(fp); }  这样输出是没错了 ，但是文件里面的还是乱码呀

user: user-3
content: 不是有函数是fwind吗
user-0 提问: C语言中数组参数传递，sizeof（数组名）的值

回复:
user: user-0
content: 引用 7 楼 WQW217 的回复:老师说  要多看多用CSDN  学习C++老师说的对

user: user-1
content: 老师说  要多看多用CSDN  学习C++

user: user-0
content: http://www.cnblogs.com/ymy124/archive/2012/03/05/2380048.html 有同样疑惑的可以看看这篇微博，觉得写得很清楚

user: user-0
content: 引用 4 楼 shihengzhen101 的回复:[quote=引用 3 楼 ipqtjmqj 的回复:] [quote=引用 2 楼 suhann 的回复:] [quote=引用 1 楼 ipqtjmqj 的回复:] 隐式转换成指向数组第一个元素的指针了，  char s[]这种写法与char *s没有区别 请问什么情况下会隐式转换呢？ [/quote] 函数传参，函数返回值。 转换的原因为了节省复制时间[/quote]  也就是这些情况了吧[/quote]谢谢，懂了。

user: user-2
content: 引用 3 楼 ipqtjmqj 的回复:[quote=引用 2 楼 suhann 的回复:] [quote=引用 1 楼 ipqtjmqj 的回复:] 隐式转换成指向数组第一个元素的指针了，  char s[]这种写法与char *s没有区别 请问什么情况下会隐式转换呢？ [/quote] 函数传参，函数返回值。 转换的原因为了节省复制时间[/quote]  也就是这些情况了吧

user: user-3
content: 引用 2 楼 suhann 的回复:[quote=引用 1 楼 ipqtjmqj 的回复:] 隐式转换成指向数组第一个元素的指针了，  char s[]这种写法与char *s没有区别 请问什么情况下会隐式转换呢？ [/quote] 函数传参，函数返回值。 转换的原因为了节省复制时间

user: user-0
content: 引用 1 楼 ipqtjmqj 的回复:隐式转换成指向数组第一个元素的指针了，  char s[]这种写法与char *s没有区别 请问什么情况下会隐式转换呢？

user: user-3
content: 隐式转换成指向数组第一个元素的指针了，  char s[]这种写法与char *s没有区别

user: user-4
content: 楼上正解，这是个很古老的问题了，之前好像也有人问到这方面的问题吧

user: user-5
content: 数组作为函数参数与返回值时，会退化为指针，sizeof指针得到的是指针的大小（32位程序为4）
user-0 提问: 一点问题 ，求指导 ！！

回复:
user: user-0
content: 四个数字应该不一样 ，为什么完全 一样 ，还是错了、   #include "stdafx.h" #include<conio.h> float*search(float(*p)[4]) { 	int i; 	float*pt; 	pt=*(p+1); 	for(i=0;i<4;i++) 	{ 		if(*(*p+i)<60) 			pt=*p; 	} return(pt); }  int _tmain(int argc, _TCHAR* argv[]) { 	float score[][4]={{60,75,82,91},{75,81,91,90},{51,65,78,84},{65,72,78,72}}; 	float*p; 	int i,j; 	for(i=0;i<4;i++) 	{ 		p=search(score+i); 		if(p==*(score+i)) 		{     printf("The student NO.%d list:",i+1); 		for(j=0;j<4;j++) 			printf("%5.1f",*p); 		} 	}      _getch();   	return 0; }

user: user-1
content: 加上头文件conio.h

user: user-2
content: #include<conio.h>  另建议使用：_getch();  代替 getch();

user: user-3
content: 加上头文件#include<conio.h>就行了  #include "stdafx.h" #include<conio.h> float*search(float(*p)[4]) { 	int i; 	float*pt; 	pt = *(p + 1); 	for (i = 0; i<4; i++) 	{ 		if (*(*p + i)<60) 			pt = *p; 	} 	return(pt); }  int _tmain(int argc, _TCHAR* argv[]) { 	float score[][4] = { { 60, 75, 82, 91 }, { 75, 81, 91, 90 }, { 51, 65, 78, 84 }, { 65, 72, 78, 72 } }; 	float*p; 	int i, j; 	for (i = 0; i<4; i++) 	{ 		p = search(score + i); 		if (p == *(score + i)) 		{ 			printf("The student NO.%d list:", i + 1); 			for (j = 0; j<4; j++) 				printf("%5.1f", *p); 		} 	} 	getchar();   	return 0; }
user-0 提问: 这个怎么写，第一行是整数n，表示测试的数据组数，下面是n行含空格的字符串(仅由空格和英文字符组成）。

回复:
user: user-1
content: 1.二维数组 2.循环n次 3.使用可以读入空格的函数，比如gets

user: user-2
content: int n, i; 	char s[20][100]; 	scanf("%d", &n); 	getchar(); 	for (i = 0; i < n; ++i) 	{ 		gets(s[i]); 	}

user: user-3
content: 循环。先读取 n，然后循环直到 n 耗尽，每个循环里读取一组输入，然后处理之。
user-0 提问: 小白 求帮看程序哪里出了问题

回复:
user: user-1
content: stu class[5]={};

user: user-2
content: C++里使用结构体类型时不需要在类型名前面加struct，C语言是必须要加的。不过C++里加了应该也没问题的，至少Visual studio里可以编译通过。

user: user-3
content: 不要叫class，换个名字就行了  class是保留字(关键字)
user-0 提问: VS 2015 写的第一个c语言控制台程序，运行完程序就自动退出！

回复:
user: user-1
content: 最后getchar() 不要注释就可以了  或者用ctrl+F5启动程序

user: user-2
content: 是正常的，可以忽略无法查找或打开 PDB 文件这些话。 要消掉参考：http://blog.163.com/qimo601@126/blog/static/1582209320143410125543/

user: user-3
content: 程序没有暂停肯定自动运行结束了

user: user-4
content: 应该用_getch()吧，或者用system("pause");

user: user-5
content: 加油，每个回个帖子是一种美德

user: user-6
content: 没有getchar，自动退出当然是对的

user: user-7
content: 编译器关了，重开在重新输入
user-0 提问: 杭电一直显示Presentation Error怎么改都不正确

回复:
user: user-1
content: 二分查找法在我博客里有些可以参考一下

user: user-2
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-3
content: presentation error 意为输出格式错误，也就是你的输出没有按照输出要求进行格式化。一般是多了或者少了一些空格或者空行。 常见的PE错误应该有以下的几种情况： 每行输出之后有空行 每两行输出之间有空行 一行中，每个输出数字（或字符串，等）之间有空格 一行中，每个输出数字（或字符串，等）之后有空格
user-0 提问: 请教大神向指针形参传递数组名的正确方法

回复:
user: user-1
content: a又不是int *类型的，直接将a传过去当然会报错 http://www.cnblogs.com/CBDoctor/archive/2012/07/29/2614054.html

user: user-2
content: 否则参数类型不匹配呗  a[N][N]作为参数传递会退化成为 int(*)[N] ，并不是你参数的int*  *a得到的是 int[]类型，作为参数传递会退化为int*，符合你参数类型

user: user-3
content: 一维数组：  void fn(int *pArr,size_t n)//函数定义时指向数组元素的指针作为函数的形参 {    ....... } int a[] = {....}; fn(a);//调用时数组名作为函数实参  二维数组：  void foo(int (*pArr)[5],size_t n)//函数定义时指向数组元素(每个元素是一个长度为5的一维数组的指针作为函数的形参,[5]不能省！ {    ....... } int a[3][5] = {....};//可以认为数组a有三个元素，每个元素是一个长度为5的一维数组 foo(a);//调用时二维数组名作为函数实参  三维数组： [code=c] void fm(int (*pArr)[5][6],size_t n)//函数定义时指向数组元素(每个元素是一个长度为[5][6]的二维数组的指针作为函数的形参 {    ....... } int a[3][5][6] = {....};//可以认为数组a有三个元素，每个元素是一个长度为[5][6]的二维数组，每个二维数组中又含有一个长度为6的 //一维数组]，照此递归 fm(a);//调用时三维数组名作为函数实参 [/code n维数组： ...  ....

user: user-4
content: 二维数组 对应 ”伪“二维指针，而a是一维指针，所以两个替换时会有编译错误
user-0 提问: 离散数据积分怎么写程序？

回复:
user: user-1
content: 问题解决了么，我也在考虑这个，直接求和的话累积误差太大，该怎么消除？

user: user-0
content: 大神详细指点一下吧

user: user-0
content: 我用的是加速度传感器，每采集一个点都是一个加速度，我想把每个点都求出相对应的速度

user: user-2
content: 前 n 项和除以采样率就可以了吧 ...

user: user-3
content: 矩形法、梯形法、抛物线法，参见《计算方法》课本