Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 老师布置的题目好难。

回复:
user: user-1
content: 取余

user: user-2
content: 不难好吧，而且我觉得难度还偏低了。 清华大学大一的作业才叫难，我看了题目以后感觉我全职一年都做不完。

user: user-3
content: 读字符，这样就很好解决了

user: user-4
content: #include <stdio.h> int main() { 	int a[5],num,k,i=0; 	printf("请输入一个不多于五位的正整数:"); 	scanf("%d",&num); 	if(num<=0) 		printf("请输入一个正整数"); 	while(num>0) { 		k=num%10; 		a[i]=k; 		++i; 		num=num/10; 	} 	if(i>=6) 		printf("请输入一个不多于五位的正整数!"); 	else { 		printf("这是一个%d位数;\n",i); 		printf("逆序打印为:"); 		for(int j=0; j<=(i-1); j++) { 			printf(" %d",a[j]); 		} 	} 	return 0; }

user: user-4
content: 百度都有的， 直接百度吧

user: user-0
content: 引用 楼主 m0_46505358的回复:从键盘读入一个不多于5位的正整数，求它是几位数，逆序打印出各位数字。 大佬能用c语言帮我编程一下吗？
user-0 提问: C语言

回复:
user: user-1
content: int stat[26] = {0}; while ( .... ) {    ch = ......;    if ( ch >='a' && ch <='z' )        stat[ch-'a']++; }  for ( int i=0;i<26; i++ )    printf("%c:%d ", i+'a', stat[i]);

user: user-0
content: 我用数组每个对应英文字母，然后输入一串英文字符，如果有重复那就数组对应某个加一，我现在解决不了的是这些26个数组如何统计出一个具体的数而不是cmd中输出26个数字字符

user: user-2
content: 至少你需要一个数组，来储存字母的个数；然后需要遍历文件或字符串；
user-0 提问: 向大神求助，方法不限，只看思路和结果

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 代码还是比较简单的，思路就是dfs，就是一个排列组合 #include<bits/stdc++.h> using namespace std; int n,r; bool vis[30]; int a[30]; void pr(){ 	for(int i=1;i<=r;i++){ 		cout<<a[i]; 		if(i==4){ 			cout<<"-"; 		} 	} 	cout<<"=2016"<<endl; } void dfs(int x,int num){ 	if(num>r){ 		if(a[1]*1000+a[2]*100+a[3]*10+a[4]-a[5]*1000-a[6]*100-a[7]*10-a[8]==2016){ 			pr(); 		}  	} 	else{ 		for(int i=1;i<=n;i++){ 			if(!vis[i]){ 				vis[i]=1; 				a[x]=i; 				dfs(x+1,num+1); 				vis[i]=0; 			} 		} 	} } int main(){ 	scanf("%d%d",&n,&r); 	dfs(1,1); 	return 0; } 输入 9 8 结果为 9 8 4613-2597=2016 5714-3698=2016 5812-3796=2016 7314-5298=2016 7412-5396=2016 8513-6497=2016

user: user-2
content: 直接dfs就行……

user: user-3
content: 这不是刚有人问过吗？思路就像LS说的 lz参考以下帖子吧 https://bbs.csdn.net/topics/396055683

user: user-4
content: 最简单的就是因为都是4位数，所以ABCD最小都是3016，EFHH最小是1000，直接循环遍历出来满足条件的就行了。
user-0 提问: C语言关于链表插入的问题

