Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求大佬，不会写了

回复:
user: user-1
content: 供参考：#include<stdio.h>  #define N 30  struct students {      int num;     //学号     char name[20];//姓名   // int gender;  //性别 男M，女F     char gender;  //性别 男M，女F      int age;     //年龄    float score;   //成绩    float grade;   //操评 };  int main() {   struct students stu[N];//stu[30]      int i;    float qualified=0;//合格    float qualifiedf=0;//合格率     for(i=0;i<N;i++) //for(i=0;i<30;i++)       {        //scanf("%d %c %d %d %d %d",          scanf("%d %s %c %d %f %f",          &stu[i].num,stu[i].name,&stu[i].gender,&stu[i].age,&stu[i].score,&stu[i].grade);       //&stu[i].num,&stu[i].name,&stu[i].gender,&stu[i].age,&stu[i].score,&stu[i].grade);       }    for(i=0;i<N;i++)       {      //if(stu[i].score>60 && stu[i].gender=='M')        if(stu[i].score>=60 && stu[i].gender=='M')           qualified=qualified+1;       }  //qualifiedf=qualified/30;    qualifiedf=qualified/N;    printf("qualifiedf=%.2f\n",qualifiedf);     int count=0;    for(i=0;i<N;i++)       {        if(stu[i].age<18 && stu[i].gender=='F')// 小于18女生总数           count++;       }    printf("count=%d\n", count);     return 0; }

user: user-2
content: 小于18女生总数： int count=0; for(i=0;i<30;i++) {     if(stu[i].age<18 && stu[i].gender=='F')         count++; } printf("%d\n", count);

user: user-3
content: &stu[i].name 这个不太对吧，用stu[i].name或者&stu[i].name[0]
user-0 提问: C语言 贪吃蛇邮箱控制台报错

回复:
user: user-1
content: 请参考《VS2015贪吃蛇代码分析（10-1）》 希望能够帮到您！

user: user-0
content: #include<stdio.h> #include<Windows.h> #include<conio.h>  #define MAP_WIDTH 60 //平均宽度 #define MAP_HEIGHT 20 //平均高度  struct snake { 	//x坐标 	int x;  	//y坐标 	int y;  	//@或者* 	char ch; }; //结构体数组：代表蛇 struct snake g_snake[MAP_WIDTH*MAP_HEIGHT]; //蛇实际的长度 int g_snake_length = 5; void  SetPos(int  x, int  y) {  	COORD  point = { x ,  y }; //光标要设置的位置x,y 	HANDLE  HOutput = GetStdHandle(STD_OUTPUT_HANDLE); //使用GetStdHandle(STD_OUTPUT_HANDLE)来获取标准输出的句柄 	SetConsoleCursorPosition(HOutput, point); //设置光标位置 }  void DrawSnake() { 	int i = 0; 	for (i = 0; i < g_snake_length; i++) 	{ 		//设置坐标到（0,0）位置 		SetPos(g_snake[i].x, g_snake[i].y);  		//绘制贪吃蛇**** 		printf("%c", g_snake[i].ch); 	}   }  void HideCorsor()  {  	HANDLE fd = GetStdHandle(STD_OUTPUT_HANDLE);  	CONSOLE_CURSOR_INFO cinfo;  	cinfo.bVisible = 0;  	cinfo.dwSize = 1;  	if (SetConsoleCursorInfo(fd, &cinfo))  		printf("执行成功\n");  	else  		printf("执行失败\n");  	  } int main() { 	//隐藏光标 	HideCorsor(); 	int i, j; 	//[0,21) 	for (j = 0; j < MAP_HEIGHT + 1; j++) 	{ 		if (j == MAP_HEIGHT) 		{ 			//绘制一行 			for (i = 0; i < MAP_WIDTH; i++) 			{ 				printf("-"); 			} 			printf("\n");  		} 		else 		{   //绘制空行 			for (i = 0; i < MAP_WIDTH; i++) 			{ 				printf(" "); 			} 			printf("|"); 			printf("\n"); 		}  	} 	g_snake_length = 5;  	g_snake[0].x = 0; 	g_snake[0].y = 0; 	g_snake[0].ch = '*';  	g_snake[1].x = 1; 	g_snake[1].y = 0; 	g_snake[1].ch = '*';  	g_snake[2].x = 2; 	g_snake[2].y = 0; 	g_snake[2].ch = '*';  	g_snake[3].x = 3; 	g_snake[3].y = 0; 	g_snake[3].ch = '*';  	g_snake[4].x = 4; 	g_snake[4].y = 0; 	g_snake[4].ch = '@';  	//绘制贪吃蛇**** 	DrawSnake();  	while (1) 	{ 		int tail_x = g_snake[0].x; 		int tail_y = g_snake[0].y; 		//向右移动一格 		//（0,0），（1,0），（2,0），（3,0），（4,0)@ 		//         （1,0），（2,0），（3,0），（4,0）,(5,0)@  		//[0,5) 		for (i = 0; i < g_snake_length - 1; i++) 		{ 			g_snake[i].x = g_snake[i + 1].x; 			g_snake[i].y = g_snake[i + 1].y; 		} 		int key = _getch(); 		switch (key) 		{ 		case 'w'://上 			printf("上"); 			g_snake[g_snake_length - 1].y -= 1; 			break;  		case 'a'://左 			printf("左"); 			g_snake[g_snake_length - 1].x -= 1; 			break;  		case 's'://下 			printf("下"); 			g_snake[g_snake_length - 1].y += 1; 			break;  		case 'd'://右 			printf("右"); 			g_snake[g_snake_length - 1].x += 1; 			break; 		} 		//清除尾坐标 		SetPos(tail_x, tail_y); 		putchar(' ');   		//绘制贪吃蛇**** 		DrawSnake();   	}     	return 0; }

user: user-2
content: 出现乱码还能有别的原因 出现上下左右只能是你就这样写的

user: user-3
content: 没代码，不知道你是怎么写的
user-0 提问: TM1620数码管驱动

回复:
user: user-1
content: 引脚定义呢？

user: user-0
content: 板子可以确定是好的

user: user-2
content: 不亮也有可能是电路的问题，哪里虚焊了，烧掉了，没通电，共阴的当成共阳了之类的。
user-0 提问: vs2019使用MessageBox函数不弹出对话框

回复:
user: user-1
content: 引用 4 楼 logωon 的回复:我刚接触C++。。请问这个vs2019视图是哪个啊？ 名字带View的是视图

user: user-1
content: 你这是文档-视图项目，必须在视图上点左键哟！

user: user-2
content: 一上来就MFC，有基础了吗

user: user-0
content: 我刚接触C++。。请问这个vs2019视图是哪个啊？

user: user-3
content: 引用 1 楼 user-4 的回复:既没有双冒号，也没有足够的参数，还能编译成功，说明不是在调用API，那你只能自己调试了。  哈哈，楼主这是在调戏编译器的节奏。想骗过编译器。结果也被编译器骗了。。

user: user-4
content: 既没有双冒号，也没有足够的参数，还能编译成功，说明不是在调用API，那你只能自己调试了。
user-0 提问: 为什么我这个printf（“%c“,a【i】.data）输出不了啊

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX_SIZE 1024 typedef struct {     char data;     int weight;     int parent;     int lchild;     int rchild; } Huffnode,*Hufftree; typedef struct stack {     int top;     int elem[MAX_SIZE]; } Stack; void Initstack(Stack *s) {     s->top=-1; } void push(Stack *s,int e) {     s->top++;     s->elem[s->top]=e; } int pop(Stack *s) {     return s->elem[s->top--]; } bool isempty(Stack *s) {     if(s->top==-1)         return true;     else         return false; } void GetHuffmamCode(Hufftree a,int n) {     int i,j,s1,s2,max,c,p;     Stack s;     char ch;     Initstack(&s);     printf("输入字符集：");fflush(stdout);     rewind(stdin);     for(i=1;i<=n;i++) {         scanf("%c",&a[i].data);     }     for(i=1;i<=n;i++) {         printf("a[%d].data:%c\n",i,a[i].data);     }     printf("\n");     printf("输入权值：");fflush(stdout);     rewind(stdin);     for(i=1;i<=n;i++) {         scanf("%d",&a[i].weight);     }     for(i=1;i<=n;i++) {         printf("a[%d].weight:%d\n",i,a[i].weight);     }     printf("\n");     int m=2*n-1;     for(i=1;i<=n;i++) {         a[i].parent=0;         a[i].rchild=0;         a[i].lchild=0;     }     for(i=n+1;i<=m;i++) {         a[i].data=NULL;         a[i].weight=0;         a[i].parent=0;         a[i].lchild=0;         a[i].rchild=0;     }     for(i=n+1;i<=m;i++) {         max=65535;         for(j=1;j<=i-1;j++) {             if(a[j].parent==0&&a[j].weight<=max) {                 s1=j;                 max=a[j].weight;             }         }         a[s1].parent=i;         max=65535;         for(j=1;j<=i-1;j++) {             if(a[j].parent==0&&a[j].weight<=max) {                 s2=j;                 max=a[j].weight;             }         }         a[s2].parent=i;         a[i].weight=a[s1].weight+a[s2].weight;         a[i].lchild=s1;         a[i].rchild=s2;     }     for(i=1;i<=n;i++) {         c=i;         p=a[i].parent;         while(p!=0) {             if(a[p].lchild==c)                 push(&s,0);             else                 push(&s,1);             c=p;             p=a[p].parent;         }         printf("i:%d\n",i);         printf("%c\n",a[i].data);         while(!isempty(&s))             printf("%d",pop(&s));         printf("\n");     } } int main() {     Hufftree a;     int n;     int m;     printf("输入字符个数：");     scanf("%d",&n); //  m=2*n-1;     m=3*n;     a=(Hufftree)malloc(sizeof(Huffnode)*m);     GetHuffmamCode(a,n);     return 0; } //输入字符个数：3 //输入字符集：abc //a[1].data:a //a[2].data:b //a[3].data:c // //输入权值：10 20 30 //a[1].weight:10 //a[2].weight:20 //a[3].weight:30 // //i:1 //a //00 //i:2 //b //01 //i:3 //c //1 //

user: user-2
content: 对于%c的输入，需要注意上次输入的'\n'可能被接收。

user: user-3
content: printf("%c\n",a[i].data);前面随便打印输出一行字符串，看看程序走到这个输出语句了吗

user: user-4
content: 太长没太仔细看 你的a，数组下标应该从0到m-1，但你的处理却是从1到m，造成内存越界了吧？
user-0 提问: SHFileOperation函数会把文件拷贝成文件夹？

回复:
user: user-1
content: 参考下：https://blog.csdn.net/ghevinn/article/details/8707552?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

user: user-0
content: 没人回复啊怎么
user-0 提问: 关于c语言中位操作的疑问

回复:
user: user-1
content: 写入前使用掩码，例如：  uint8_t mask = 0xFE;//小端存储的机器中第一个bit位有写保护 uint8_t a = 0xFF;//被保护数据 uint8_t b = 0x02;//待写入数据 uint8_t c =( b & mask) | (a & (~mask)) ;  memcpy(&a,&c,sizeof(uint8_t));

user: user-2
content: C++可以用类来实现，C只能自己小心处理。
user-0 提问: 学习C语言时遇到的两个问题

回复:
user: user-1
content: 楼主的代码：

user: user-1
content: total -= 1

user: user-2
content: result=result-x 等价 result-=x

user: user-0
content: 引用 1 楼 user-2的回复:1、result-=1 2、尽量使算法不需要保留原始输入数据，比如求和，可以将每个输入的数据累加到一个变量，然后计数即可；如果必须保留，可以先分配一定长度，当不够时，再重新分配更大长度，把原有数据复制过去，realloc()就是干这个的。或者也可以使用链表。 是因为一开始定义的result=1的缘故吗？请问如果用-=的话可以怎么改一下？

user: user-2
content: 1、result-=1 2、尽量使算法不需要保留原始输入数据，比如求和，可以将每个输入的数据累加到一个变量，然后计数即可；如果必须保留，可以先分配一定长度，当不够时，再重新分配更大长度，把原有数据复制过去，realloc()就是干这个的。或者也可以使用链表。

user: user-0
content: 哦哦 明白了！原来是我一直概念没搞清啊

user: user-1
content: 引用 7 楼 啊6吧 的回复:[quote=引用 5 楼 qzjhjxj的回复:]楼主的代码： 那请问为啥total=total-1就能输出正确的结果呢？[/quote] total -= total;/*这句分开写法：*/total = total - total = 0; total -= 1；/*这句分开写法   ：*/total = total - 1;执行顺序为：total-1，total =total,就是变量total先减1运算，再赋值。

user: user-0
content: 引用 5 楼 qzjhjxj的回复:楼主的代码： 那请问为啥total=total-1就能输出正确的结果呢？
user-0 提问: 求助

回复:
user: user-1
content: 只有想不到，没有做不到。 修改main，这个简单，自己写个编译器即可。 如果觉得C语法反人类，还可以修改C语法，创建新编程语言。。

user: user-2
content: 首先这个事没啥意义。 其次个人觉得最简方式是宏定义，你可以把定义藏进头文件足够了。

user: user-3
content: 百度吧。这个我记得编译链接过程中，会占用这个默认名称。
user-0 提问: C++

回复:
user: user-1
content: 供参考：#include <stdio.h> int main(int argc, char* argv[]) {     int a[10]={0},b,i=0;     scanf("%d",&b);     while(b){           a[i++] = b%10;           printf("%d",a[i-1]);           b /= 10;          }     printf("\n");      return 0; } int main(void) { 	char buf[11], *p=buf; 	scanf("%10s", buf); 	while(*p)p++;         while(p-- != buf) printf("%c",*p); 	printf("\n");    	return 0; }

user: user-1
content: 引用 3 楼 weixin_51991747 的回复:while(*p)p++;    while(p-- != buf) printf("%c",*p);是什么意思？？？  如:原数为4563，假设首地址为buf=0，while(*p)p++;这句就是p 从0开始一直走到4563的结尾处，也就是p=4;  while(p-- != buf) printf("%c",*p);这句就是p=4开始往回倒，一直倒回到p==buf=0的位置，倒着输出呀。

user: user-0
content: while(*p)p++;    while(p-- != buf) printf("%c",*p);是什么意思？？？

user: user-2
content: 把每位数取出来再加起来
user-0 提问: 自闭中

回复:
user: user-1
content: 最后一个words不要*号

user: user-2
content: 引用 3 楼 向阳森 的回复:[quote=引用 1 楼 赵4老师的回复:]13:   char words[]="... 16:   cnline((char *)words, i, j); 能详细讲一下原因吗！谢谢[/quote] 你的函数形参和调用函数输入的实参类型不匹配，要改成一样的类型

user: user-0
content: 引用 1 楼 赵4老师的回复:13:   char words[]="... 16:   cnline((char *)words, i, j); 能详细讲一下原因吗！谢谢

user: user-3
content: chline(*words, i, j); 参数去掉*，否则类型不匹配。应为实参是char，形参是char *

user: user-4
content: 13:   char words[]="... 16:   cnline((char *)words, i, j);
user-0 提问: C语言小白求助！为什么①不能选B，②不能选A?

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

user: user-2
content: 考虑权限问题 带+都不选 考虑文本模式对文件数据有特殊处理 不带b都不选 1. A 不带b B 带+ C OK D 带+ 选C 2. A 带+ B 带+ C 不带b D OK  结论 答案是 CD

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

user: user-3
content: 从打开文件后的操作上来看，fp1只是做了读操作，其他没有。从安全角度上讲old.data文件的打开方式应该是只读的，r+是可以读写的，添加写权限不安全；  但是B也没问题。  第二个空，道理也是一样的。

user: user-4
content: 感觉答案只是从严谨的角度定的吧，你的想法也没问题

user: user-5
content: 因为题目不是你出的。
user-0 提问: 请问输出超限怎么解决

回复:
user: user-0
content: 引用 4 楼 user-1的回复:勉强一点试试 while(scanf(...)==2) 吧 嗯好，非常感谢

user: user-1
content: 勉强一点试试 while(scanf(...)==2) 吧

user: user-0
content: 样例输入为 no 370 371

user: user-1
content: 为啥都喜欢把关键部位藏起来呢？样例输出呢？

user: user-0
content: 有人来吗，求大佬告知
user-0 提问: 挑战全球各种Code Editors！

回复:
user: user-0
content: TSEPro11_Setup.exe 百万军中取上将首级如探囊取物， 千万行里改关键源码在弹指瞬间。 功能超强的程序编辑器！ https://blog.csdn.net/zhao4zhong1/article/details/126596717

user: user-1
content: 试试还能发帖么

user: user-2

user: user-3
content: 还没结帖，赶紧蹭一蹭

user: user-4
content: 有要分的

user: user-5
content: 厉害 厉害

user: user-6
content: 不错，不错！

user: user-7
content: 是我没说清楚，能编辑多大的文件，是单个文件大小，多个文件的总量意义不大。

user: user-0
content: 引用 7 楼 早打大打打核战争 的回复:一百万行printf？ 这个名副其实的“一百万行printf”也是我利用此神器的几个键盘宏生成的。 顺便可用于打脸那些以代码行数论程序员工作量的外行领导。

user: user-7
content: 一百万行printf？

user: user-0
content: 引用 5 楼 早打大打打核战争 的回复:是我没说清楚，能编辑多大的文件，是单个文件大小，多个文件的总量意义不大。 单个文件也毫无压力：

user: user-0
content: 引用 3 楼 早打大打打核战争 的回复:能编辑多大的文件，一百万行代码行不行？ 你以为不行吗？  以上是打开opencv+contrib所有源代码后的局部截图

user: user-7
content: 能编辑多大的文件，一百万行代码行不行？

user: user-0
user-0 提问: 请教到底什么是函数原型，谢谢

回复:
user: user-1
content: 我们都知道C语言提倡在调用之前通过包含头文件等手段先提供函数原型，我们照办。 凡是违反这个原则的，在C猿看来都是大逆不道。  所以我仍然表示我无法提供你所需要的函数原型的精确定义。从而无法正面回答你的问题。5楼所述都是侧面功能性描述。 从而我也仍然认为你的纠结是钻牛角尖。

user: user-2
content: 引用 4 楼 oracleperl 的回复:[quote=引用 3 楼 自信男孩 的回复:]    函数声明可以省略形参名，但是函数定义的首部必须写出所有形参名并给出其对应的数据类型。     函数原型的主要目的为声明函数返回值类型以及函数的期望接受的参数的个数、参数类型和参数顺序     如果程序中没有某个函数的函数原型（没有说明），编译系统就会用第一次出现的这个函数（函数定义或函数调用）构造函数原型         在缺省下编译系统默认函数返回值为int         而对函数参数类型不做任何假设     常见错误         和函数原型不匹配的函数调用会导致语法错误         函数原型和函数定义不一致，也会产生错误         C语言环境下，如果函数不进行声明就使用，可能会发生错误，因为默认将返回值做为int类型来处理，所以，最好是在使用之前对函数进行声明。    感觉楼主还是比较懒的，网上的信息还是比较多的，为什么不亲自找找并总结一下。如果看一个帖子的说明还怀疑，看2个可能可以做个对照，看多个的时候可以总结一下那个更靠谱的定义。  最后还真别钻牛角尖，没用的。 网上的信息未必是对的，很多文字逻辑混乱 另外，这个不存在钻牛角尖一说，概念是要搞清楚的。 [/quote]  所以，你需要判断和总结。从网上查资料还是比较快的，如果去查专门的文献或书籍，我想你没这么快。网上的表述可能加上了很多人自己的见解在里面，并且可能讲解的更通俗易懂，更多时候还会有例子。一个概念，可能描述的不见得你就能理解。

user: user-1
content: 总结，在调用点上方让编译器两眼一抹黑的就叫没有原型，无论你在下面写得多么完善。

user: user-1
content: 反过来说，出现在调用点下方/其他文件里的函数定义不起原型作用，因此不认为是原型。

user: user-1
content: 好吧，惯着你。前提是编译器和你一样从头开始流式阅读源文件。 C意义下所谓原型prototype，它是干啥的呢？ 用于在函数被调用之前通知编译/连接器，这个函数有几个参数，每个参数是什么类型的，以及捎带着预期的返回值是什么类型的。 为啥要通知是另一个问题。  于是，凡是起这个作用的，出现在函数被调用的行的上方的函数声明/函数定义都可以被编译/连接器理解为是prototype。  通常我们写那个声明的目的是为了解放函数定义的位置， 所以，在一个程序中如果你能保证函数定义和函数调用出现在同一个源文件，并且定义总在调用上方出现，那就完全不必出现函数声明。 所以所以，在通常的语境下，我们称头文件里的函数声明，以及源文件里位于靠近文件头方向的函数声明为 函数原型。

user: user-0
content: 引用 3 楼 自信男孩 的回复:函数声明可以省略形参名，但是函数定义的首部必须写出所有形参名并给出其对应的数据类型。     函数原型的主要目的为声明函数返回值类型以及函数的期望接受的参数的个数、参数类型和参数顺序     如果程序中没有某个函数的函数原型（没有说明），编译系统就会用第一次出现的这个函数（函数定义或函数调用）构造函数原型         在缺省下编译系统默认函数返回值为int         而对函数参数类型不做任何假设     常见错误         和函数原型不匹配的函数调用会导致语法错误         函数原型和函数定义不一致，也会产生错误         C语言环境下，如果函数不进行声明就使用，可能会发生错误，因为默认将返回值做为int类型来处理，所以，最好是在使用之前对函数进行声明。    感觉楼主还是比较懒的，网上的信息还是比较多的，为什么不亲自找找并总结一下。如果看一个帖子的说明还怀疑，看2个可能可以做个对照，看多个的时候可以总结一下那个更靠谱的定义。  最后还真别钻牛角尖，没用的。 网上的信息未必是对的，很多文字逻辑混乱 另外，这个不存在钻牛角尖一说，概念是要搞清楚的。

user: user-2
content: 函数声明可以省略形参名，但是函数定义的首部必须写出所有形参名并给出其对应的数据类型。     函数原型的主要目的为声明函数返回值类型以及函数的期望接受的参数的个数、参数类型和参数顺序     如果程序中没有某个函数的函数原型（没有说明），编译系统就会用第一次出现的这个函数（函数定义或函数调用）构造函数原型         在缺省下编译系统默认函数返回值为int         而对函数参数类型不做任何假设     常见错误         和函数原型不匹配的函数调用会导致语法错误         函数原型和函数定义不一致，也会产生错误         C语言环境下，如果函数不进行声明就使用，可能会发生错误，因为默认将返回值做为int类型来处理，所以，最好是在使用之前对函数进行声明。    感觉楼主还是比较懒的，网上的信息还是比较多的，为什么不亲自找找并总结一下。如果看一个帖子的说明还怀疑，看2个可能可以做个对照，看多个的时候可以总结一下那个更靠谱的定义。  最后还真别钻牛角尖，没用的。

user: user-2
content: https://zhidao.baidu.com/question/1964441885008271820.html

user: user-3
content: int f(int x);   这个可以看做声明  int f(int x)  //这一行可以看做实现 return 100; }
user-0 提问: 请问 我怎么写这个装进unsigned char tx_Setbuffer[1024]; 里数据，写法不会

回复:
user: user-1
content: 引用 3 楼 2004v2004 的回复:strcpy(tx_Setbuffer+8, "Versio"); //字符串用strcpy拷贝的方式  我这里这个不对呢 不对是指什么？是程序运行出错，还是运行后赋值后结果不对？ 如果是报错，改成 strcpy((char*)(tx_Setbuffer+8), "Versio"); 或用内存拷贝的方式 memcpy(tx_Setbuffer+8, "Versio", strlen("Versio")); 再不行就循环一个一个赋值 如果是结果不对，那就看你希望的结果是什么了，上面的做法只是单纯的把"Versio"的每个字符存入tx_Setbuffer+8开始的内存中

user: user-0
content: strcpy(tx_Setbuffer+8, "Versio"); //字符串用strcpy拷贝的方式  我这里这个不对呢

user: user-0
content: memcpy(tx_Setbuffer + 8, "Versio", 8);        用这个是OK的 谢谢了

user: user-1
content: for example tx_Setbuffer[6] =(unsinged char)strtol("32", NULL, 16); //字符串转成数字类型 strcpy(tx_Setbuffer+8, "Versio"); //字符串用strcpy拷贝的方式 tx_Setbuffer[17]=((unsinged char))strtol("1", NULL, 0); //字符串转成数字类型
user-0 提问: C语言小白求助！请问这道题c为什么错了？

回复:
user: user-0
content: 谢谢解答！！！

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

user: user-1
content: 我还说fprintf也可以，谁要跟我抬杠，我就甩这几行代码给他： #include <stdio.h> int main() {     int i=0x12345678;     FILE *f=fopen("data.bin","wb");     fprintf(f,"%c%c%c%c",(char)(i>>24),(char)(i>>16&0xFF),(char)(i>>8&0xFF),(char)(i&0xFF));     fclose(f);     return 0; }

user: user-1
content: fwrite可以是可以；但不能拦着fputc也可以： int fputc( int c, FILE *stream );

user: user-2
content: 纠正 ACD都行  AD需要一点技巧而已

user: user-2
content: 出题人自己不清醒而已  AC都行 A需要一些技巧而已

user: user-3
content: C fwrite()函数

user: user-4
content: 【可把整数以二进制形式存放到文件中】这里的二进制形式指的是什么？ 如果是比如5，以101写入文件的话，那就是A，用fprintf的格式打印可以实现 C能实现的是字节方式存储，但是存储内容本身是16进制

user: user-5
content: B是读，A和D是字符形式；所以选C，如果C错，那就有问题了吧，那就是答案错误～   https://wenku.baidu.com/view/f4332ec509a1284ac850ad02de80d4d8d15a01b6.html

user: user-4
content: fwrite啊，以二进制的形式"wb"打开文件
user-0 提问: C语言新手问题：怎么在函数之间传一个可变长数组？

回复:
user: user-0
content: 引用 1 楼 自信男孩 的回复:#include <stdio.h> #include <stdlib.h>  struct array {     int n;     int *arr; };  static struct array *func1(); static int func2(struct array *);  struct array *func1() { #if 0     struct array *p1;     struct array p1_t;     int i , n;      n = 16; // assume n will change based on user input     p1 = &p1_t;     p1->n = n;     p1->arr = (int *)malloc(sizeof(int) * n);     for (i = 1 ; i <= n ; i++) p1->arr[i - 1] = i;     return p1;    //返回的是p1_t的地址，这个地址是局部变量的地址，根据局部变量的生命周期是本函数内，因此返回的p1无效，还导致内存泄露，因为malloc的没释放。 #else     struct array *p1;     int n, i;      p1 = (struct array *)malloc(sizeof(struct array));     if (!p1)         exit(0);      n = 16;     p1->n = n;     p1->arr = (int *)malloc(sizeof(int) * n);     if (!p1->arr) {         free(p1);         exit(0);     }     for (i = 1; i<= n; i++)         p1->arr[i-1] = i;      return p1;  #endif }  int func2(struct array *p2) {     int i , n;      n = p2->n;     for (i = 1 ; i <= n ; i++)         p2->arr[i - 1] = n + 1 - i;      return 1; }  int main() {     struct array *p;     int i , n;      p = func1();     n = p->n;     for (i = 1 ; i <= n ; i++)         printf("%d, " , p->arr[i - 1]);     printf("after func1.\n");     func2(p);     for (i = 1 ; i <= n ; i++)         printf("%d, " , p->arr[i - 1]);     printf("after func2.\n");      free(p->arr);     free(p);      return 1; } 供参考～  谢谢，您的代码风格很好，向您学习！

user: user-1

user: user-2
content: 我寻思着你这也不是可变数组而是链表啊，你可以找找怎么写链表的看看

user: user-3
content: #include <stdio.h> #include <stdlib.h>  struct array {     int n;     int *arr; };  static struct array *func1(); static int func2(struct array *);  struct array *func1() { #if 0     struct array *p1;     struct array p1_t;     int i , n;      n = 16; // assume n will change based on user input     p1 = &p1_t;     p1->n = n;     p1->arr = (int *)malloc(sizeof(int) * n);     for (i = 1 ; i <= n ; i++) p1->arr[i - 1] = i;     return p1;    //返回的是p1_t的地址，这个地址是局部变量的地址，根据局部变量的生命周期是本函数内，因此返回的p1无效，还导致内存泄露，因为malloc的没释放。 #else     struct array *p1;     int n, i;      p1 = (struct array *)malloc(sizeof(struct array));     if (!p1)         exit(0);      n = 16;     p1->n = n;     p1->arr = (int *)malloc(sizeof(int) * n);     if (!p1->arr) {         free(p1);         exit(0);     }     for (i = 1; i<= n; i++)         p1->arr[i-1] = i;      return p1;  #endif }  int func2(struct array *p2) {     int i , n;      n = p2->n;     for (i = 1 ; i <= n ; i++)         p2->arr[i - 1] = n + 1 - i;      return 1; }  int main() {     struct array *p;     int i , n;      p = func1();     n = p->n;     for (i = 1 ; i <= n ; i++)         printf("%d, " , p->arr[i - 1]);     printf("after func1.\n");     func2(p);     for (i = 1 ; i <= n ; i++)         printf("%d, " , p->arr[i - 1]);     printf("after func2.\n");      free(p->arr);     free(p);      return 1; } 供参考～
user-0 提问: 如何用C语言读取一个TXT文件里的特定数据

回复:
user: user-1
content: //方案一,逻辑简单粗暴 BOOL CheckStr(char *src,char *comp) { 	if(NULL==src)  return FALSE; //原串未分配 	if(NULL==comp) return FALSE; //比较串未分配 	if(*src<0x20)  return FALSE; //原串空串 	if(*comp<0x20) return FALSE; //比较串空串 	char *p1=src,*p2=src; 	char *p3=comp,*p4=comp; 	while(1)  	{ 		if(*(p4+1)<0x20) break;    //比较串串尾 		if(*p2<0x20) return FALSE; //原串比比较串还短 		p4++; 		p2++; 	} 	while(1) 	{ 		if(*p2<0x20) return FALSE; //原串扫描完成,没有匹配上串 		char *pa=p1; 		char *pb=p3; 		while(1) 		{ 			if(*pa!=*pb) break; 			if(pb==p4) return TRUE; //匹配成功 			pa++; 			pb++; 		} 		p1++; 		p2++; 	} 	return FALSE; //这里其实永远不会被执行了 }  应用 if(CheckStr(buf,"ACCE\0")) { 	printf("文本行%s里包含的串ACCE\n"); }

user: user-0
content: 我是要把MATLAB转成C语言，然后在板子上跑，不是单纯的提取数据

user: user-2
content: 你用EXCEL不香么 先用冒号，分成不同的列。 然后按关键字排序 也行吧

user: user-0
content: 谢谢您的参考，我现在做的是要把MATLAB程序转成C程序，在MATLAB文件里他是把ACCE、GYRO、MAGN以及GNSS后面的数据一条一条的放在了矩阵里，那在C语言里我想就是放在二维数组里，我想做到就是读文件相对应的数据放在数组里，后续用的时候可以直接提取相对应的数组。因为是刚接触，所以不太会改你的这个参考，您能针对我的情况写个大概的参考嘛，万分感谢~

user: user-3
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-4
content: 一行一行的读取，然后比较，比如可以比较关键字，找到ACCE
user-0 提问: 水仙花数

回复:
user: user-1
content: 引用 4 楼 weixin_54530767 的回复:[quote=引用 1 楼 自信男孩的回复:]先求出水仙花，然后对10取余。从低位到高位，最后留出前两位就好了吧 请问可以给一下求出水仙花后的代码吗，谢谢大佬了[/quote] 你先把求水仙花的代码发出来吧，我在你的基础上做一下修改

user: user-2
content: 供参考：int main() {    int m,n,sum;    for(int i=100;i<1000;i++){       m = i;       sum=0;       while(m){           n=m%10;           m/=10;           sum += n*n*n;       }       if(sum == i)printf("i=%d,%d,%d\n",i,i/100,i/10%10);    }     return 0; }

user: user-1
content: #include <stdio.h> #include <math.h>  int check_narcissus (int num, char *digit, int len) {     int tmp = num;     int sum = 0, i = 0;      while (tmp) {         sum += pow(tmp % 10, 3);         digit[i%len] = tmp % 10 + '0';         tmp /= 10;         i++;     }     if (sum == num)         return 1;      return 0; }  int main() { #if 0     int i;     char digit[3] = {0};      for (i = 100; i < 1000000; i++) {         if (check_narcissus(i, digit, 2))             printf("%d is narcissus number, %s!\n", i, digit);     }  #else     int data,hun,ten,digit,count=0;      for(data=100;data<1000;data++)     {         hun = data/100  % 10;         //ten=(data-data-hun*100);         ten = (data / 10) % 10;         digit = data%10;         //if(data==hun*hun*hun+ten*ten*ten*digit*digit*digit)         if(data==hun*hun*hun+ten*ten*ten+digit*digit*digit)             printf("%d, two bit: %d\n", data, data / 10);     }  #endif      return 0; } 供参考～  既然知道水仙数是一个三位数，求前两位不很容易吗？直接除10就能得到了，也不用我这么麻烦。  楼主的求水仙数有问题。

user: user-2
content: #include<stdio.h> int main() {    int data,hun,ten,digit,count=0;    for(data=100;data<1000;data++)       {         hun=data/100;         ten=data/10%10;       //ten=(data-data-hun*100);         digit=data%10;       //if(data==hun*hun*hun+ten*ten*ten*digit*digit*digit)         if(data==hun*hun*hun+ten*ten*ten+digit*digit*digit)           {             count++;             if(count<=2) printf("%d\n",data);           }       }     return 0; }

user: user-0
content: 引用 8 楼 自信男孩的回复:[quote=引用 4 楼 weixin_54530767 的回复:][quote=引用 1 楼 自信男孩的回复:]先求出水仙花，然后对10取余。从低位到高位，最后留出前两位就好了吧 请问可以给一下求出水仙花后的代码吗，谢谢大佬了[/quote] 你先把求水仙花的代码发出来吧，我在你的基础上做一下修改[/quote] #include<stdio.h> int main() { int data,hun,ten,digit,count=0; for(data=100;data<1000;data++) { hun=data/100; ten=(data-data-hun*100); digit=data%10; if(data==hun*hun*hun+ten*ten*ten*digit*digit*digit) printf("%d",data); } return 0; }  然后后面怎么计数输出2个水仙花数我就不会了。

user: user-3
content: while (m != 0)//求m各位数字并求它们立方和             {                 o = m % 10;                 m = m / 10;                 sum = sum + o * o * o;             }                           if (sum == m)//当立方和=本身即输出

user: user-4
content: 直接输出a/10就好了么。

user: user-0
content: 引用 1 楼 自信男孩的回复:先求出水仙花，然后对10取余。从低位到高位，最后留出前两位就好了吧 请问可以给一下求出水仙花后的代码吗，谢谢大佬了

user: user-4
content: 咦？我2楼的写法从前好用啊，为啥现在不好用了？ 哪位大佬释疑？

user: user-4
content: printf("%d\b\n",a); 了解一下？

user: user-1
content: 先求出水仙花，然后对10取余。从低位到高位，最后留出前两位就好了吧
user-0 提问: GDB脚本问题

回复:
user: user-1
content: 对gdb没有或暂时不会用的显示自定义数据及其自定义数据值功能，我都是自己写一小段程序完成对应功能辅助调试的。  不要依赖调试器输出复杂数据结构！而要将复杂数据结构的整个内容在处理它的每一步使用一小段代码按自己很容易理解的格式输出，非常有助于调试！或者可以说是“基础设施”  参考： 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-0
content: gcc内嵌汇编语法？这跟gdb脚本有什么关系？能为我讲解一下吗，我是新手不是很懂

user: user-1
content: https://www.baidu.com/s?wd=gcc%E5%86%85%E5%B5%8C%E6%B1%87%E7%BC%96%E8%AF%AD%E6%B3%95
user-0 提问: 请教原型的概念，谢谢

回复:
user: user-1
content: 第一，我不是大神。 第二，我的启蒙教材也是K&R系语法，而且不是你这个这么经典。我只不过走过弯路在总结教训。我后来观念的改正是零零碎碎的，不是整体读哪本书来的。所以没法推荐教材。

user: user-0
content: 引用 3 楼 forever74 的回复:现代C语言和K&R C的关系，就像汉语普通话和北京腔的关系。  您要全盘照搬啊？那以后...瞧好儿吧您内～ 大神，那我该看哪本书呢？推荐下?

user: user-1
content: 现代C语言和K&R C的关系，就像汉语普通话和北京腔的关系。  您要全盘照搬啊？那以后...瞧好儿吧您内～

user: user-1
content: 看在你读书认真的面子上，建议首先更换信息源/教材，然后学会辩证分析。

user: user-2
content: 第二种没怎么看打过这样定义函数了，这个应该是比较老C语言标准版本支持的吧，现在的不清楚是否支持。第二种和第一种是一样的吧，只是写法不一样而已。  第三种，也不建议这样写，虽然没有定义a的类型，编译器会默认按照int处理。  不同的编译器（新旧）可能编译结果不一样，有些可能编译没问题，有些会报错。  但是和楼主要讨论的似乎没关系。三个函数都是函数定义。
user-0 提问: 请教函数传入float型，为啥返回的值不对？

回复:
user: user-1
content: double f (double a)

user: user-0
content: 引用 8 楼 赵4老师 的回复:[quote=引用 7 楼 oracleperl 的回复:][quote=引用 6 楼 赵4老师 的回复:]double f (double a) 谢谢赵老师，我想请教下，我那样写错在哪里？编译并没报错。[/quote] 编译不报错是因为要兼容旧的语法规定，参数不声明类型，就默认int[/quote] 谢谢赵老师，关于参数不指定类型，默认是int的说法，我查阅了几本书，K&R 《C程序设计语言》英文版《C和指针》，谭浩强老师的《C程序设计》 都没做说明，或许我没看到，是否有“官方文档”或者这基本书籍上有相关说明  另外，如果一个函数 没有指定返回类型，那么默认返回类型是int，这个K&R 《C程序设计语言》里有明确说明  谢谢赵老师

user: user-2
content: 楼主的程序，在g++，gcc下编译均不能通过。提示a没有类型。

user: user-1
content: 引用 7 楼 oracleperl 的回复:[quote=引用 6 楼 赵4老师 的回复:]double f (double a) 谢谢赵老师，我想请教下，我那样写错在哪里？编译并没报错。[/quote] 编译不报错是因为要兼容旧的语法规定，参数不声明类型，就默认int

user: user-0
content: 引用 6 楼 赵4老师 的回复:double f (double a) 谢谢赵老师，我想请教下，我那样写错在哪里？编译并没报错。

user: user-3
content: 你的思路仍然有问题。  比如说，我是说假如 有本家长手册，上面写着：可以吓唬孩子说再不听话就打断他的腿，但是你不能真的打断他的腿。 这句话被孩子看到了，作为正常孩子，难道还去测试一下，故意不听话会不会被亲爹打断腿？  我的意思是，咱学习是为了写正确的代码，没必要急于研究每一种错误的写法为什么错，是怎么错的。 一方面还有大把的算法啊什么的天空等着咱去征服； 另一方面随着学习逐步前进，有些事“等你长大了自然就明白了”。

user: user-0
content: 引用 3 楼 forever74 的回复:稍稍思考一下，猿s和编译器从某个恰当的角度看，是处于对立状态的。 K&R当年的那段描述是在建议编译器应该如何迁就懒惰的猿s，其实那话儿根本就不是写给猿s的，也不该作为猿s偷懒的借口。  你都下决心学C语言了，难道你还承认自己懒惰，偏偏懒得写一个类型名？ 一头合格的C猿，压根不会考虑偷那点小懒。 不是偷懒，是想搞明白为什么。。

user: user-3
content: 稍稍思考一下，猿s和编译器从某个恰当的角度看，是处于对立状态的。 K&R当年的那段描述是在建议编译器应该如何迁就懒惰的猿s，其实那话儿根本就不是写给猿s的，也不该作为猿s偷懒的借口。  你都下决心学C语言了，难道你还承认自己懒惰，偏偏懒得写一个类型名？ 一头合格的C猿，压根不会考虑偷那点小懒。

user: user-3
content: 为你超强的方向感鼓掌。  现代的我们读经典的时候也要辩证，也要批判地继承嘛。  读K&R更多的是感受其中的艺术气息--BTW,翻译过程很难保证这一点，建议原文。 而不是当作教材。

user: user-4
content: make c cc     c.c   -o c c.c: In function ‘f’: c.c:4:8: warning: type of ‘a’ defaults to ‘int’ [-Wimplicit-int]  double f (a)  这是编译过程和结果；make按照C语言的语法编译的，G++不支持楼主的这种方法。通过编译结果可以确定，形参a当成int处理。  结果是result is=1.000000   看到楼主最近在纠结“函数原型”这个名词，看书不建议钻牛角尖，编程还是要注重实践，有些名词，定义不明白，可以先放放，后面的学习和实践中会慢慢解决你之前的疑问，另外，实践也要去指导理论，将两者相结合来学习吧
user-0 提问: 新手求助 我这个程序是编制一个C语言成绩记录簿，每个学生信息包括：学号、姓名、C语言成绩。由于字数限制，程序不完整的地方评论接

回复:
user: user-0
content: 求求各位了，救救宝宝吧

user: user-0
content: }     printf(" 60-79分之间:姓名 学号 C语言\n");     for(p=0;p<k;p++) 	{         printf("%16s %4d %6.2f\n",p2[p]->name,p2[p]->num,p2[p]->c); 	}     printf(" 80-89分之间:姓名 学号 C语言\n");     for(q=0;q<l;q++) 	{         printf("%16s %4d %6.2f\n",p3[q]->name,p3[q]->num,p3[q]->c); 	}     printf("90以上:姓名 学号 C语言\n");     for(r=0;r<m;r++) 	{         printf("%12s %4d %6.2f\n",p4[r]->name,p4[r]->num,p4[r]->c); 	}     fclose(fp);     getch(); } int main() { FILE *fp; if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","wb"))==NULL) { printf("\nopen file error"); getchar(); exit(1); } char ch;     while(1) 	{       menu();// 显示菜单       ch=getch();//选择菜单       if(ch=='0')  		  break;       switch(ch)//判断功能项 	  {       case '1':input();break;       case '2':search();break;       case '3':modiway();break;       case '4':insert();break; 	  case '5':deleteway();break;       case '6':print();break; 	  case '7':count();break; 	  } 	}  	printf("\n\n\n\t\t\t\tWelcome to use,Goodbye!\02!\n"); 	return ; }
user-0 提问: 请教为啥说“函数调用的参数是表达式”？谢谢

回复:
user: user-1
content: 表达式是个含义很广的概念。  说一台全自动的...的洗衣机是个equipment也对吧？

user: user-2
content: 建议楼主确定一下表达式的定义。找一下表达式的定义。  F（10）这里的10按照什么类型，char, unsigned char， int， unsigned int都能表示10这个数，那么它是int，因为默认是按照int处理的。那么这是第一步，第二步还要看函数F的形参，它是什么类型，如果是char，那么如果这个实参是129，那么可能就会被截断。  这就是“把参数传递给函数时也可能进行类型转换”这句话的理解～

user: user-3
content: 比如定义函数void Func(int x)，只接受int类型的变量，但是调用时传入Func(10+0.2)，会将10+0.2的结果（double类型）自动转换成int类型。 这里10+0.2其实就是表达式，所以说“函数调用的参数是表达式”没有问题。  这句话的重点应该是“在把参数传递给函数时也可能进行类型转换”，重点理解这句就对了。

user: user-4
content: 10 你想说立即数吧? 那立即数也是表达式没毛病

user: user-5
content: MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl
user-0 提问: 小白求大佬带

回复:
user: user-1
content: 蹭分，供参考：#include<stdio.h> int main() {     int n,k,i;     int a[100]={0};     scanf("%d %d",&n,&k);     for(i=0;i<n;i++)       scanf("%d",&a[i]);      for(i=0;i<n;i++)       if(a[i]>k) printf("%d ",a[i]);     printf("\n");      return 0; }

user: user-2
content: 引用 1 楼 qzjhjxj 的回复:蹭分，供参考：#include<stdio.h> int main() {     int n,k,i;     int a[100]={0};     scanf("%d %d",&n,&k);     for(i=0;i<n;i++)       scanf("%d",&a[i]);      for(i=0;i<n;i++)       if(a[i]>k) printf("%d ",a[i]);     printf("\n");      return 0; } 如果先确定某个数是多少，那么没必要用用数组了，直接根据输入的数据比较，大于的直接输出。  另外，如果n>100呢，是否需要考虑是否越界呢，所以如果先确定某个数的值，不建议用数组了，用了反而给自己找了麻烦，因为需要确定n是否大于你定义的数组长度。
user-0 提问: C语言编写

回复:
user: user-1
content: struct StudentInfo {     int number; // 学号     char name[20]; // 姓名     char gender; // 性别     int age; // 年龄     int grade; // 年级     int consume; // 年消费     char phone[12]; // 联系电话 }Stu[10]; 结构体数组定义好了，加油！

user: user-0
content: 有没有兄弟能帮我

user: user-0
content: 用C语言写第十题

user: user-2
content: 看题目要求主要用到结构体数组、文件、排序这些知识点，建议自己按模块写代码，遇到出错的地方不会解决再来求助，让别人从头给你写代码，虽然不难，但估计没人愿意写。
user-0 提问: 请教C的函数，什么是“有函数原型”，什么是“没有函数原型”？谢谢

回复:
user: user-1
content: ISO/IEC 9899:2018, p28.： 6.2.1 Scopes of identifiers A function prototype is a declaration of a function that declares the types of its parameters.

user: user-1
content: 引用 6 楼 oracleperl 的回复:[quote=引用 3 楼 均陵鼠侠 的回复:] 因为函数有原型声明，所以在调用时，编译器可以知道传入的参数应该如何转换。  谢谢大神，请教下：  如下称作没有有函数原型？ float f (a, b) {     return a * b; }  float f (a, b) int a,b; {     return a * b; }  如下称作有函数原型？ float f (int a, int b) {     return a * b; }  那么 float f (a, b) int a,b; {     return a * b; } 和 float f (int a, int b) {     return a * b; } 有区别吗？不都是定义了形参的类型为int了吗？ [/quote]  这方面的问题还是得紧扣定义。 “带有参数类型声明的函数声明叫做函数原型（prototype）” 不管是有函数体的函数声明，还是无函数体的函数声明，只要声明了参数的类型，就是函数原型。

user: user-0
content: 引用 3 楼 均陵鼠侠 的回复:因为函数有原型声明，所以在调用时，编译器可以知道传入的参数应该如何转换。  谢谢大神，请教下：  如下称作没有有函数原型？ float f (a, b) {     return a * b; }  float f (a, b) int a,b; {     return a * b; }  如下称作有函数原型？ float f (int a, int b) {     return a * b; }  那么 float f (a, b) int a,b; {     return a * b; } 和 float f (int a, int b) {     return a * b; } 有区别吗？不都是定义了形参的类型为int了吗？

user: user-1
content: If the expression that denotes the called function has a type that does not include a prototype, the integer promotions are performed on each argument, and arguments that have type float are promoted to double. These are called the default argument promotions.

user: user-1
content: 在C语言标准化之前，函数的声明是这样的，即使它实际上带有参数：  # include <stdio.h>  float f  ();            //K&R 的传统函数声明  int main () {     printf ("%.2f\n", f (2, 3));    //2和3按照它们本来的类型int传入，而不是转换为float传入，所以计算结果是错误的。     return 0; }  float f (a, b) float a, b; {     return a * b; }   显然，因为传统的函数声明里没有参数声明，函数调用时不知道参数如何传进去。只能按照默认，char和short转换为int，float转换为double。 标准化的C语言引入了函数原型，即，要求函数的声明中必须有参数类型的说明： # include <stdio.h>  float f  (float, float);            //标准化之后的原型声明，带有参数类型。  int main () {     printf ("%.2f\n", f (2, 3));           //2和3从int转换为float之后传入，所以计算结果是正确的。     return 0; }  float f (float a, float b)                 //标准化之后的函数定义 {     return a * b; }   因为函数有原型声明，所以在调用时，编译器可以知道传入的参数应该如何转换。

user: user-2
content: 倒是没听说过“没有函数原型”的描述，没这个词吧。

user: user-2
content: 函数原型可以理解为函数定义，函数定义时会定义参数的类型，char 和short转int，是因为int的范围比char short的范围大，有时候会自动转换；  没有函数原型，那就是没有定义了。
user-0 提问: 为啥switch语句输入什么都是执行default

回复:
user: user-1

user: user-0
content: 引用 6 楼 qzjhjxj的回复: 第二个在发帖之前改过了，不过手机上还没改，不过第一个确实没发现，vc也没报错，现在改过来程序对了，万分感谢

user: user-2
content: void keyDown() {     int userkey;     struct student tempData;     //scanf("%d,&userkey");     scanf("%d", &userkey);     if (userkey < 0 || userkey > 5) {         return;     }     userkey += '0';      switch(userkey)     {         case '0':             printf("\t\t0.【退出系统】\n");             system("pause");             exit(0);         case '1':             printf("\t\t1.【插入信息】\n");             printf("请输入学生的学号，姓名，项目，奖励。");             scanf("%d%s%s%d",tempData.num,tempData.name,tempData.preject,tempData.reward);             struct Node* list;   insertNodeByHead(list,tempData);             saveinfotofile("student.txt",list);             break;         case '2':             printf("\t\t2.【浏览信息】\n");             printlist(list);             break;         case '3':             printf("\t\t3.【删除信息】\n");             printf("请输入要删除的学生的姓名:");             scanf("%s",tempData.name);             deleteNodeByAppoinName(list,tempData.name);             saveinfotofile("student.txt",list);             break;         case '4':             printf("\t\t4.【修改信息】\n");             printf("请输入要修改学生的学号:");             scanf("%s",tempData.num);             if(searchNodeByAppoinNum(list,tempData.num)==NULL)                 printf("未找到相关信息");              else             {                 struct Node* curNode=searchNodeByAppoinNum(list,tempData.num);                 printf("请输入新的学生奖励信息：学号，姓名，项目，奖励");                 scanf("%d%s%s%d",curNode->data.num,curNode->data.name,curNode->data.preject,curNode->data.reward);                 saveinfotofile("student.txt",list);             }             break;         case '5':             printf("\t\t5.【查找信息】\n");             printf("请输入要查找学生的学号：");             scanf("%s",tempData.num);             if(searchNodeByAppoinNum(list,tempData.num)==NULL)                 printf("未找到相关信息");             else                 printNode(searchNodeByAppoinNum(list,tempData.num));         default :             printf("输入错误请重新输入\n");     } }  供参考～

user: user-1
content: 计算机中，‘0’！=0，一个是字符，一个是数字，不同的ascii值。

user: user-3
content: 把每一句case语句后面'0'的单引号去掉。case 0:

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

user: user-0
content: 引用 1 楼 chxchxkkk的回复:把每一句case语句后面'0'的单引号去掉。case 0: 试过了，没用，
user-0 提问: 请教下，powf()和powl() 函数有啥用？谢谢

回复:
user: user-1
content: 处理的范围不一样，可以找一下这些函数的原型，可以看到函数的形参和返回值类型；         #include <math.h>         double pow(double x, double y);        float powf(float x, float y);        long double powl(long double x, long double y);

user: user-2
content: 对于c++标准来说计算精度不一样，pow针对double,powf 参数是long double 在vs下 double = long double 都是64位 在gcc 64位下long double 128位 c++标准里面long double 是80位

user: user-3
content: 遗留下来的函数吧，原来C是没有函数重载的，并不支持同名不同参的函数，所以很多旧的C语言代码就大量使用这种把参数类型加到函数名的方式对函数归类，比如你给的这两个函数，powf中f代指pow float，powl代指 pow long float（double）
user-0 提问: c语言问题

回复:
user: user-0
content: 引用 3 楼 弓人水的回复:1、c=getchar()          // getchar() 得到 1，赋值给c后c = '1' 2、getchar()!='#'      // getchar() 得到 2，不等于'#'条件成立，进入循环体 3、putchar(c)           // 控制台打印c：1 4、进入第二次循环，赋值语句是for的第三个表达式 5、c=getchar()        // getchar() 得到 3，赋值给c后c = '3' 6、getchar()!='#'      // getchar() 得到 4，不等于'#'条件成立，进入循环体 7、putchar(c)           // 控制台打印c：3 8、进入第三次循环，赋值语句是for的第三个表达式 9、c=getchar()        // getchar() 得到 5，赋值给c后c = '5' 10、getchar()!='#'      // getchar() 得到 #，不等于'#'条件不成立了，退出循环体 11、退出main，控制台打印结果：13 感谢感谢

user: user-1
content: 1、c=getchar()          // getchar() 得到 1，赋值给c后c = '1' 2、getchar()!='#'      // getchar() 得到 2，不等于'#'条件成立，进入循环体 3、putchar(c)           // 控制台打印c：1 4、进入第二次循环，赋值语句是for的第三个表达式 5、c=getchar()        // getchar() 得到 3，赋值给c后c = '3' 6、getchar()!='#'      // getchar() 得到 4，不等于'#'条件成立，进入循环体 7、putchar(c)           // 控制台打印c：3 8、进入第三次循环，赋值语句是for的第三个表达式 9、c=getchar()        // getchar() 得到 5，赋值给c后c = '5' 10、getchar()!='#'      // getchar() 得到 #，不等于'#'条件不成立了，退出循环体 11、退出main，控制台打印结果：13

user: user-2
content: 第一个是'1'，赋值给c，判断又有一个getchar();因此是'2'  != '#'，输出'1'，c = getchar();继续是'3',赋值给c；判断'4' != '#'  输出'3'，'5'赋值给c，'#' != '#'为假，退出，综上所述，输出应该是'1' '3'，即13

user: user-3
content: for语句3个表达式第一个是赋初值第二个是判断第三个是循环执行
user-0 提问: 哪位大神帮我看一下？

回复:
user: user-1
content: fflush(stdin);

user: user-2

user: user-1
content: 我5楼说的不算哈，当时貌似走神中。 咋没人直我的罗锅捏？

user: user-3
content: //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。

user: user-3
content: 借鉴论坛赵老师的经验总结： 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);

user: user-0
content: 引用 1 楼 forever74 的回复:第一次它得到的是前一个scanf后面剩下在缓冲区里的回车。请问怎么解决这个问题啊，我是个新手

user: user-1
content: 第一次它得到的是前一个scanf后面剩下在缓冲区里的回车。
user-0 提问: 求助

回复:
user: user-1
content: 严格说p=a[0]是语法错误的，如果严格进行语法检查的话: 赋值语句两边的类型表达式应相等或相容。p=a是可证相等的：a的类型=int [m][n]=int([m])[n]，由于一维数组[m]可视为单重指针*，故上式=int(*)[n]=p的类型。而p=a[0]的正当写法应为p=&a[0]，两边的类型才是等价的，关于类型解析和等价性证明参见《C++程序设计精要教程》。要入C语言之门，必须掌握类型表达式的解析、运算和等价性证明，80%的错误都与此有关。此外，大部分编译器不支持多维动态数组： 直接用m，n二维动态是不允许的，只允许第一维动态。

user: user-2
content: 坚持你的理解，不能那样赋值。

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

user: user-3
content: 理解和讨论之前，请先学会如何观察！ 仅供参考：//char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]
user-0 提问: c语言初学者有个关于地址的小小疑问

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

user: user-2
content: 说不能的，你们得好好思考一下了。 int a = 0x65666768, b, c; b = * (char *) & a; c = *( (char *) & a + 1); printf ("%c,%c\n", b, c);

user: user-3
content: 不行，程序语法不正确。语法正确与否，重点在于类型解析，参见类型解析大法《C++程序设计精要教程》。先看int *p=2001; *p=2; 这是语法正确的。从类型运算的角度看，*p相当于*(int*)因p的类型为int*，而*2001相当于*（int）故是错的。解决办法是引入强制类型转换: *(int *)2001=2; 这样就无语法错误了，但运行不一定成功，要看地址是否在你的程序内存范围内，否则就可能被操作系统的页面保护机制干掉了。如果不会类型解析，永远难入C语言之门。

user: user-3
content: 不行，程序语法不正确。语法正确与否，重点在于类型解析，参见类型解析大法《C++程序设计精要教程》。先看int *p=2001; *p=2; 这是语法正确的。从类型运算的角度看，*p相当于*(int*)因p的类型为int*，而*2001相当于*（int）故是错的。解决办法是引入强制类型转换: *(int *)2001=2; 这样就无语法错误了，但运行不一定成功，要看地址是否在你的程序内存范围内，否则就可能被操作系统的页面保护机制干掉了。如果不会类型解析，永远难入C语言之门。

user: user-3
content: 引用 楼主 TOTOBEFREE的回复:假如一个int型的变量占四个字节，比如首地址是2000，那下一个变量的首地址就是2004了，而对它取地址取到的是首地址也就是2000，如果我把一个整数型变量赋值为2001，或者2002反正就是还是在第一个变量的储存单元，这样能不能访问到那个变量呢？ 就是*2001能不能访问的首地址是2000的变量 这样的语句肯定不行，int *p=2001; *p=2; 这样的赋值是可以的。让我们从类型表达式的角度看：*p的类型运算就是*（int *），其中int * 就是p的类型。而*2001从类型表达式的角度看为*(int)，如此你便知道为何不可以了。强制类型转换可以达到这一目的: *(int *)2001=2; 这样的语句就没有语法错误了，但执行时可能有问题，关键在于这个地址是否在你的程序内存范围之内。对于你的运行环境如unix和windows来说，操作系统是有内存页面保护功能的，如地址在另一个程序内存范围之内，你的程序进程就可能被杀死。一个程序语法正确与否关键在于类型解析，如何分析类型参考类型解析大法巜C++程序设计精要教程》。

user: user-1
content: 其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

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

user: user-4
content: 应该和硬件有关系。貌似有点硬件必须要求字节对齐，也就是说不能给不对齐的地址赋值，如：2000可以，但2001非法。

user: user-5
content: 不能 说了首地址就要首地址，而且另外还有对齐问题。
user-0 提问: 有大佬能分行解释一下这个单词统计的代码吗？for循环里看不懂呜呜

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。

user: user-2
content: 楼主的标注修改如下：#include<stdio.h> #include<string.h>  int main(int argc, char* argv[]) {     char m[100],word[9];     int i,j,ans,counts=0,flag;      gets(m);      //字符串     gets(word);   //需查找的单词      for(i=0;i<strlen(m);i++){  //循环的范围是一个字符串的长度          for(j=i;j<strlen(m);j++){             flag=j;              //单词位置下标             if(m[j]==' ') break;//遇到空格，一个单词的结束位置                                 //跳出for(j=i;j<strlen(m);j++）循环             //if(flag<j)             //    flag=strlen(m);         }         ans=1;                   //单词对比置位         for(j=i;j<flag;j++){     //i是单词开始位置，flag为单词结束位置             if(m[j]!=word[j-i]){ //将m[j]开始的单词与word[j-i]的单词作比较，j++ <->j-i                ans=0;            //如果不同，则ans置0                break;            //跳出循环             }         }         if(strlen(word) != flag-i) ans=0;//判断m[]字符串中出现如 abc ，而word[]=abcd，上一步判断是能通过的。         if(ans==1) counts++;  //以上条件满足，计数加1         i=flag;            //将一个单词的结尾位置给i，直接进入下一个单词的分析。     }     printf("%s %d",word,counts);      return 0; }  指针的写法，按题目用函数，如下供参考：#include <stdio.h>  int count_SubStr(char *src,char *sub);  int main(int argc, char* argv[]) {     char *src = new char[100],*sub = new char[10];     int c;      gets(src);     gets(sub);      c = count_SubStr(src,sub);      printf("%s  %d\n",sub,c);      return 0; }  int count_SubStr(char *src,char *sub) {     char *p,*pos,*t;     int  c=0,flag,charlen=strlen(sub);      p=src;     while(*p != '\0')     {          flag=0;          while(*p != ' ' && *p != '\0'){               p++;               flag++;          }          if(charlen == flag){               t = p;               while(flag--) t--;               flag = 0;               pos = sub;               while(*t == *pos  && *pos != '\0'){t++;pos++;flag++;}               if(charlen == flag) c++;          }          p++;     }     return c; }

user: user-0
content: 引用 1 楼 ⌬⌬⌬⌬⌬的回复:标题 单词统计  描述 输入字符串string[N]（N≤100），各个单词以空格隔开，单词长度小于等于8，输入单词word[M]（M≤8），在string中查找出相同的单词并统计该单词出现的次数信息，输出单词和出现次数的信息， 数据之间空一格空格。主函数输入字符串和待统计单词，编写函数count()实现统计和信息输出。  时间限制 1	 内存限制 10000	 类别 1  输入说明 输入一行字符以空格隔开各个单词，输入要统计的单词。  输出说明 格式输出：输出单词及其出现的次数信息，数据之间空一格。  输入样例 dog cat dog dog the abc dog hahe dog  输出样例 dog 4  提示 采用重循环结构实现计算过程，输出数据之间空一格。 这是题目以及测试数据，拜托了谢谢大佬！

user: user-0
content: 标题 单词统计  描述 输入字符串string[N]（N≤100），各个单词以空格隔开，单词长度小于等于8，输入单词word[M]（M≤8），在string中查找出相同的单词并统计该单词出现的次数信息，输出单词和出现次数的信息， 数据之间空一格空格。主函数输入字符串和待统计单词，编写函数count()实现统计和信息输出。  时间限制 1	 内存限制 10000	 类别 1  输入说明 输入一行字符以空格隔开各个单词，输入要统计的单词。  输出说明 格式输出：输出单词及其出现的次数信息，数据之间空一格。  输入样例 dog cat dog dog the abc dog hahe dog  输出样例 dog 4  提示 采用重循环结构实现计算过程，输出数据之间空一格。
user-0 提问: 有无符号强转换问题

回复:
user: user-1
content: dev 也是0

user: user-0
content: 引用 16 楼 真相重于对错的回复:jsrun.net 两边输出不一样，这应该是编译器问题吧

user: user-1
content: 引用 14 楼 我曾是最年轻的男孩 的回复:[quote=引用 10 楼 真相重于对错的回复:] 你这个网址发我看看[/quote] 不仅是那个网站，你用vs也一样是0

user: user-1
content: jsrun.net

user: user-2
content: 依我看，不看对应汇编指令，永远无法彻底弄懂。

user: user-0
content: 引用 10 楼 真相重于对错的回复: 你这个网址发我看看

user: user-0
content: 这是编译环境问题吗

user: user-3
content: 就算编译器马马虎虎不提这个，运算符运算之前强行提升级别较低的运算数不也是常规操作么？

user: user-3
content: 这句话在我的VS2017上产生一个error

user: user-1

user: user-1
content: printf("%u\n",(  char )~5==4294967290) 这句话明明输出0，不是1 (char)~5==4294967290 这是一个比较表达式，结果是false ，打印出来时0

user: user-0
content: 引用 5 楼 forever74的回复:对头，我就是这个意思。 printf("%u\n",(  char )~5==4294967290);//这里输出1，不是已经强转换为char了吗，为什么还相等，这里已经发生了扩展了？

user: user-0
content: 引用 5 楼 forever74的回复:对头，我就是这个意思。 不是强转换为char类型了吗

user: user-0
content: 引用 5 楼 forever74的回复:对头，我就是这个意思。 可是，这里为什么就已经相等了 printf("%u\n",(  char )~5==4294967290);//输出1

user: user-3
content: 对头，我就是这个意思。

user: user-0
content: 引用 3 楼 forever74的回复:所以， 第一步求值，像楼主注释里写的那样。 第二步入栈扩展（到32位的整数倍），无符号的前面加0，有符号的前面加的所有位都复制符号位。 第三步按照格式符的要求对接收到的扩展后内容进行解释，输出。 所以第二步如果是个有符号的负数，前面扩展的位置全部位都是1？

user: user-3
content: 所以， 第一步求值，像楼主注释里写的那样。 第二步入栈扩展（到32位的整数倍），无符号的前面加0，有符号的前面加的所有位都复制符号位。 第三步按照格式符的要求对接收到的扩展后内容进行解释，输出。

user: user-4
content: 是printf里面的格式字符惹得祸。第一个250好理解。用unsigned char 强制类型转换后11111010就是250，不需要再看补码，因为就是无符号类型。 第二个是%u的原因，换成%d就是-6了。同二楼。

user: user-3
content: 这个问题不是强制转换出了问题，而是当你把那些单字节当作实参送给printf的时候，编译器对它进行了扩展（变得更长），理由很多，我没细看过。

user: user-3
content: 楼主你关注的点已经歪了，你企图用一个错误的方式验证一开始的问题，然后在错误本身的引领下越走越远。 回来吧，不要忘了初心。
user-0 提问: 各位大佬请问:之前不小心把vs2019的发生生成错误...

回复:
user: user-1
content: 重新开个项目呗

user: user-0
content: 引用 6 楼 赵4老师 的回复:感谢大佬

user: user-2

user: user-0
content: 引用 1 楼 自信男孩 的回复:vs不支持scanf吧，是不是应该用scanf_s呢？！另外去掉scanf中的\n是支持的,只要在文件开头加上一个 #define _CRT_SECURE_NO_DEPRECATE

user: user-3
content: 我比较好奇为啥要把这个东西找回来？

user: user-4
content: vs2019号称“宇宙第一IDE”，但编写纯C不一定是最合适的。还不如用gcc，tiny-c。

user: user-5
content: vs不支持scanf吧，是不是应该用scanf_s呢？！另外去掉scanf中的\n
user-0 提问: c语言编程新手问题，第七章”基本类型“习题，麻烦各位大佬看看

回复:
user: user-1
content: 嗯，你把非法输入引起的异常拿来说事儿那就过分了。 请输入正常数据。

user: user-0
content: 引用 2 楼 user-2 的回复:供参考：int main() {     long long m=1,n=1,product;      for(;m>0;){             //需另设一变量，退出循环的条件         printf("Enter a positive integer:");         scanf("%11d",&m);          product=1;          //这个值在这里初始化         for(n=m;n>=1;n--){             product *= n;         }         printf("Factorial:%11d\n",product);     }      return 0; } 我用你的程序试了一下，循环的次数多了之后，会出现正文中图四的情况。而且还会出现下图，23可以算阶乘，22却不可以。  我把程序改成下图，循环的次数多了之后，也是会出现图四的情况。  请问怎么回事呢？

user: user-2
content: 供参考：int main() {     long long m=1,n=1,product;      for(;m>0;){             //需另设一变量，退出循环的条件         printf("Enter a positive integer:");         scanf("%11d",&m);          product=1;          //这个值在这里初始化         for(n=m;n>=1;n--){             product *= n;         }         printf("Factorial:%11d\n",product);     }      return 0; }

user: user-1
content: 重新算之前你的product没有重新赋值啊。
user-0 提问: 救救孩子吧，这c语言题目，使用vs2013

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：太简单了+0结帖率 = 懒得答[face]monkey2:019.png[/face]

user: user-1
content: 太简单了+0结帖率 = 懒得答
user-0 提问: C语言   成绩录入

回复:
user: user-0
content: 已经写完了，谢谢大家

user: user-1
content: 这样的题用结构体数组或链表都可以做，最好自己按模块写，出错的地方再让大家纠错。

user: user-2
content: 用结构体方便点吧
user-0 提问: c中指向指针的指针的问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:把 printf(“%c”, *p); 改成 printf(“%c”, (*p==0?c:*p)); 因为*p=0不是一个可以显示的字符，所以当*p==0是就打印c变量，因为c变量的值就是‘!’ 不是这个问题，是代码的逻辑上有问题，已经自己解决了，不过还是多谢了

user: user-1
content: 把 printf(“%c”, *p); 改成 printf(“%c”, (*p==0?c:*p)); 因为*p=0不是一个可以显示的字符，所以当*p==0是就打印c变量，因为c变量的值就是‘!’