回复:
user: user-1
content: 首先teatdown不对 while (head != NULL) {     node_t *p = head->next;     free(head); //free后head->next就不存在了     head = p; //所以用p临时变量 } add方法实现 void add(node_t **head, char *str, int length) {     node_t *nodeadd = (node_t *)malloc(sizeof(node_t));     strcpy(nodeadd->str, str);     nodeadd->length = length;     nodeadd->next = *head;     *head = nodeadd; }
user-0 提问: C语言用二分法求方程根。fabs(fx0)<= 1e-5和fabs(fx0)>= 1e-5有什么区别，都是认为fx0接近0所以认为是0吗？

回复:
user: user-0
content: 哦哦，我知道了，如果是fabs(fx0)>=1e-5，fx0的绝对值没有>=1e-5之前要一直循环，输入-10,10，只执行2次；而如果是fabs(fx0)<=1e-5，fx0的绝对值没有<=1e-5之前要一直循环，但输入-10,10，一开始就不满足，只执行1次，所以前者x0=2，后者x0=0，前者是对的。

user: user-1
content: while(fabs(fx0)<=1e-5); 是执行条件 当>=时一直执行，所以结果是对的,要结果无限接近0，没接近之前要一直循环，<=这个值一开始就返回false 就没有一直循环，只计算一次，怎么会对呢

user: user-0
content: 第一张图代码:  #include<stdio.h> #include<math.h>  int main() { 	double x0,x1,x2,fx0,fx1,fx2; 	 	do 	{ 		printf("输入x1,x2的值:"); 		scanf("%lf,%lf",&x1,&x2); 		fx1=2*x1*x1*x1-4*x1*x1+3*x1-6; 		fx2=2*x2*x2*x2-4*x2*x2+3*x2-6; 	}while(fx1*fx2>0); 	 	do 	{ 		x0=(x1+x2)/2; 		fx0=2*x0*x0*x0-4*x0*x0+3*x0-6; 		if(fx0*fx1<0) 		{ 			x2=x0; 			fx2=fx0; 		} 		else 		{ 			x1=x0; 			fx1=fx0; 		} 	}while(fabs(fx0)>=1e-5); 	 	printf("x=%5.2f\n",x0); 	 	return 0; }   第二张图代码:  #include<stdio.h> #include<math.h>  int main() { 	double x0,x1,x2,fx0,fx1,fx2; 	 	do 	{ 		printf("输入x1,x2的值:"); 		scanf("%lf,%lf",&x1,&x2); 		fx1=2*x1*x1*x1-4*x1*x1+3*x1-6; 		fx2=2*x2*x2*x2-4*x2*x2+3*x2-6; 	}while(fx1*fx2>0); 	 	do 	{ 		x0=(x1+x2)/2; 		fx0=2*x0*x0*x0-4*x0*x0+3*x0-6; 		if(fx0*fx1<0) 		{ 			x2=x0; 			fx2=fx0; 		} 		else 		{ 			x1=x0; 			fx1=fx0; 		} 	}while(fabs(fx0)<=1e-5); 	 	printf("x=%5.2f\n",x0); 	 	return 0; }
user-0 提问: 算法分析求助

回复:
user: user-1
content: t=0 print("满足条件的5位数") for i in range(10000,90001,10000):     for j in range(0,901,100):         num=9095+i+j         if(num%57==0 and num%67==0):             t=t+1             print(num) print(t)

user: user-2
content: int main(){cout<<"sb";return 0;}

user: user-3
content: #include "stdio.h"  int main() { int cout=0; int i; for(i=10000;i<99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout); return 0; }

user: user-0
content: 改了一下count 瞬间第九行报错了。。。

user: user-0
content: 引用 5 楼 user-3的回复:int main() { int cout=0; int i; for(i=10000;i<99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout); return 0; } 十一行这一块有问题啊 我真的个小白 还有劳帮助

user: user-0
content: 十一行printf未声明

user: user-3
content: int main() { int cout=0; int i; for(i=10000;i<99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout); return 0; }

user: user-0
content: 引用 3 楼 user-3的回复:[quote=引用 2 楼 Eminem. 的回复:] [quote=引用 1 楼 user-3的回复:]int cout=0; for(int i=10000;i<99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout); 真的太感谢了 解决了燃眉之急啊[/quote] for(int i=10000;i<=99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout);[/quote] 少打了个=号,解决了就结贴[/quote] 但是还是无法运行 报错 就是第二行

user: user-3
content: 引用 2 楼 Eminem. 的回复:[quote=引用 1 楼 user-3的回复:]int cout=0; for(int i=10000;i<99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout); 真的太感谢了 解决了燃眉之急啊[/quote] for(int i=10000;i<=99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout);[/quote] 少打了个=号,解决了就结贴

user: user-0
content: 引用 1 楼 user-3的回复:int cout=0; for(int i=10000;i<99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout); 真的太感谢了 解决了燃眉之急啊

user: user-3
content: int cout=0; for(int i=10000;i<99999;i++) if(i%57==0&&i%67==0) { cout++; printf("%d\n",i); } printf("cout is %d",cout);
user-0 提问: 数据结构，结果不对，大佬帮忙解决一下

回复:
user: user-1
content: #include <stdio.h>  #define OK 1 #define ERROR 0  typedef int Status; //三元组的类型先定义为float,可以随时变换成别的类型 typedef float ElemType;  typedef struct {     ElemType e[3]; }Triplet;  Status initTriplet(Triplet &T,ElemType V0,ElemType V1,ElemType V2) {     T.e[0]=V0;     T.e[1]=V1;     T.e[2]=V2;     return OK; }  Status destroyTriplet(Triplet &T) {     return OK; }  Status getElem(Triplet T,int i,ElemType &e) {     if(i<1||i>3)         return ERROR;     else         e=T.e[i-1];     //return e;     return OK;    //这里应该是是返回OK吧 }  Status putElem(Triplet &T,int i,ElemType e)// {     if(i<1||i>3)         return ERROR;     else         T.e[i-1]=e;     //return e;     return OK; }  Status isAscending(Triplet T) {     return (T.e[0]<=T.e[1])&&(T.e[1]<=T.e[2]); }  Status isDescending(Triplet T) {     return (T.e[0]>=T.e[1])&&(T.e[1]>=T.e[2]); }  ElemType getMax(Triplet T,ElemType &e) {     if(T.e[0]>T.e[1])         e =T.e[0];     else         e = T.e[1];     if(T.e[2]>e)         e = T.e[2];      return e; }  ElemType getMin(Triplet T,ElemType &e) {     if(T.e[0]<T.e[1])         e = T.e[0];     else         e=T.e[1];      if(T.e[2]<e)         e = T.e[2];     return e; }  int main() {     Triplet T;     Status flag;     ElemType v0,v1,v2,e;     printf("请进入三元组的三个值v0,v1,v2:\n");     scanf("%f,%f,%f",&v0,&v1,&v2);     flag = initTriplet(T,v0,v1,v2);     printf("调用初始化函数后,flag=%d,T的三个值为%4.2f,%4.2f,%4.2f\n",flag,T.e[0],T.e[1],T.e[2]);     if(isAscending(T))         printf("该三元组元素为升序\n");     if(isDescending(T))         printf("该三元组元素为降序\n");     printf("该三元组元素中的最大值为:%4.2f,最小值为:%4.2f\n",getMax(T,e),getMin(T,e));     return OK; }     供参考～  注意输入时需要用逗号隔开。

user: user-0
content: 谢谢，忘记输逗号了
user-0 提问: C语言编程作业题求教各位大佬！！拜托了！

回复:
user: user-1
content: 引用 2 楼 m0_46509725 的回复:[quote=引用 1 楼 三号室的回复:]这个是参考程序，通过我的注释即可理解该程序  #include<stdio.h> //通过if计算的函数 double byIf(double tmp){     double ans = 0;     if(tmp>=5000){         ans += (tmp-5000)*0.15;         tmp = 5000;     }     if(tmp>=4000){         ans += (tmp-4000)*0.1;         tmp=4000;     }     if(tmp>=2000){         ans += (tmp-2000)*0.05;         tmp = 2000;     }     return ans; } //通过switch计算的函数 double bySwitch(double tmp){     double ans = 0;     switch(int(tmp/1000)){     default:     case 9:     case 8:     case 7:     case 6:     case 5:         ans += (tmp-5000)*0.15;         tmp = 5000;     case 4:         ans += (tmp-4000)*0.1;         tmp=4000;     case 3:     case 2:         ans += (tmp-2000)*0.05;         tmp = 2000;     case 1:     case 0:break;     }     return ans; }  int main(){     double tmp;     printf("请输入工资：\n");     scanf("%lf",&tmp);     printf("税收为：\n");     printf("%.5lf (if计算)\n",byIf(tmp));     printf("%.5lf (switch计算)\n",bySwitch(tmp));     return 0; }   谢谢！我去编译调试一下看看！[/quote] 记得结贴嗷

user: user-0
content: 引用 1 楼 三号室的回复:这个是参考程序，通过我的注释即可理解该程序  #include<stdio.h> //通过if计算的函数 double byIf(double tmp){     double ans = 0;     if(tmp>=5000){         ans += (tmp-5000)*0.15;         tmp = 5000;     }     if(tmp>=4000){         ans += (tmp-4000)*0.1;         tmp=4000;     }     if(tmp>=2000){         ans += (tmp-2000)*0.05;         tmp = 2000;     }     return ans; } //通过switch计算的函数 double bySwitch(double tmp){     double ans = 0;     switch(int(tmp/1000)){     default:     case 9:     case 8:     case 7:     case 6:     case 5:         ans += (tmp-5000)*0.15;         tmp = 5000;     case 4:         ans += (tmp-4000)*0.1;         tmp=4000;     case 3:     case 2:         ans += (tmp-2000)*0.05;         tmp = 2000;     case 1:     case 0:break;     }     return ans; }  int main(){     double tmp;     printf("请输入工资：\n");     scanf("%lf",&tmp);     printf("税收为：\n");     printf("%.5lf (if计算)\n",byIf(tmp));     printf("%.5lf (switch计算)\n",bySwitch(tmp));     return 0; }   谢谢！我去编译调试一下看看！

user: user-1
content: 这个是参考程序，通过我的注释即可理解该程序  #include<stdio.h> //通过if计算的函数 double byIf(double tmp){     double ans = 0;     if(tmp>=5000){         ans += (tmp-5000)*0.15;         tmp = 5000;     }     if(tmp>=4000){         ans += (tmp-4000)*0.1;         tmp=4000;     }     if(tmp>=2000){         ans += (tmp-2000)*0.05;         tmp = 2000;     }     return ans; } //通过switch计算的函数 double bySwitch(double tmp){     double ans = 0;     switch(int(tmp/1000)){     default:     case 9:     case 8:     case 7:     case 6:     case 5:         ans += (tmp-5000)*0.15;         tmp = 5000;     case 4:         ans += (tmp-4000)*0.1;         tmp=4000;     case 3:     case 2:         ans += (tmp-2000)*0.05;         tmp = 2000;     case 1:     case 0:break;     }     return ans; }  int main(){     double tmp;     printf("请输入工资：\n");     scanf("%lf",&tmp);     printf("税收为：\n");     printf("%.5lf (if计算)\n",byIf(tmp));     printf("%.5lf (switch计算)\n",bySwitch(tmp));     return 0; }
user-0 提问: 大佬求解

回复:
user: user-1
content: 先自己写写吧，有问题再提出来~

user: user-0
content: 蟹蟹！

user: user-2
content: 以下是参考程序，希望能得到你的认可  typedef struct LNode{     ElemType data;     struct LNode *next; }LNode,*LinkList;  typedef void Status;  Status GetElem_L(LinkList L,int i,ElemType *e){     if(L==NULL){         *e=NULL;         return;     }     while(i!=0&&L!=NULL){         L = L->next;         --i;     }     *e = L; }
user-0 提问: 我想问一下我生成的随机数为何写不进文本？在线求！谢谢各位大佬了

回复:
user: user-1
content: #include <stdio.h> //#include <cstdlib> #include <stdlib.h> #include <time.h>  int main() {     int n, a, d[100];     FILE *fp;     fp=fopen("random number.txt","w+");     if(fp==NULL) //判断如果文件指针为空     {         printf("File cannot open! " );         exit(0);     }      srand(time(NULL));     for ( n = 0; n <100; n++)     {         d[n]=1+rand()%100;         //printf("random number between 1 ~ 100: %d\n", 1 + rand()%100 );         fprintf(fp, "random number between 1 ~ 100: %d\n", 1 + rand()%100 );     }     fclose(fp);     //int i=1;     //while(i=1) {     while(1) {         printf("请输入要查询的数(输入-1退出)：\n");         scanf("%d",&a);         for(n=0;n<100;n++) {             if(d[n]==a) {                 printf("随机数中有此数据\n");                 break;             }         }         if (n >= 100) {             printf("随机数中无此数据\n");             break;         }     }     return 0;  }  供参考～

user: user-0
content: 引用 3 楼 自信男孩 的回复：#include <stdio.h> //#include <cstdlib> #include <stdlib.h> #include <time.h>  int main() {     int n, a, d[100];     FILE *fp;     fp=fopen("random number.txt","w+");     if(fp==NULL) //判断如果文件指针为空     {         printf("File cannot open! " );         exit(0);     }      srand(time(NULL));     for ( n = 0; n <100; n++)     {         d[n]=1+rand()%100;         //printf("random number between 1 ~ 100: %d\n", 1 + rand()%100 );         fprintf(fp, "random number between 1 ~ 100: %d\n", 1 + rand()%100 );     }     fclose(fp);     //int i=1;     //while(i=1) {     while(1) {         printf("请输入要查询的数(输入-1退出)：\n");         scanf("%d",&a);         for(n=0;n<100;n++) {             if(d[n]==a) {                 printf("随机数中有此数据\n");                 break;             }         }         if (n >= 100) {             printf("随机数中无此数据\n");             break;         }     }     return 0;  }  供参考～感谢🙏

user: user-0
content: 引用 1 楼 user-2 的回复：从头到尾没看见写文件操作 fprintf是写入到文件大佬能帮我改一下么……我对文件这边还是不懂，我想将随机数存到文件中，在文件中查找

user: user-2
content: 从头到尾没看见写文件操作 fprintf是写入到文件
user-0 提问: c语言 动态链表

回复:
user: user-1
content: 是为了给s->next赋值。看代码是尾插法，即把新节点都从尾部插入，新节点的next用p->next赋值。  其实，这条语句可以去掉，因为在循环外有p->next = NULL;这样保证单链表的末尾是NULL。

user: user-0
content: 引用 1 楼 user-2的回复:假设p->next--->h1 指向h1 那么 s->next = p.next 后， s->next-->h1 s的next也指向h1，这点没问题吧  然后p->next = s; 就变成了 p->next-->s p的next指向s，所以整个结果变成 p->next-->s->next-->h1 如果没有 s->next = p.next，那么h1是不是就找不到了，因为p->next = s是的p的next抛弃了h1，指向了s，那么h1节点都没有任何节点只想它了，h1节点岂不是丢失了吗？所以要把h1先保留起来，那么怎么保留？就直接保留在s的next里，所以就是s->next = p.next  其实用个临时变量，估计LZ就理解了 Node *h1 = p->next; //把p的next指向的节点h1保存 p->next = s; //然后p的next指向s s->next = h1; //然后s的next再指向h1 这样是不是也达到了 p->next-->s->next-->h1  所以s->next = p.next 只是省略了 Node *h1 = p->next 用临时变量而已 就是说整个链表就是靠p->next 这个地址连接起来的对吧 p始终是最后一个节点 p把p->next暂时放到新连接过来的s的next里面 然后自己往后移动一个单位 指向s 然后又把p->next找回来了 就是这样循环的对吧

user: user-2
content: 假设p->next--->h1 指向h1 那么 s->next = p.next 后， s->next-->h1 s的next也指向h1，这点没问题吧  然后p->next = s; 就变成了 p->next-->s p的next指向s，所以整个结果变成 p->next-->s->next-->h1 如果没有 s->next = p.next，那么h1是不是就找不到了，因为p->next = s是的p的next抛弃了h1，指向了s，那么h1节点都没有任何节点只想它了，h1节点岂不是丢失了吗？所以要把h1先保留起来，那么怎么保留？就直接保留在s的next里，所以就是s->next = p.next  其实用个临时变量，估计LZ就理解了 Node *h1 = p->next; //把p的next指向的节点h1保存 p->next = s; //然后p的next指向s s->next = h1; //然后s的next再指向h1 这样是不是也达到了 p->next-->s->next-->h1  所以s->next = p.next 只是省略了 Node *h1 = p->next 用临时变量而已
user-0 提问: 编程题

回复:
user: user-1
content: 这两道题应该自己做，这个其实能提高逻辑运算能力。 否则以后检查逻辑错误，更蒙蔽。  &&因为逻辑运算符的优先级低于关系运算符。 所以先求a+b>c和b==c的值。 同时因为数学运算符又大于关系运算符，所以先算a+b然后再和c比较。  同时，因为&&和||的运算特点，c为了提高效率，所以有了沙发提到的短路逻辑式求值方法。

user: user-2
content: 题目不是说了吗  scanf输入

user: user-0
content: 引用 2 楼 ?Victor.??的回复:板凳板凳  #include<stdio.h> #define pi 3.14 int main() { 	float c,s,v; 	float r,h; 	scanf("%f %f",&r,&h); 	c=2*pi*r; 	s=pi*r*r; 	v=s*h; 	printf("周长 %.2f\n面积 %.2f\n体积 %.2f\n",c,s,v); 	return 0; } 在哪里给r和h赋值啊

user: user-2
content: 板凳板凳  #include<stdio.h> #define pi 3.14 int main() { 	float c,s,v; 	float r,h; 	scanf("%f %f",&r,&h); 	c=2*pi*r; 	s=pi*r*r; 	v=s*h; 	printf("周长 %.2f\n面积 %.2f\n体积 %.2f\n",c,s,v); 	return 0; }

user: user-2
content: 沙发沙发  （1）真&&假  0  （2）真（后面短路）1    (3)   假（后面短路）0,0
user-0 提问: 小白求救，请问各位大佬这个哪错了

回复:
user: user-1
content: polygen的第二个参数用加上括号即，(const POINT *)

user: user-0
content: 刚学c语言不久，我还以为直接发那个他显示出错的地方就可以了！

user: user-0
content: 引用 4 楼 初学小菜的回复:你要是方便把代码贴出来吧……迷之报错 #include"acllib.h"  int Setup() { 	initWindow("test",DEFAULT,DEFAULT,500,500); 	beginPaint(); 	setPenColor(WHITE); 	setBrushColor(WHITE); 	rectangle(0,0,500,500); 	endPaint(); 	 	beginPaint(); 	setPenColor(BLUE); 	setBrushColor(BLUE); 	acr(150,150,350,300); 	line(200,300,300,300); 	endPaint(); 	 	beginPaint(); 	setPenColor(RED); 	setBrushColor(RED); 	POINT p1[]={ 	{250,220}, 	{245,245}, 	{220,250}, 	{245,255}, 	{250,280}, 	{255,255}, 	{280,250}, 	{255,245}, 	{250,220}, 	}; 	Polygon(p1,9); 	endPaint(); 	 	beginPaint(); 	setPenColor(BLACK); 	setBrushColor(BLACK); 	rectangle(240,300,260,400); 	endPaint(); 	 	beginPaint(); 	setTextColor(GREEN); 	setTextsize(20); 	paintText(230,5,"曾小佳")；  	endPaint(); 	 	  	return 0;  }

user: user-2
content: 你要是方便把代码贴出来吧……迷之报错

user: user-0
content: 引用 1 楼 初学小菜的回复:你把错误倒是发出来呀……errors 发成这样看得清吗？看不清我就重新发帖吧，谢谢你的回复啊！

user: user-0
content: 引用 1 楼 初学小菜的回复:你把错误倒是发出来呀……errors C:\Users\Admin\Desktop\ack\main.c	In function 'Setup': 33	2	C:\Users\Admin\Desktop\ack\main.c	[Warning] passing argument 1 of 'Polygon' from incompatible pointer type [enabled by default] 71	0	e:\bianyiqi\dev-cpp\mingw64\x86_64-w64-mingw32\include\windows.h	In file included from e:\bianyiqi\dev-cpp\mingw64\x86_64-w64-mingw32\include\windows.h 50		C:\Users\Admin\Desktop\ack\acllib.h	                 from acllib.h 1		C:\Users\Admin\Desktop\ack\main.c	                 from main.c 3353	28	e:\bianyiqi\dev-cpp\mingw64\x86_64-w64-mingw32\include\wingdi.h	[Note] expected 'HDC' but argument is of type 'struct POINT *' 33	2	C:\Users\Admin\Desktop\ack\main.c	[Warning] passing argument 2 of 'Polygon' makes pointer from integer without a cast [enabled by default] 71	0	e:\bianyiqi\dev-cpp\mingw64\x86_64-w64-mingw32\include\windows.h	In file included from e:\bianyiqi\dev-cpp\mingw64\x86_64-w64-mingw32\include\windows.h 50		C:\Users\Admin\Desktop\ack\acllib.h	                 from acllib.h 1		C:\Users

user: user-2
content: 你把错误倒是发出来呀……errors
user-0 提问: 为什么用atof转换长的字符串会出错？

回复:
user: user-1
content: 应该还是溢出了。

user: user-2
content: 浮点数有效数字float只有6~7位， double只有15~16位 这个溢出不是表达范围的溢出，是有效数字的溢出  1/3 0.333333333无限下去， 数字计算机只能有有限的二进制的单位来表示，必然是无法精确的表达的，只能是近似

user: user-3
content: double：2^52 = 4503599627370496，一共16位，同理，double的精度为15~16位。

user: user-0
content: 用sscanf也是同样的效果
user-0 提问: 新人刚刚学习C语言，求前辈帮忙解决一下这个问题

回复:
user: user-0
content: 谢谢各位老哥指出错误，学习了。

user: user-1
content: 注意编译失败的提示，跟着提示找语法错误很快的

user: user-2
content: 有三处错误 1.printf("My favorite number is %d because it is first.\n ,num ")      这句话里面后面没有加； 2.return 0;之间应该有空格 3.printf("My favorite number is %d because it is first.\n ,num ")；   如果你想输出num，应该这么写： printf("My favorite number is %d because it is first.\n ",num );

user: user-3
content: printf("My favorite number is %d because it is first.\n ,num ") 后面加上分号
user-0 提问: C语言小白求助！

回复:
user: user-1
content: 引用 2 楼 weixin_45906870 的回复:引用 1 楼 user-1 的回复：你查一下 getchar这个函数就知道了，它返回的就是 int但是我用char也是对的，这是为什么呢？ 这是 linux manual 中对 getchar() 函数返回值的描述：fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error.  当函数正确从输入流中读取到字符时，会把读取到这这一个字节转成 int 类型返回，当出错时或读取到文件结尾时返回 EOF。EOF 时 stdio 头文件里的一个宏，通常值是 -1。如果用 char 类型接收，高位的部分会被截断，然后再和 EOF 进行比较是又强转成了 int，这时候是有可能发生错误的，不过现在的编译器基本上都不会出错，但是保险起见，还是用 int 来接比较好

user: user-0
content: 引用 1 楼 user-1 的回复：你查一下 getchar这个函数就知道了，它返回的就是 int但是我用char也是对的，这是为什么呢？

user: user-1
content: 你查一下 getchar这个函数就知道了，它返回的就是 int
user-0 提问: 线性表元素插入

回复:
user: user-0
content: 引用 1 楼 user-1的回复:代码不全看出来 你的5被插入了2的位置，怀疑length不对，而且 你好 没有被打印，说明找不到e 要看你其他的处理是不是有问题 懂了  谢谢你了

user: user-1
content: 晕，你确定没问题？ main方法 for(i=0;i<=m-1;i++) scanf("%d",&L.elem[i]); //这里虽然输入了数据，但是L的length没有改变  所以insertlist的时候，因为L的length还是0，所以按照你的逻辑就只能插在位置1了，也就是5插在了2的位置  修改 main方法 for(i=0;i<=m-1;i++) scanf("%d",&L.elem[i]);  改成 for(i=0;i<=m-1;i++) {scanf("%d",&L.elem[i]);  L.length++;} //注意加入元素，length也要增加  还有，最好length也要判断有没有达到LIST_INIT_SIZE，如果达到了会数组越界

user: user-0
content: 引用 1 楼 user-1的回复:代码不全看出来 你的5被插入了2的位置，怀疑length不对，而且 你好 没有被打印，说明找不到e 要看你其他的处理是不是有问题 可是我感觉没什么问题啊

user: user-0
content: 引用 1 楼 user-1的回复:代码不全看出来 你的5被插入了2的位置，怀疑length不对，而且 你好 没有被打印，说明找不到e 要看你其他的处理是不是有问题 #include<stdio.h> #include<stdlib.h> #define LIST_INIT_SIZE 100 //下面声明线性表------------------------ typedef struct{ 	int *elem; 	int length; 	int listsize; }SqList;  //下面初始化线性表-------------------------- int initlist(SqList *L) { 	L->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); 	if(!L->elem) {printf("分配失败");return 1;} 	L->length=0;L->listsize=LIST_INIT_SIZE;printf("初始化成功\n");return 0; }  //下面插入元素-------------------------------- int insertlist(SqList *L,int e){int i,j; /*找到插入位置i*/ /*中间插入*/ for(i=0;i<=L->length-1;i++) if(e>=L->elem[i]&&e<=L->elem[i+1])	{printf("你好！");break;} /*将第i个元素向后移 插入元素*/ for(j=L->length-1;j>=i+1;j--) L->elem[j+1]=L->elem[j];L->elem[i+1]=e;++L->length; printf("插入成功\n");return 0; }   //下面进行输出--------------------------- int printlist(SqList L,int m){int i; for(i=0;i<=m-1;i++) if(i==m-1)  printf("%d",L.elem[i]); else printf("%d ",L.elem[i]);  }  /*--------------------------下面是主函数-------------------------------------------*/ int main() { 	SqList L;int i,n,m; 	printf("请输入元素个数和插入元素:"); 	scanf("%d%d",&m,&n); 	initlist(&L); 	for(i=0;i<=m-1;i++) scanf("%d",&L.elem[i]); 	insertlist(&L,n);printlist(L,m); 	return 0; }

user: user-1
content: 代码不全看出来 你的5被插入了2的位置，怀疑length不对，而且 你好 没有被打印，说明找不到e 要看你其他的处理是不是有问题
user-0 提问: 为什么＊q＝＊p那句报错

回复:
user: user-1
content: 这里就是因为出现了野指针，就是没有明确指针指向了哪块地址内存

user: user-2
content: p是指针，指向i的地址。q也是个指针，指向哪里没设定，所以不能设定*q。 注意指针使用时 指针变量=内存地址 如p=&i *指针变量=数据的值 如*p=6 这两者的区别。 先有第一步指针变量=内存地址 ，才能使用第二步的*指针变量=数据的值，第一步就做指针初始化，没有第一步就是野指针或者空指针，也就是没有指向正确的内存地址，所以不能保存数据。
user-0 提问: 小白求教，为什么我写的这个求每个科目平均数的程序编译之后无法运行？

回复:
user: user-1
content: 不用用什么define，还没到这个阶段，先用const，把程序绝对简化，自己看就懂了

user: user-2
content: 中文输入法终于出来了  刚才一直不出来  class是c++关键字  把所有class改成class1或者别的什么

user: user-2
content: all class  gaicheng  class1  chinese input doesn't come out.

user: user-3
content: 发个报错信息看看

user: user-0
content: 引用 10 楼 ?Victor.?? 的回复:感觉好像是求每科的  #include<stdio.h> int number; int class1; #define MAX_NUM 30 #define MAX_CLASS 6  #define MAX_LEN 10 typedef struct student{ 	long ID; 	char name[MAX_LEN]; 	float result[MAX_NUM][MAX_CLASS]; }STU; void sumaver1(float result[MAX_NUM][MAX_CLASS]);  int main() { 	STU stu; 	int i,j; 	printf("Input student number(n<30):\n"); 	scanf("%d",&number); 	printf("Input course number(m<=6):\n"); 	scanf("%d",&class1); 	printf("Input student's ID,name and result:\n"); 	for(i=0;i<number;i++){ 		scanf("%ld %s",&stu.ID,&stu.name); 		for(j=0;j<class1;j++) 			scanf("%f",&stu.result[i][j]);     }     sumaver1(stu.result); 	return 0; }  void sumaver1(float result[MAX_NUM][MAX_CLASS]){ 	int i; 	int j; 	float sum[MAX_CLASS]={0}; 	double average[MAX_CLASS]={0.0}; 	for(i=0;i<class1;i++){ 		for(j=0;j<number;j++){ 			sum[i]+=result[j][i]; 		} 		average[i]=sum[i]/number; 	}	 	for(i=0;i<class1;i++){ 		printf("course %d:sum=%.0f,aver=%.0f\n",i+1,sum[i],average[i]); 	} }  供参考 刚刚试了下，确实这样是对的，找到自己的问题了，谢谢大佬！

user: user-0
content: 引用 9 楼 ?Victor.?? 的回复:你要求每科平均分  还是  每个学生平均分  呀  ？ 每科的平均分，大佬帮我看看吧！

user: user-2
content: 感觉好像是求每科的  #include<stdio.h> int number; int class1; #define MAX_NUM 30 #define MAX_CLASS 6  #define MAX_LEN 10 typedef struct student{ 	long ID; 	char name[MAX_LEN]; 	float result[MAX_NUM][MAX_CLASS]; }STU; void sumaver1(float result[MAX_NUM][MAX_CLASS]);  int main() { 	STU stu; 	int i,j; 	printf("Input student number(n<30):\n"); 	scanf("%d",&number); 	printf("Input course number(m<=6):\n"); 	scanf("%d",&class1); 	printf("Input student's ID,name and result:\n"); 	for(i=0;i<number;i++){ 		scanf("%ld %s",&stu.ID,&stu.name); 		for(j=0;j<class1;j++) 			scanf("%f",&stu.result[i][j]);     }     sumaver1(stu.result); 	return 0; }  void sumaver1(float result[MAX_NUM][MAX_CLASS]){ 	int i; 	int j; 	float sum[MAX_CLASS]={0}; 	double average[MAX_CLASS]={0.0}; 	for(i=0;i<class1;i++){ 		for(j=0;j<number;j++){ 			sum[i]+=result[j][i]; 		} 		average[i]=sum[i]/number; 	}	 	for(i=0;i<class1;i++){ 		printf("course %d:sum=%.0f,aver=%.0f\n",i+1,sum[i],average[i]); 	} }  供参考

user: user-2
content: 你要求每科平均分  还是  每个学生平均分  呀  ？

user: user-0
content: 引用 2 楼 不知道用什么名字。 的回复:发个报错信息看看 发了大佬

user: user-0
content: 大佬们输入完数据之后就卡着不动了，数字也输入不进去，也不输出结果，是不是因为我的程序写错了？

user: user-0
content: 引用 4 楼 ?Victor.?? 的回复:中文输入法终于出来了  刚才一直不出来  class是c++关键字  把所有class改成class1或者别的什么   大佬可是改完之后还是不行，就是运行之后把数据输入进去，却无法输出任何结果

user: user-0
content: 有人嘛，求个大佬帮我看看
user-0 提问: 好心人救救俺吧(ง ˙o˙)ว

回复:
user: user-0
content: 引用 8 楼 ?Victor.??的回复:#include<stdio.h> int main() { 	int a[10][10]; 	int i,j,k; 	for(i=0;i<10;i++) 	{ 		for(j=0;j<10;j++) 		{ 			k=i*j; 			a[i][j]=k; 		} 	} 	for(i=0;i<10;i++) 	{ 		for(j=0;j<10;j++) 		{ 			if(a[i][j]!=0&&i>=j) 			printf("%d*%d=%d",j,i,a[i][j]); 			printf(" "); 		} 		printf("\n\n"); 	} 	return 0; } 别的自己想吧   谢谢

user: user-1
content: #include<stdio.h> int main() { 	int a[10][10]; 	int i,j,k; 	for(i=0;i<10;i++) 	{ 		for(j=0;j<10;j++) 		{ 			k=i*j; 			a[i][j]=k; 		} 	} 	for(i=0;i<10;i++) 	{ 		for(j=0;j<10;j++) 		{ 			if(a[i][j]!=0&&i>=j) 			printf("%d*%d=%d",j,i,a[i][j]); 			printf(" "); 		} 		printf("\n\n"); 	} 	return 0; } 别的自己想吧

user: user-2
content: 你要是打算交作业， 百度一下c++ 乘法表， 代码很多， copy一个拉倒 要想学编程， 没有偷懒能学成的， 自己写， 错了贴代码提问

user: user-0
content: 啥？乘法口诀有啥用呀

user: user-1
content: 我这里有个乘法口诀的  以前写的

user: user-0
content: 引用 1 楼 user-4的回复:这种简单的代码，lz先自己写吧，有错再把代码贴出来提问

user: user-0
content: 引用 2 楼 chxchxkkk的回复:这是最简单的小程序了，自己尝试着写一下，就是循环和判断。

user: user-3
content: 这是最简单的小程序了，自己尝试着写一下，就是循环和判断。

user: user-4
content: 这种简单的代码，lz先自己写吧，有错再把代码贴出来提问
user-0 提问: 新手救助，题目是"把多个连续空格替换为一个空格"，我这样写不会打印空格，实在想不出来了。

回复:
user: user-0
content: 引用 1 楼 tjw316248269的回复:除了state==NONBANK少个等号，好像没啥问题吧 哇，好像是，怪不得打不出来空格

user: user-1
content: 除了state==NONBANK少个等号，好像没啥问题吧
user-0 提问: 为什么输出带$？

回复:
user: user-1
content: p/p=1  d*r=3000  p/p-d*r=-2999

user: user-0
content: [quote=引用 2 楼 ?Victor.?? 的回复:] log(p/p-d*r)  p/p-d*r<0  ？ p/p-d*r不是小于零吧？

user: user-1
content: log(p/p-d*r)  p/p-d*r<0

user: user-0

user: user-0
content: 引用 4 楼 ?Victor.?? 的回复:p/p=1  d*r=3000  p/p-d*r=-2999   sorry，我错了，没打括号，哈哈哈
user-0 提问: 小白求教，字符1与整型1

回复:
user: user-0
content: 知道了谢谢各位

user: user-1
content: 数字的字符在ascii表里面是顺序排列的 所以， 1 = '1' -'0';  2 = '2'-'0', .... 看看'0'的ascii是多少， 48 所以  1 = '1' - 48

user: user-2
content: 其实没有必要记啊。 ‘1’-‘1’+1； 这不就转化过来了吗 字符转数字 s[i]-‘0’

user: user-3
content: ASCII的'1'是49.'0'是48

user: user-4
content: 在ASCII码表中，48~57为0到9十个阿拉伯数字 字符‘1’==  49， 要换成整型 1 = ‘1’-48

user: user-5
content: LZ可以自己打印字符1看看多少，然后就知道怎么转成整形1了 printf("%d", '1'); //打印字符1看看是多少？
user-0 提问: 关于PTA上的的《求整数段和》

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 把if(a==b){ sum+=a;} 去掉  后面sum已经加了
user-0 提问: 题目

回复:
user: user-1
content: 简单粗暴法就是3个for循环，复杂的排列组合，递归算法就不说了。 int i,j,k; for(i=1; i<=198/4; i++) {     for(j=i+1; j<=198/4; j++) {          for(k=j+1; k<=198/4; k++) {             printf(“198=%d+%d+%d+%d\n”, i, j, k, 198-(i+j+k));         }     } }

user: user-2
content: 枚举，暴力法，for
user-0 提问: 编程题求助

回复:
user: user-0
content: 引用 4 楼 早打大打打核战争的回复: int nsplit(int n, int k) {   int i, r;    if (n < 1 || k < 1 || n < k) return 0;   if (n == k || k == 1) return 1;   if (k == 2) return n / 2;   for (i = 1, r = 0; i <= k; i++) r += nsplit(n - k, i);    return r; }   nsplit(198, 4) = 54722种方案 哇😯谢谢谢谢

user: user-1
content: int nsplit(int n, int k) {   int i, r;    if (n < 1 || k < 1 || n < k) return 0;   if (n == k || k == 1) return 1;   if (k == 2) return n / 2;   for (i = 1, r = 0; i <= k; i++) r += nsplit(n - k, i);    return r; }   nsplit(198, 4) = 54722种方案

user: user-0
content: 可以。它没有限制

user: user-1
content: 拆分数可以重复？

user: user-2
content: 穷 举 法
user-0 提问: c语言构建九九乘法表

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

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

user: user-3
content: 我之前看到过

user: user-4
content: #include<stdio.h> int main() { int a[10][10]; int i,j,k; for(i=0;i<10;i++) { for(j=0;j<10;j++) { k=i*j; a[i][j]=k; } } for(i=0;i<10;i++) { for(j=0;j<10;j++) { if(a[i][j]!=0&&i>=j) printf("%d*%d=%d",j,i,a[i][j]); printf(" "); } printf("\n\n"); } return 0; }

user: user-0
content: 引用 1 楼 ?Victor.?? 的回复：#include<stdio.h> int main() { int a[10][10]; int i,j,k; for(i=0;i<10;i++) { for(j=0;j<10;j++) { k=i*j; a[i][j]=k; } } for(i=0;i<10;i++) { for(j=0;j<10;j++) { if(a[i][j]!=0&&i>=j) printf("%d*%d=%d",j,i,a[i][j]); printf(" "); } printf("\n\n"); } return 0; }又学到一个
user-0 提问: 【C语言求助】源程序简单分析器：统计注释个数部分

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 怎么利用数组越界解决这个问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 各位大佬，有人知道这里的p1，p2为什么不要先指向结构体变量，然后再使用的吗？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 2 楼 自信男孩的回复:不明白楼主的意思，还是楼主描述的有问题。楼主标注的代码是动态申请空间，因为p1, p2都是野指针，并没有让指针指向有效的可以读写的位置，因为malloc申请了内存，让指针指向了可以读写的内存，后面就可以使用了。否则，野指针直接使用会出现段错误。 明白啦，明白啦，万分感谢(❁´ω`❁)！

user: user-2
content: p1，p2是结构体指针，指向申请好的内存，这个就等同于指向结构体变量啊，只是前者是动态申请内存，后者是指向已声明过的结构体变量的地址而已

user: user-3
content: 不明白楼主的意思，还是楼主描述的有问题。楼主标注的代码是动态申请空间，因为p1, p2都是野指针，并没有让指针指向有效的可以读写的位置，因为malloc申请了内存，让指针指向了可以读写的内存，后面就可以使用了。否则，野指针直接使用会出现段错误。

user: user-4
content: 先开辟空间  不然之后输入往哪里放呀
user-0 提问: 求解释int a[const 5]这代表啥意思？

回复:
user: user-1
content: 这样的函数int func(int a[const 5], const int b[5])这个第一形参是什么意思啊？第二个是说数组b前面5个元素不能修改吗？

user: user-0
content: 引用 5 楼 apkipa1 的回复:这种用法只有用在说明函数形参时才能用，其效果等价于第二个。 你是说int a[const 5]等价于int *const？

user: user-0
content: 不知道答案，所以上来问大神

user: user-2
content: 拆解这个问题： int* const 数组 是以上三者的组合。

user: user-3
content: 这种用法只有用在说明函数形参时才能用，其效果等价于第二个。

user: user-4
content: 如果是选择题，第四个可能是正确答案。  const int *a，a指向的内容不能改变 int * const a，a本身不能改变

user: user-5
content: https://blog.csdn.net/qq_37941471/article/details/80678904?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task  首尾两个指针是指向 int[5]这样的数组的， 只是指针类型不一样
user-0 提问: c语言

回复:
user: user-0
content: 引用 7 楼 燚认的回复:[quote=引用 1 楼 user-6 的回复:] 新手区估计有很多作业题 话说，书里面没有练习题吗？ 想找项目，可以去github上搜 大佬，github全是英文，看不懂啊[/quote] 用翻译不就行了吗哈哈

user: user-1
content: PTA，LEETCODE，

user: user-2
content: 引用 1 楼 user-6 的回复:新手区估计有很多作业题 话说，书里面没有练习题吗？ 想找项目，可以去github上搜 大佬，github全是英文，看不懂啊

user: user-3
content: 推荐 K&R C 中的课后题

user: user-0
content: 引用 1 楼 user-6的回复:新手区估计有很多作业题 话说，书里面没有练习题吗？ 想找项目，可以去github上搜 首先谢谢回答，请问朋友你说的新手区是哪里？

user: user-4
content: 书里的题都做完了？在新手区答题，就可以。

user: user-5
content: 刷题不知道会不会有用，楼主可以试试

user: user-6
content: 新手区估计有很多作业题😄 话说，书里面没有练习题吗？ 想找项目，可以去github上搜
user-0 提问: C语言能对未知变量进行计算么

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 2 楼 寻开心的回复:顺序写成 y=x-2； fun=x*y＋1. 就可以了 我去试一下，。。。。。。。。

user: user-2
content: 引用 楼主 You're  Beautiful 的回复:比如fun=x*y＋1. y=x-2； 能实现出fun=x*x-2*x+1 你想解方程？不过你这方程太简单。  int y(int x) { return x -2; } int fun(int x){ return x * y(x) +1; }

user: user-3
content: C应该不能，这个涉及并行计算，以下内容瞎说。 多年以前看过，内容早忘了。大致是一个调度器，把计算分散给不同的cpu或内核或线程。 当计算到fun=x*y＋1时，这个线程挂起，并产生一个标记。 当另外一个线程计算到y=x-2；根据标记，唤醒标记线程继续fun=x*y＋1计算。

user: user-4
content: 顺序写成 y=x-2； fun=x*y＋1. 就可以了

user: user-5
content: 不清楚你想表达什么    试一试不就知道了
user-0 提问: 求解

回复:
user: user-1
content: 供参考：//fun(x,n)=1 + x^2/2! + x^4/4! + x^6/6! + ... + x^(2*n-2)/(2*n-2)!  //fun(6.66,8) = 389.443 //fun(6.66,15)= 390.276  #include<stdio.h>  double fun(double x,int n);  int main() {     int    n;     double x;     scanf("%lf%d",&x,&n);     printf("fun(%.2f,%d)=%.3f\n",x,n,fun(x,n));          return 0; }  double fun(double x,int n) {     int    i=1,k=2;     double tmp=1,sum=1;     while(i<n)     {           tmp *= (double)(x*x)/(k*k-k);           sum += tmp;           i++;k+=2;     }     return sum; }

user: user-2
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 输出一个数列的第k小值

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 那要怎么弄呢

user: user-2
content: 用数组也不太好办，用字符串来操作比较方便

user: user-3
content: 说但是序列，你为什么要输入一个数呢？？？思路就有问题呀

user: user-4
content: 无序序列这里可以用数组存

user: user-5
content: 输入的序列超出了整数能表达的范围了 自己去查查int能表达的最大的数是多少去  什么类型都不是万能的， 必须考虑能表达的有效范围
user-0 提问: 求助，题目是"编写打印输入中单词的长度的直方图"，我这样打不出来*号,不知道为什么

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: for (int p = 1;p <= num;) putchar ('*'); printf ("\n");   } 这几行代码要么循环体不执行，即使执行了也可能是死循环呢。

user: user-3
content: #include <stdio.h> int main () { 	char c[1000]={0},c1; 	int a[100]={0},b[16]={0}; 	int i,j,k=0,l; 	for(i=0;i<1000;i++) 	{ 		c[i]=getchar(); 		if(c[i]=='\n') 		break; 	}	 	for(j=0;j<i;j++) 	{ 		if(c[j]==' ') 		{ 			if(c[j+1]!=' ') 			{ 				printf("\n"); 				k++; 			} 			if(c[j+1]==' '&&c[j+2]==' ') 			j++; 		} 		else 		{ 			printf("*"); 			a[k]++; 		} 	} 	printf("\n"); 	for(i=0;i<k+1;i++) 	{ 		for(j=0;j<16;j++) 		{ 			if(a[i]==j+1) 			b[j]++; 		} 		if(a[i]>15) 		b[15]++; 	} 	for(j=0;j<15;j++) 	{ 		if(b[j]!=0) 		printf("长度为%d的单词的个数为%d\n",j+1,b[j]); 	} 	printf("超过限度的单词%d个",b[15]); 	return 0; }  可能有点麻烦

user: user-4
content: #include <stdio.h> #define MAXWORD 15 #define IN 1 #define OUT 0  int main() {     int c,wl[16],i,state = OUT,overflow = 0;      // 从while里面搬出来了     for (i = 0; i <= MAXWORD; i ++) wl[i] = 0;      i = 0;     while ((c = getchar()) != EOF)     {         if ( c== '\b') { // 这是删除前一个字符             if ( i ) i--;         } else if (c == ' ' ||c == '\t' || c=='\n') {             if (state == IN) {                 if (i <= MAXWORD)                     wl[i] ++;                 else                     overflow ++;             }             // 遇到单词分割后， 状态要重新改为out，并且长度计数要清0             state = OUT;             i=0;         }  else {             // 以前的两个if都可以合并成一个，已经是in，继续设置in也无妨             i ++;             state = IN;         }     }     // 最后是Ctrl+z 退出的，此时i还有长度也要统计     if (i <= MAXWORD)         wl[i] ++;     else         overflow ++;     printf("\n");     for (int h=1; h <= MAXWORD; h++)     {         // 原来的num，min什么的都是废话，直接输出就好了         printf ("长度为%d的单词的个数为%d\t:", h, wl[h]);         for (int p = 1; p <= wl[h]; p++) putchar ('*');         printf ("\n");     }     if (overflow > 0)         printf ("有%d个单词超过了最大限度\n", overflow);     return 0; }

user: user-0
content: 最大长度15，个数没有限制

user: user-3
content: 最大长度是多少？15吗？  单词个数有限制吗？
user-0 提问: glibc库中一种奇怪的函数定义方式

回复:
user: user-1
content: 这个是旧式的函数定义。好像是因为这些参数编译时，就是放在前面的地址上。

user: user-0
content: 奇怪是指将形式参数列表分成了两部分，在括号内给出形参名称，而在括号外给出其类型定义。我是个C小白，以前没有见过这种风格的函数定义。
user-0 提问: 大神求解啊，*号里填什么，用C语言

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 user-3的回复:你这怎么也要说明一下fun想达到什么结果啊 如果没有要求，随便return个double就好了，比如return 0; return x; return x*n; 等等 例如: fun( 6.66, 8 ) = 389. 443

user: user-0
content: 引用 1 楼 user-3的回复:你这怎么也要说明一下fun想达到什么结果啊 如果没有要求，随便return个double就好了，比如return 0; return x; return x*n; 等等  例如: fun( 6.66, 8 ) = 389. 443

user: user-2
content: 可能让你写这个函数有什么问题吧，参数的类型错误。

user: user-3
content: 你这怎么也要说明一下fun想达到什么结果啊 如果没有要求，随便return个double就好了，比如return 0; return x; return x*n; 等等
user-0 提问: C语言新手关于变量位置的疑惑

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 user-3的回复:第一个因为sum一直累加（把上一次循环的结果也累加），所以if(sum==i)一直不会满足，所以没打印  第二个每次循环取得i的因数前，先把sum清零，所以累加的是i的因数，所以if(sum==i)可能会满足，所以可能有结果打印 懂了懂了，谢谢！

user: user-2
content: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int   main() {     for (int i = 0; i < 10; i++)     {         int j = 10;         {             printf("%d\n", j++);         }     }     return 0; } 为什么j一直是10，定义不是只运行一次吗？j不是在块中一直有生命期吗？

user: user-3
content: 第一个因为sum一直累加（把上一次循环的结果也累加），所以if(sum==i)一直不会满足，所以没打印  第二个每次循环取得i的因数前，先把sum清零，所以累加的是i的因数，所以if(sum==i)可能会满足，所以可能有结果打印
user-0 提问: c语言初学者，求大佬指点

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 这样更方便 int m = (0x7FFFFFFF<<n) & (0x7FFFFFFF>>p); //p-n的部分都是1，其余都是0 int v = ~(x & m) & (x | m);

user: user-2
content: 引用 6 楼 milk____shake 的回复:可是，好像不符合题意 忽略了中间部分取反的时候变负数了，要修正回来 int v = (x & ~(x%(1<<(p+1)))) | (x%(1<<n)) | (~(x%(1<<(p+1)) & ~(x%(1<<n))) & (0x7FFFFFFF<<n) & (0x7FFFFFFF>>p)); 或者中间变量 int m =  (0x7FFFFFFF<<n) & (0x7FFFFFFF>>p);  int v = (x & ~(x%(1<<(p+1)))) | (x%(1<<n)) | (~(x%(1<<(p+1)) & ~(x%(1<<n))) & m);

user: user-0
content: 引用 5 楼 user-2的回复:减法可以用&减数的反 int v = (x & ~(x%(1<<(p+1)))) | (x%(1<<n)) | ~(x%(1<<(p+1)) & ~(x%(1<<n))) 可是，好像不符合题意

user: user-2
content: 减法可以用&减数的反 int v = (x & ~(x%(1<<(p+1)))) | (x%(1<<n)) | ~(x%(1<<(p+1)) & ~(x%(1<<n)))

user: user-2
content: 改一下 int v = (x-(x%(1<<(p+1)))) | (x%(1<<n)) | ~(x%(1<<(p+1)) - x%(1<<n));

user: user-2
content: 那你就把v1，v2，v3合起来写，之所以分开写想象让你清楚逻辑 int v = (x/(1<<(p+1))) | (x%(1<<n)) | ~(x%(1<<(p+1)) - x%(1<<n)); printf(“%d\n”, v);

user: user-0
content: 引用 1 楼 user-2的回复:for example int main(int argc, const char * argv[]) {     int x, p, n;     scanf("%d", &x);     scanf("%d%d", &p, &n);     int v1 = (x>>(32-p-1)) << (32-p-1); //p的左半部 (右移再左移，把p的右半部清0)     int v2 = (1<<n); //n的右半部     v2 = x % v2; //这里用取余法简化（也可以移位）     int v3 = 0; //p-n部分     for (int i=0; i<=p-n; i++) { //取出p到n的位的数并取反         v3 = ((~((x>>(p-i)) & 0x00000001)) & 0x00000001) << (p-i) | v3;     }     printf("%d\n", v1|v3|v2);     return 0; } 如果只要求用一个表达式表示出来呢

user: user-2
content: for example int main(int argc, const char * argv[]) {     int x, p, n;     scanf("%d", &x);     scanf("%d%d", &p, &n);     int v1 = (x>>(32-p-1)) << (32-p-1); //p的左半部 (右移再左移，把p的右半部清0)     int v2 = (1<<n); //n的右半部     v2 = x % v2; //这里用取余法简化（也可以移位）     int v3 = 0; //p-n部分     for (int i=0; i<=p-n; i++) { //取出p到n的位的数并取反         v3 = ((~((x>>(p-i)) & 0x00000001)) & 0x00000001) << (p-i) | v3;     }     printf("%d\n", v1|v3|v2);     return 0; }
user-0 提问: 小白请教一下代码错误

回复:
user: user-1
content: scanf_s("%d %s %d", (p+i)->xh, (p+i)->name, (p+i)->Cnsoe);         printf("第%d个学生的信息：学号：%d\n姓名：%s\n语文分数%d\n", &(p+i)->xh, &(p+i)->name, &(p+i)->Cnsoe); 主要是这里有问题，记住一个原则，凡是要修改值的调用，参数必须是指针 (p+i)->Cnsoe这里虽然p是指针，但是他指向了一个变量，所以还得取变量的地址才行。&(p+i)->Cnsoe 而在不修改实参的值的调用中，参数一般是变量，但是有时为了保持和相应函数的一致性，也可以使用一个常量指针。 &(p+i)->xh这里的取址操作明显不符合上面所说的原则
user-0 提问: 编写代码过程中，光标移动的便捷方法

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 用↑↓←→（上下左右键）可以操控光标，就是不用鼠标，但是很多情况还是用鼠标好，少量记住一些快捷键也是有用的  跨度太大的时候也要用鼠标 上下左右键就是玩游戏的键 要结帖！！结贴！！

user: user-3
content: vs2019，其他应该差不多吧，查下ide的帮助

user: user-0
content: 引用 2 楼 m0_46108109的回复:Ctrl+Shift+Enter 话说快捷键我根本记不住，我一直动鼠标的。 这快捷键那些编译环境可以用

user: user-3
content: Ctrl+Shift+Enter 话说快捷键我根本记不住，我一直动鼠标的。

user: user-0
content: 麻烦指点小生一二
user-0 提问: 洛谷——插火把问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 很明显你的火把情况考虑的少了(萤石没看) a[x+2][y+2]=1; //物品所在位         a[x+1][y+2]=a[x][y+2]=1; //左边两个         a[x+3][y+2]=a[x+4][y+2]=1;//右边两个         a[x+2][y+1]=a[x+2][y]=1;//上边两个         a[x+2][y+3]=a[x+2][y+4]=1;//下边两个         a[x+3][y+3]=a[x+3][y+1]=1;//左下和右下         a[x+1][y+3]=a[x+1][y+1]=1;//左上和右上
user-0 提问: C语言

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 除了编程题，也许别处就用不到了

user: user-0
content: 引用 7 楼 xianming3的回复:什么东西上用到这么大的数？ 是一个编程题（数根）

user: user-3
content: 似乎得用上log，得用数学方法

user: user-2
content: 什么东西上用到这么大的数？

user: user-0
content: 引用 4 楼 ggglivw的回复:话说这个数字有多大，我感觉已经超过我能理解的范畴了 我也是，谢谢你了

user: user-0
content: 我也是，谢谢你了

user: user-4
content: 话说这个数字有多大，我感觉已经超过我能理解的范畴了

user: user-3
content: 用结构，好像在离散数学里，专门讲了，超过计算机限制的大数运算。 就是你自己定义一个数据类型，自己设计算法。

user: user-5
content: 可以用数组。。。

user: user-4
content: 只能用字符串了,  有不少的大数据计算类，都是用字符串存数据. 你们老师也是牛逼，才学C就给你们出这种题目
user-0 提问: c语言

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 5 楼 qybao的回复:嚯嚯，原来如此 也就是说移位运算如有表达式（不管在移位符的左边还是右边），就会把位移的位数先对32取模，取模的结果才是最终位移的位数  所以改一下步骤2，也许LZ就能理解了 1:  ~(~0<<32) 2:  ~(~0 << (32%32) ) 3:  ~(0xFFFFFFFF << 0) 3:  ~(0xFFFFFFFF << 0) 4:  ~0xFFFFFFFF 5:  0 哦哦，这样可以懂了

user: user-2
content: 嚯嚯，原来如此 也就是说移位运算如有表达式（不管在移位符的左边还是右边），就会把位移的位数先对32取模，取模的结果才是最终位移的位数  所以改一下步骤2，也许LZ就能理解了 1:  ~(~0<<32) 2:  ~(~0 << (32%32) ) 3:  ~(0xFFFFFFFF << 0) 3:  ~(0xFFFFFFFF << 0) 4:  ~0xFFFFFFFF 5:  0

user: user-0
content: 引用 3 楼 寻开心的回复:正确答案是这样的  对于 x << y的处理 要分两种情况，区分字面量和表达式 如果是字面量， 那么y大于等于32的时候，都是0（这是编译器处理，编译器够智能才行） 不管是1<<32 还是 0xFFFFFFFF<<32 都是0 你可以去测试！   如果是运算， 那么首先把y对32取模，然后再进行移动计算 所以楼主的代码执行过程是这样的 1:  ~(~0<<32) 2:  ~(0xFFFFFFFF << 32 ) 3:  ~(0xFFFFFFFF << 0) 4:  ~0xFFFFFFFF 5:  0  这题是一些面试官经常考的问题！ 所你会发现， 把一个数直接左移动32次，和循环32次，一次移动一位的结果完全不同  代码上你可以写 1<<33，但是这就是字面量了， 直接是0（有的编译器可能会不同） 如果int v=1；  v<<33 哈， 这个有意思， 它等价于v<1;  二不二 没懂那个代码执行过程2-3步

user: user-3
content: 正确答案是这样的  对于 x << y的处理 要分两种情况，区分字面量和表达式 如果是字面量， 那么y大于等于32的时候，都是0（这是编译器处理，编译器够智能才行） 不管是1<<32 还是 0xFFFFFFFF<<32 都是0 你可以去测试！   如果是运算， 那么首先把y对32取模，然后再进行移动计算 所以楼主的代码执行过程是这样的 1:  ~(~0<<32) 2:  ~(0xFFFFFFFF << 32 ) 3:  ~(0xFFFFFFFF << 0) 4:  ~0xFFFFFFFF 5:  0  这题是一些面试官经常考的问题！ 所你会发现， 把一个数直接左移动32次，和循环32次，一次移动一位的结果完全不同  代码上你可以写 1<<33，但是这就是字面量了， 直接是0（有的编译器可能会不同） 如果int v=1；  v<<33 哈， 这个有意思， 它等价于v<1;  二不二

user: user-3
content: 引用 1 楼 qybao 的回复:你可以循环打印看看变化 for (int i=0; i<33; i++) {     printf("%08X\n", ~0<<i);     printf("%08X\n", 1<<i); } 也就是~0=0xFFFFFFFF，左移32位，相当于int的位数的一个循环，又回到了原点 所以相当～(~0)，所以还是0  解释不通 ~的优先级高于< 先执行~后执行<< 0按照字面量理解的时候是int类型， 就当做32位来解释吧 ~0是0xFFFFFFFF 左侧移动32结果是0 最后括号外面的~会把结果变成0xFFFFFFFF 如何解释？

user: user-2
content: 你可以循环打印看看变化 for (int i=0; i<33; i++) {     printf("%08X\n", ~0<<i);     printf("%08X\n", 1<<i); } 也就是~0=0xFFFFFFFF，左移32位，相当于int的位数的一个循环，又回到了原点 所以相当～(~0)，所以还是0
user-0 提问: 那我重新上传一下，抱歉

回复:
user: user-0
content: 引用 1 楼 user-1的回复:就是要数组越界才能达到目的 只是很奇怪，两个连续的局部变量，既然内存地址不连续 我上传文件之后通过了，应该确实是编译器嗯问题，太谢谢你啦

user: user-1
content: 就是要数组越界才能达到目的 只是很奇怪，两个连续的局部变量，既然内存地址不连续
user-0 提问: 区别

回复:
user: user-0
content: 各位大神，不好意思，本来我要结贴的，后来不小心点错成了无满意结帖，下次一定给各位加分

user: user-0
content: 谢谢(*°∀°)=3

user: user-1
content: 建议楼主写个程序验证一下，用到sizeof，用实践去验证你的想法，猜想～

user: user-1
content: *str[10]这是指针数组，即还是数组，只是数组内的元素都是指针。 (*str)[10]是数组指针，即指向数组的指针，注意最终str是指针。指向的是一个二维数组，该二维数组是一个列数是10的二维数组。 str[][10]是数组，二维数组，只是行数不确定，由初始化决定行数。如果str[][10]作为形参，那么和(*str)[10]是等价的。

user: user-2
content: 纠正一下，*st[10]是指针数组

user: user-2
content: *st[10]是数组指针，st指向一个长度为10的数组，该数组的每个元素是个指针，即该数组的每个元素的内存地址是连续的，但每个数组元素可以指向不连续的内存地址（比如st[0]指向内存1，st[1]指向内存8，内存1和内存8不一定连续），st+1会移动1个指针大小的字节（32位机就是移动4个字节），移到数组的下一个元素的地址，st属于一级指针，可以改变指向，*(st+i)可以得到数组第i个元素的值（它的值是个指针）。适用于一组数组分别保存非连续内存的信息。比如数组元素是个对象指针（动态new出来的） (*st)[10]是数组指针，st指向一个长度为10的数组，这个和上面的区别是st+1会移动数组长度x数组类型个字节，即st+1访问不了数组的元素（不会移动到数组的下一个元素的地址），也就是这个数组是个整体，把这个整体看成一种类型就可以）。st属于二级指针，可以改变指向，*(st+i)得到第i个长度为10的数组，*(*(st+i)+j)得到第i个长度为10的数组的第j个元素。适用于把数组当作一个整体来访问的情况（一般用于指向二维数组，st+i就可以达到二维数组的行增加） st[][10]这个和数组指针很像，也是二级指针，只是st是数组名，不能改指向。适应场合没什么可说的，就是二维数组，一维的长度由数组声明的时候给它赋值的元素来确定。

user: user-3
content: 以char类型为例子 int* st[10]  指针的数组， 这个数组有10个元素，每个元素的类型都是char *         st[1] = (int*) malloc( sizeof(char) * 8);             char ch;  s[2] = &ch;         比如，給多个字符串排序，你就可以把字符串指针放到这个数组里面， strcmp两个元素后交换他们的值  char (*st)[10] 数组的指针，  指针指向一个 char[10]的数组         对于二维数组  char ary[20][10] 来说， ary[0], ary[1], ... 这些都是此类型的         二维数组名字当值指针来使用的时候，实际上也是这个类型         对于这个指针， 因为知道了是指向char[10]的类型的，所以这个指针的p++， 就是sizeof（char）*10的数值变化         char a[10];        char (*p)[10] = a;    st[][10] 也是数组的指针         它可以用于二维数组的初始化; 因为二维数组是若干个一维数组的顺序排列，所以必须要先知道一维数组的长度才可以定位类型                  初始化二维数组的时候， 第一个下标可以空，根据后面 = { ... } 花括号里面一维数组的个数来自动确定第一个下标的值                  但是你不能空第二个下标参数， 因为它不指定就无法确定基本数据的长度                  你可以不知道有多少个一维数组，但是你必须知道每个一维数组的长度                  例如： char [][3] = {{'1','2','3'}, {'a', 'b','c'}, };           也可以用于二维数组的函数传参 ，  void func( char *[][10] ); 原因同上， 还是必须要知道第二个下标参数的大小，不能空。
user-0 提问: 【求助】

回复:
user: user-1
content: 还有就是fgets那个循环里面， 你可以先printf %s buf出来，看看读出的数据是什么

user: user-1
content: char * fileline[1024]; 要这样定义 fileline， 一个数组，元素是char*  后面是 fileline[l] = (char*) malloc( strlen(buf));
user-0 提问: 这道题咋写啊？求助！！！！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: union  {     unsigned int v;     unsigned char ch[4]; } u; 給ch数组赋值完了， v直接就出来了， 啥合并都不用     unsigned char ch[4];  int v = *((int*)ch);                也可

user: user-3
content: 还有这种操作？？？

user: user-4
content: #define UCHAR_TO_INT_U(a, b, c, d)   (((a)<<24) + ((b)<<16) + ((c)<<8) + d)   试试这个～

user: user-0
content: 打错了 int型

user: user-5
content: #define Byte32(Byte4, Byte3, Byte2, Byte1)  ((unsigned int)((((unsigned int)(Byte4))<<24) \ 		| (((unsigned int)(Byte3))<<16) | (((unsigned int)(Byte2))<<8) | ((unsigned int)(Byte1))))
user-0 提问: 关于C语言的clock()函数的使用

回复:
user: user-1
content: stop - start是clock_t类型，如果细心研究一下clock_t是 long类型。CLK_TCK也不是double，应该也是unsigned long或unsigned int类型。因此如果不加double，那么得到的结果是unsigned long类型的，而duration是double类型，如果让除法变成double类型的除法就需要强转一下。

user: user-2
content: 楼上正解， c语言中的自动类型转换原则是： 一个表达式中出现不同类型间的混合运算，较低类型将自动向较高类型转换。 stop、 start、CLK_TCK通过自动转换，变不成double类型 所以，需要强制类型转换下
user-0 提问: 初学者的一个问题...

回复:
user: user-1
content: 程序没什么问题，就是scanf函数 你写的scanf("%d, %d, %d", &a, &b, &c);是用逗号分隔的，输入数值时也要用逗号分隔，而且要用英文的逗号。

user: user-2
content: 程序没什么问题，建议楼主注意一下输入格式。注意逗号，不要输入成中文逗号了。  或者在scanf下面打印一下a, b, c，确保输入的没问题，然后在定位exchange是否有问题。
user-0 提问: 求助大神

回复:
user: user-1
content: 就是根据返回的true/false，也可以是1/0，都能代表真假

user: user-2
content: 引用 5 楼 ?Victor.?? 的回复:[quote=引用 4 楼 與蘤舊縐 的回复:] if (true == date1.set(y,m,d))手残党就得反着写    大佬爬杆归来？  [/quote]  饭点

user: user-0
content: 引用 4 楼 與蘤舊縐 的回复:if (true == date1.set(y,m,d))手残党就得反着写    大佬爬杆归来？

user: user-2
content: if (true == date1.set(y,m,d))手残党就得反着写

user: user-3
content: 这样写当然是根据返回值判断了 if(dt.set(yy,mm,dd)) 另外m应该小于1就返回false，否则a[m-1]就出错

user: user-0
content: 板凳板凳  if (date1.set(y,m,d) == true)  是这么操作吗？

user: user-0
content: 沙发沙发
user-0 提问: 【C语言求助】

回复:
user: user-1
content: 正则表达式 ^\s*$

user: user-0
content: 引用 6 楼 proorck2019的回复:正则表达式 ^\s*$ 我学习一下先

user: user-0
content: 引用 4 楼 qybao的回复:for example char c[256]; char *p = gets(c, sizeof(c); stdin); //这里以标准输入为例，可以改成文件指针 if (p!=NULL && c[0]==‘\n’) printf(“空行”); 好嘞我试试！

user: user-0
content: 引用 5 楼 寻开心的回复:看空行如何定义了 只有一个回车的一行当然是 那么这一行只有8个空格算不算 这一行有两个tab算不算  fgets读取一行，判断这一行当中所有的字符是否都是空白字符，也就是上面说的空格，tab和回车 fgets是可以把回车也读进来的 谢谢您我试试！

user: user-2
content: 看空行如何定义了 只有一个回车的一行当然是 那么这一行只有8个空格算不算 这一行有两个tab算不算  fgets读取一行，判断这一行当中所有的字符是否都是空白字符，也就是上面说的空格，tab和回车 fgets是可以把回车也读进来的

user: user-3
content: for example char c[256]; char *p = gets(c, sizeof(c); stdin); //这里以标准输入为例，可以改成文件指针 if (p!=NULL && c[0]==‘\n’) printf(“空行”);

user: user-0
content: 引用 2 楼 初学小菜的回复:或则ch==32直接ascll判断也可以 好嘞谢谢！我试试去

user: user-4
content: 或则ch==32直接ascll判断也可以

user: user-4
content: 用getchar呀，ch=getchar；ch==' ';