Question: 请求大佬帮忙解题，有关使用队列实现密码加密

谢谢大佬的指点。

#include <iostream> #include <cstring>  using namespace std;   int main(void) {     char src[32], key[32];     int i, j;     int key_len;      cout<<"Please input context: ";     cin>>src;     cout<<"Please input key: ";     cin>>key;      key_len = strlen(key);      i = j = 0;     while (src[i]) {         src[i] += key[j % key_len] - '0';         i++;         j++;     }      cout<<src<<endl;     return 0; } 这是不用队列的方法。  其实用一个循环链表存放key是比较好的，减少了频繁调用malloc和free

#include <iostream> #include <cstdlib> using namespace std; #include <string.h>  typedef char DataType; typedef struct node *QueueData;  //队列数据元素结构 struct node {     DataType info;     struct node *next; };  typedef struct queueRecord {     QueueData  front, rear ; } LINKQUEUE;  typedef struct queueRecord *PLinkQueue;  PLinkQueue createEmptyQueue_link( ) {     //创建一个空队列，实质：生成一个LINKQUEUE类型的结点，并给front 和 rear 成员赋值     //请在此处填写代码，完成相应功能     /*-------begin----------*/     PLinkQueue plqu;     plqu = (PLinkQueue)malloc(sizeof(struct queueRecord));     if(plqu!=NULL)     {         plqu->front=NULL;         plqu->rear=NULL;     }     else         cout<<"Out of space"<<endl;     return plqu;     /*-------end----------*/ }  int isEmptyQueue_link(PLinkQueue  queue) {     //判定队列是否为空，实质： 看队列的front指针是否为空，若为空，则队列为空      //请在此处填写代码，完成相应功能     /*-------begin----------*/      return (queue->front==NULL);      /*-------end----------*/ }  void enQueue_link(DataType x, PLinkQueue queue) {     //将数据元素x插入队尾。实质：生成一个struct node类型的结点，并给相应成员赋值后插入队尾     //请在此处填写代码，完成相应功能     /*-------begin----------*/     QueueData p;     p=(QueueData)malloc(sizeof(struct node));     if(p==NULL) {         cout<<"OUt OF PEACE" ;         return;     }     //else     //{     p->info = x;     p->next=NULL;     if( queue->front==NULL)         queue->front = p;     else         queue->rear->next = p;     queue->rear=p;      //}      /*-------end----------*/ }  void qqenQueue_link(QueueData *p,PLinkQueue Q) {     //本函数的功能是将 struct node 类型的结点插入队尾，与enQueue_link(DataType x, PLinkQueue queue)的区别是，不需要生成结点      //请在此处填写代码，完成相应功能     /*-------begin----------*/        /*-------end----------*/  }  DataType deQueue_link(PLinkQueue Q) {     //出队，实质： 取出Q队列的队首结点，返回该结点的数据元素，并将该结点使用enQueue_link(QueueData *p,PLinkQueue Q)插入队尾     //本函数为针对本实验特殊设计，可实现秘钥的循环使用     //请在此处填写代码，完成相应功能     /*-------begin----------*/     QueueData p;     DataType info;     if(Q->front==NULL){         cout<<"Empty queue."<<endl;         return -1;     }     //else     //{     p = Q->front;     info = p->info;     Q->front = p->next;      free(p);     //}       return info;     /*-------end----------*/ }  void decrypt(char src[], char key[], char dest[]) {     /*  参数： src 放的是源文 ； key 放的是秘钥 ； dest 放加密后的密文         加密函数： 步骤提示         1. 初始化一个空队列Q         2. 将key数组的元素逐个插入队列Q         3. 逐个访问src数组的源文，并加密， 使用deQueue_link(Q)函数可得到队首秘钥，并使秘钥循环使用         */     PLinkQueue p;     int i;     char m;      p = createEmptyQueue_link();     //while(i=0, key[i]!='\0', i++)     for (i=0; key[i]!='\0'; i++)     {         enQueue_link(key[i]-'0',p);   //注意输入的是字符串"2345", 要转成数字2345     }     //while(i=0, src[i]!='\0' ,i++)     for (i=0; src[i]!='\0'; i++)     {         m = deQueue_link(p);         dest[i] = src[i] + m;         enQueue_link(m,p);     }  }  int main(void) {     char src[80] , key[20], dest[80] ;      cin>>src ;      cin>>key;     decrypt(src , key , dest);     cout<<dest<<endl; }  供参考～  没必要搞这个麻烦，用一个数组存放秘钥就可以了。

请帮忙看看代码哪出错了，输出不了题目要求

#include <iostream> using namespace std; #include <string.h>  typedef char DataType; typedef struct node *QueueData; //队列数据元素结构 struct node {   DataType info;   struct node *next; };  typedef struct queueRecord {   QueueData  front, rear ; } LINKQUEUE;  typedef struct queueRecord *PLinkQueue;  PLinkQueue createEmptyQueue_link( ) {   //创建一个空队列，实质：生成一个LINKQUEUE类型的结点，并给front 和 rear 成员赋值   //请在此处填写代码，完成相应功能   /*-------begin----------*/   PLinkQueue plqu;   plqu=(PLinkQueue)malloc(sizeof(struct queueRecord));   if(plqu!=NULL)   {     plqu->front=NULL;     plqu->rear=NULL;   }   else     cout<<"Out of space"<<endl;   return plqu;     /*-------end----------*/  }  int isEmptyQueue_link(PLinkQueue  queue) {   //判定队列是否为空，实质： 看队列的front指针是否为空，若为空，则队列为空    //请在此处填写代码，完成相应功能   /*-------begin----------*/    return (queue->front==NULL);    /*-------end----------*/ }  void enQueue_link(DataType x, PLinkQueue queue) {   //将数据元素x插入队尾。实质：生成一个struct node类型的结点，并给相应成员赋值后插入队尾   //请在此处填写代码，完成相应功能   /*-------begin----------*/   QueueData p;   p=(QueueData)malloc(sizeof(struct node));   if(p==NULL)     cout<<"OUt OF PEACE" ;   else   {     p->info=x;     p->next=NULL;     if( queue->front==NULL)       queue->front=p;     else  queue->rear->next=p;     queue->rear=p;    }     /*-------end----------*/ }  void qqenQueue_link(QueueData *p,PLinkQueue Q) {   //本函数的功能是将 struct node 类型的结点插入队尾，与enQueue_link(DataType x, PLinkQueue queue)的区别是，不需要生成结点    //请在此处填写代码，完成相应功能   /*-------begin----------*/      /*-------end----------*/  }  DataType deQueue_link(PLinkQueue Q) {   //出队，实质： 取出Q队列的队首结点，返回该结点的数据元素，并将该结点使用enQueue_link(QueueData *p,PLinkQueue Q)插入队尾   //本函数为针对本实验特殊设计，可实现秘钥的循环使用   //请在此处填写代码，完成相应功能   /*-------begin----------*/   QueueData p;   if(Q->front==NULL) cout<<"Empty queue."<<endl;   else   {     p=Q->front;     Q->front=p->next;     free(p);   }     /*-------end----------*/ }  void decrypt(char src[], char key[], char dest[]) {   /*  参数： src 放的是源文 ； key 放的是秘钥 ； dest 放加密后的密文        加密函数： 步骤提示        1. 初始化一个空队列Q        2. 将key数组的元素逐个插入队列Q        3. 逐个访问src数组的源文，并加密， 使用deQueue_link(Q)函数可得到队首秘钥，并使秘钥循环使用     */   PLinkQueue p;   p=createEmptyQueue_link();   int i;   char m;   while(i=0, key[i]!='\0', i++)   {     enQueue_link(key[i],p);   }   while(i=0, src[i]!='\0' ,i++)   {     m=deQueue_link(p);     dest[i]=src[i]+m;     enQueue_link(m,p);   }  }  int main(void) {   char src[80] , key[20], dest[80] ;    cin>>src ;    cin>>key;   decrypt(src , key , dest);   cout<<dest; }

建议自己先写一写，遇到问题再提出来吧。既然需求描述的这么详细了，那么代码也不很难实现～


Question: 求助贴，输入大写英文字母，求哈弗曼编码，编码后的正文，解码后的正文，调试了一天了，整不出来

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

拥有史上最强 IDE，不会调试吗？  可视化工具都不会用，神也救不了你。  看看变量的值的异常，数组下标越界啊，等等等  还有错误描述一定要清清楚楚，怎么触发的等等一系列信息，不管有用没有，用最精炼的句子描述出来

#include<string.h>  #include<stdlib.h>  #include<stdio.h>  int m,s1,s2; typedef struct  {  	int weight;  	int parent,lchild,rchild;  }HuffmanTree; void Select(HuffmanTree *HT,int n) {      int i,flag=0;      for(i=1;i<=n;i++)      {         if((HT[i].parent==0) && (flag==0))         {             s1=i;             flag=1;             continue;         }         if(HT[s1].weight>HT[i].weight && (!HT[i].parent))             s1=i;     }     flag=0;     for(i=1;i<=n;i++)     {         if((HT[i].parent==0) && (flag==0) && (i!=s1))         {             s2=i;             flag=1;             continue;         }         if(HT[s2].weight>HT[i].weight && (HT[i].parent==0) && (i!=s1))             s2=i;     } }  char **HuffmanCoding(HuffmanTree *HT,char **HC, int w[], int n)  {     int i;      char *cd;      int f,start,c;      if(n<=1) return NULL;            m = 2*n-1;                   HT = (HuffmanTree *)malloc((m+1) * sizeof(HuffmanTree));     for (i=1; i<=n; i++)               {          HT[i].weight=w[i-1];          HT[i].parent=0;          HT[i].lchild=0;          HT[i].rchild=0;      }       for (i=n+1; i<=m; i++)             {          HT[i].weight=0;          HT[i].parent=0;          HT[i].lchild=0;          HT[i].rchild=0;      }      for (i=n+1; i<=m; i++)      {          Select(HT, i-1);          HT[s1].parent = i; HT[s2].parent = i;          HT[i].lchild = s1; HT[i].rchild = s2;          HT[i].weight = HT[s1].weight + HT[s2].weight;      }      HC=(char**)malloc((n+1)*sizeof(char *));       cd=(char*)malloc((n+1)*sizeof(char));          cd[n-1]='\0';                                    for(i=1;i<=n;i++)                               {         start=n-1;               c=i;         f=HT[i].parent;         while(f!=0)         {             if( HT[f].lchild == c)                  cd[--start]='0';              else                  cd[--start]='1';               c=f;             f=HT[f].parent;              HC[i]=(char *)malloc((n-start)*sizeof(char));              strcpy(HC[i],&cd[start]);         }     }     free(cd);     return HC;       }  int main(void)  {      HuffmanTree *HT=NULL;     char **HC=NULL;     int i,j,m,n,k,d; 	int flag=0;    int count[26]; 	char a[100]={'0'}; 	char b[100]={'0'}; 	char c[100]={'0'}; 	int root,p; 	printf("请输入正文:"); 	scanf("%s",a); 	j=strlen(a); 	for(i=0;i<j;i++) 	{ 		if(a[i]>='A'&&a[i]<='Z') 			count[a[i]-'A']++; 		else  		{ 			printf("正文输入有误。"); 			break; 		} 	} 	b[0]=a[0]; 	n=1; 	count[0]=1; 	for(i=1;i<j;i++) 	{ 		flag=0; 		for(m=0;m<n;m++) 			if(a[i]==b[m]) 			{ 				flag=1; 				count[m]++; 			} 		if(flag==0) 		{ 			n++; 			count[n-1]=1; 			b[n-1]=a[i]; 		} 	} 	p=root=2*n-1;     HC=HuffmanCoding(HT,HC,count,n);      printf("哈夫曼编码为:\n");      for(i = 1;i <= n;i++)     printf("%5c%4d:  %s\n",b[i-1],count[i-1],HC[i]);  	printf("正文编码为："); 	for(i=0;i<j;i++) 	{ 		for(m=0;m<n;m++) 			if(a[i]==b[m]) 			{ 				printf("%s",HC[m+1]); 				strcat(c,HC[m+1]); 			} 	} 	printf("\n解码后的正文为:"); 	d=strlen(c); 	for(i=1;i<d;i++) 	{ 		if(c[i]=='0') 			p=HT[p].lchild; 		else if(c[i]=='1') 			p=HT[p].rchild; 		if((HT[p].lchild==0)||(HT[p].rchild==0)) 		{ 			for(k=0;k<n;k++) 				if(HT[p].weight==count[k]) 					printf("%s",b[k]); 			p=root; 		} 	}      return 0; }

引用 1 楼 user-3的回复:乱的像二进制文件一样。CSDN论坛新手指南 下面是刚刚在电脑上发的，求大神帮忙看看

乱的像二进制文件一样。CSDN论坛新手指南


Question: initializer element is not constant怎么解决

我用小学水平的英语直译  用初中水平的词汇量 都能看懂 初始化元素不是常量 怎么解决? 改成常量呗

你的代码呢？建议直接贴出来吧～

不知道。除非你把代码展示出来。。。CSDN论坛新手指南


Question: 指向多维数组指针的指针长度

引用 7 楼 ²⁰¹⁹₀₉.₀₁清梦 的回复:[quote=引用 6 楼 user-3的回复:]没写全的也是地址。。。你就不能自己试试啊。  打扰了... 没电脑 手机码有点麻烦，不过还是亲手试一下会记得牢，谢了[/quote] 如果将来想从事这个行业，建议还是搭个环境，输入代码编译运行一下～

引用 3 楼 ²⁰¹⁹₀₉.₀₁清梦 的回复:[quote=引用 1 楼 user-3的回复:]我猜想： 括号里应该写36（2×3×6）吧 这道题 array[3][1][2][5] &array[3][1][2][5] 有区别吗？[/quote] 有区别，类型不一样。 建议输入机器，自己通过sizeof，%p等看一下每个变量的内容，纸上谈兵进步不如实践来的多和快～

引用 7 楼 ²⁰¹⁹₀₉.₀₁清梦 的回复:[quote=引用 6 楼 user-3的回复:]没写全的也是地址。。。你就不能自己试试啊。  打扰了... 没电脑 手机码有点麻烦，不过还是亲手试一下会记得牢，谢了[/quote]哦，我不知道，不好意思。自己动手记得确实牢些。

引用 6 楼 user-3的回复:没写全的也是地址。。。你就不能自己试试啊。  打扰了... 没电脑 手机码有点麻烦，不过还是亲手试一下会记得牢，谢了

没写全的也是地址。。。你就不能自己试试啊。

引用 4 楼 user-3的回复:  一个是值，一个是地址。 emmmm...  那没写全的也是值咯? 比如array[1][0][2]

一个是值，一个是地址。

引用 1 楼 user-3的回复:我猜想： 括号里应该写36（2×3×6）吧 这道题 array[3][1][2][5] &array[3][1][2][5] 有区别吗？

引用 1 楼 user-3的回复:我猜想： 括号里应该写36（2×3×6）吧 如果是36的话，那下面例题我就明白了。

我猜想： 括号里应该写36（2×3×6）吧


Question: 找大佬帮忙做作业，（手动滑稽）

引用 2 楼 jiht594 的回复:标上多少钱比较好. 你毕竟不是大家亲生的 你这样有点过了，可以不回答别人的问题，但你后面的那句很侮辱人～

标上多少钱比较好. 你毕竟不是大家亲生的

自己做。CSDN论坛新手指南（手动滑稽）


Question: C语言,输入长度小于数组长度是 怎么结束for循环

输入回车就会提前结束循环了


Question: 字符串数组，我用了退格符\b怎么就能实现两个字符串的连接，还有其他办法吗？

又是你，可以用curse库输出，好像是cprintf函数


Question: 新手求教

可能是印刷错误；不要多想了。 从下面的语句可知，中间的那句就是定义了一个结构体指针p。

引用 8 楼 qq_45673225 的回复:[quote=引用 7 楼 SuperDay的回复:][quote=引用 6 楼 qq_45673225 的回复:] 这让我越来越糊涂了，不懂  你看看下文，明明白白的写着是p_student，这是一个完整的变量名啊，不是什么符号标记[/quote] 那下面的赋值不应该写成p_student =&student吗[/quote]  那个写错了，尽信书不如无书，这句话有没听说？

引用 7 楼 SuperDay的回复:[quote=引用 6 楼 qq_45673225 的回复:] 这让我越来越糊涂了，不懂  你看看下文，明明白白的写着是p_student，这是一个完整的变量名啊，不是什么符号标记[/quote] 那下面的赋值不应该写成p_student =&student吗

引用 6 楼 qq_45673225 的回复:这让我越来越糊涂了，不懂  你看看下文，明明白白的写着是p_student，这是一个完整的变量名啊，不是什么符号标记

这让我越来越糊涂了，不懂

引用 4 楼 qq_45673225 的回复:[quote=引用 1 楼 user-3的回复:]CSDN论坛新手指南   当成一个符号。没特殊意义。 应该是标记的意思吧，没实际意义？[/quote]你也可以换成abasldgvasldf3542346中的任何一个都行，但是不推荐这样做。

引用 1 楼 user-3的回复:CSDN论坛新手指南   当成一个符号。没特殊意义。 应该是标记的意思吧，没实际意义？

这书上写错了吧。下面这个应该是p_srudent = &student; 这个是下划线，不是减号，下划线可以作为变量名的一部分，甚至可以打头

CSDN论坛新手指南   当成一个符号。没特殊意义。


Question: break和continue的差别

continue是从当前语句开始向前运行，即continue后面的语句不会被执行。 break是跳出循环，即遇到break就从循环里跳出来，同样后面的语句不会执行，等于停止循环。

旧贴请及时结贴。CSDN论坛新手指南  break是跳出循环，不执行循环后面的语句 continue是跳过循环下面的语句，直接执行for(;;第三部分)

在一个循环体中，break将结束整个循环，而continue是结束当前这次循环体的执行，继续下一轮循环 你的程序中，如果if的条件为真，则跳转至i++，再判断i<10 而如果将continue换成break，则if条件为真时，跳转到循环后面，执行printf语句


Question: 新手C语言急求

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

在这里发代码。CSDN论坛新手指南

引用 4 楼   大城小爱 的回复:[quote=引用 1 楼 與蘤舊縐的回复:]反转输出 or 倒数之和 ? 递归或者存入数组倒序输出：循环判断是否整除，是则result+=倒数 。。。才学c语言没几天，感觉您说的字面不太理解。。。[/quote]  缅怀一下我大Python~~~ 你还没学三目运算符吗~~ for（int =1；i<=n；i++） if(可以整除) {result+=该数的倒数}result应该是浮点型

引用 2 楼 wowpH的回复:for循环遍历1~n的所有数，判断是否能被3或者7整除，能的话将它的倒数加到一个变量中。最后输出变量即可。 同上回复。。。。不好意思啊

引用 1 楼 與蘤舊縐的回复:反转输出 or 倒数之和 ? 递归或者存入数组倒序输出：循环判断是否整除，是则result+=倒数 。。。才学c语言没几天，感觉您说的字面不太理解。。。

或者你先写个找出1~n中能被3或者7整除的数的程序也可以。CSDN论坛新手指南


Question: 求大神解释一下这个程序PWM怎么产生的？


Question: C语言新手求教

\\输出\ \n是换行符 \放在末尾是连接符。表示和下一行的字符串是连在一起的。

要转义字符，你写printf("\n")，只会换行而已吧


Question: C语言下的OpenCV

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10993204.html


Question: 求助大佬，C语言程序中实现文件的增删改查

#include<stdio.h>                //头文件 #include<stdlib.h>               //头文件 #include<string.h>               //头文件  typedef struct {     int  score;               /*定义编号*/     char name[10];            /*定义商品名称*/     char num[15];             /*定义数量*/     char email[20]; /*定义邮箱*/     char age[8]; /*定义保质期*/     char adds[20]; /*定义所在位置*/  }Person;  Person pe[80];  int menu_select() {     char c;     do{         system("cls");         printf("\t\t欢迎进入超市内部信息网\n");        //进入时显示的标题         printf("\t\t你可以选择以下内容\n");                           //进入时显示的标题         printf("\t\t *****嘉苑超市系统***** \n");          printf("\t\t 1. 添加超市记录  \n");                               //添加超市记录         printf("\t\t2. 显示超市记录  \n");                               //显示超市记录         printf("\t\t3. 删除超市记录  \n");                               //删除超市记录         printf("\t\t 4. 查询超市记录  \n");                               //查询超市记录         printf("\t\t 5. 修改超市记录  \n");                               //修改超市记录         printf("\t\t0. 退出运行程序  \n");                               //退出运行程序         printf("\t\\n");         printf("\t\t请您选择(0-5):");           //进行选择         c=getchar();         if (c == '\n')             continue;     }while(c<'0'||c>'5');      return(c-'0'); }  int Input(Person per[],int n)                             //开始增加记录 {     int a=0;     char xh='a',x[10];     while(xh!='n'&&xh!='N')     {         printf("\t编号:");                              //增加编号记录         //scanf("\t%d",&per[n+a].score);         scanf("%d",&per[n+a].score);         printf("\t商品名称:");                          //增加商品名称记录         //scanf("\t%s",per[n+a].name);         scanf("%s",per[n+a].name);         printf("\t保质期:");                            //增加保质期记录         //scanf("\t%s",per[n+a].age);         scanf("%s",per[n+a].age);         printf("\t数量:");                              //增加数量记录         //scanf("\t%s",per[n+a].num);         scanf("%s",per[n+a].num);         printf("\t所在位置:");                          //增加所在位置记录         //scanf("\t%s",per[n+a].adds);         scanf("%s",per[n+a].adds);         printf("\t电子邮箱:");                          ////增加电子邮箱记录         //scanf("\t%s",per[n+a].email);         scanf("%s",per[n+a].email);         getchar();   //for '\n'         gets(x);         printf("\n\t是否继续添加?(Y/N)");         //scanf("\t%c",&xh);                                  //提示您是否继续添加         scanf("%c",&xh);                                  //提示您是否继续添加         a++;     }     return(n+a); }  void Display(Person per[],int n)         //进行显示所添加的记录，其编号 名称 数量 保质期 所在位置 电子邮箱 {     int i;     printf("----------------------------------------------------------------------\n");                          /*格式*/     printf("编号    名称     数量      保质期     所在位置        电子邮箱\n");     printf("----------------------------------------------------------------------\n");     for(i=1;i<n+1;i++)     {         printf("%-7d%-10s%-9s%-13s%-15s%-14s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email); //设置每个的长度         if(i>1&&i%10==0)         {             printf("\t-----------------------------------\n");             printf("\t");             system("pause");             printf("\t-----------------------------------\n");         }     }     printf("----------------------------------------------------------------------\n");     system("pause"); }    int Delete_a_record(Person per[],int n)         //删除记录的程序 {     char s[20];     int i=0,j;                                              //进行定义     printf("\t请输入想删除记录中的商品名称:");              //请输入想删除记录中的商品名称     scanf("%s",s);     while(strcmp(per[i].name,s)!=0&&i<n)         i++;               //首先输入商品名称进行查询     if(i==n)     {         printf("\t超市系统暂无!\n");         return(n);     }     for(j=i;j<n-1;j++)                                      //使用循环进行查询，找到相应的记录     {         strcpy(per[j].num,per[j+1].num);                    //查询数量         strcpy(per[j].name,per[j+1].name);                  //查询商品名称         strcpy(per[j].age,per[j+1].age);                    //查询保质期         strcpy(per[j].adds,per[j+1].adds);                  //查询所在地址         strcpy(per[j].email,per[j+1].email);                //查询电子邮件         per[j].score=per[j+1].score;     }     printf("\t\t\t已经成功删除!\n");                        //提示删除成功     return(n-1); }  void Query_a_record(Person per[],int n) {      int m;     printf("\t\n请选择查询方式:\n");                           //请选择查询方式      printf("\t1------商品名称 \n");                              // 商品名称     printf("\t2------联系电话 \n");                              // 联系电话     printf("\t3------所在地址 \n");                              // 所在地址     printf("\t4------确认返回 \n");                              // 确认返回     printf("请选择:");                                          //输入选择值     scanf("%d",&m);     while(m!=1&&m!=2&&m!=3&&m!=4)                                //判断输入的是否正确，如果不正确则进行提示     {         printf("输入错误，请重新选择:");         scanf("%d",&m);     }      if(m==1)                                                     //当用用户输入指令1时     {         char s[20];         int i=0;         printf("\t请输入想查询的商品名称:");    //输入先要查询的名称，如果名称不对的话是查不到的         //scanf("\t%s",s);         scanf("%s",s);         while(strcmp(per[i].name,s)!=0&&i<n)             i++;              //当查询不到的时候，系统会提示你超市系统里面没有         if(i==n)         {             printf("\t超市系统暂无!\n");             return;         }                                                     //如果输入正确的时候 ，会显示出你所要查询的内容         printf("\t编号: %d\n",per[i].score);                     //显示编号         //printf("\t保质期s\n",per[i].age);                        //显示保质期         printf("\t保质期%s\n",per[i].age);                        //显示保质期         printf("\t电话号码: %s\n",per[i].num);                   //显示电话号码         printf("\t通讯地址: %s\n",per[i].adds);                  //显示通讯地址         printf("\t电子邮箱: %s\n",per[i].email);                 //显示电子邮箱     } ;      if(m==2)                                           //当用用户输入指令2时     {         char s[20];                            //输入先要查询的数量，如果名称不对的话是查不到的         int i=0;         printf("\t请输入想查询的数量:");         //scanf("\t%s",s);         scanf("%s",s);         while(strcmp(per[i].num,s)!=0&&i<n) i++;               //当查询不到的时候，系统会提示你超市系统里面没有         if(i==n)         {             printf("\t超市系统暂无\n");             return;          }         printf("\t商品编号: %d\n",per[i].score);                       //显示商品编号         printf("\t商品名称: %s\n",per[i].name);                        //显示商品名称         printf("\t商品保质期: %s\n",per[i].age);                       //显示商品保质期         printf("\t所在位置: %s\n",per[i].adds);                        //显示所在位置         printf("\t电子邮箱: %s\n",per[i].email);                       //显示电子邮箱     } ;      if(m==3)                             //当用用户输入指令3时     {         char s[20];                                    ////输入先要查询的名称，如果名称不对的话是查不到的         int i=0;         printf("\t请输入想查询的地址:");         //scanf("\t%s",s);         scanf("%s",s);         while(strcmp(per[i].adds,s)!=0&&i<n) i++;                  //当查询不到的时候，系统会提示你超市系统里面没有         if(i==n)         {             printf("\t超市系统暂无!\n");             return;         }         printf("\t商品编号: %d\n",per[i].score);                         //显示商品编号         printf("\t商品名称: %s\n",per[i].name);                          //显示商品名称         printf("\t商品保质期: %s\n",per[i].age);                         //显示商品保质期         printf("\t电话号码: %s\n",per[i].num);                           //显示电话号码         printf("\t电子邮箱: %s\n",per[i].email);                         //显示电子邮箱     } ; }   void Change(Person per[],int n)                     //修改的程序 {     char s[20];     int i=0;     printf("\t请输入想修改的记录中的商品名称:");      //首先输入修改的记录中的商品名称     scanf("%s",s);     while(strcmp(per[i].name,s)!=0&&i<n) i++;               //会在系统里面查找是否有这个记录，如果没有则提示超市系统暂无此记录     if(i==n)     {         printf("\t超市系统暂无!\n");         return;     }     printf("\t编号:");                  //修改的编号，把之前的改成现在的     scanf("\t%d",&per[i].score);     printf("\t名称:");                  //修改的名称，把之前的改成现在的     scanf("\t%s",per[i].name);     printf("\t保质期:");                //修改的保质期，把之前的改成现在的     scanf("\t%s",per[i].age);     printf("\t数量:");                  //修改的数量，把之前的改成现在的     scanf("\t%s",per[i].num);     printf("\t所在位置:");              //修改的所在位置，把之前的改成现在的     scanf("\t%s",per[i].adds);     printf("\t电子邮箱:");              //修改的电子邮箱，把之前的改成现在的     scanf("\t%s",per[i].email);     printf("\t修改成功！"); }   //void main()                 //主函数 int main()                 //主函数 {     int x=0;     for(;;)     {         switch(menu_select())                       //根据用户在主界面上输入的指令在进行操作，当输入1时则添加记录到超市系统         {             case 1:                 printf("\n\t添加记录到超市系统\n");                 x=Input(pe,x);                 break;              case 2:                 printf("\n\t\t\t    超市系统记录表\n");     //根据用户在主界面上输入的指令在进行操作，当输入2时则显示到超市系统的记录                 Display(pe,x);                 break;              case 3:                 printf("\n\t从超市系统中删除记录\n");      //根据用户在主界面上输入的指令在进行操作，当输入3时则删除记录到超市系统                 x=Delete_a_record(pe,x);                 printf("\t");                 system("pause");                 break;              case 4:                 printf("\n\t在超市系统中查找记录\n");       //根据用户在主界面上输入的指令在进行操作，当输入4时则查找记录在到超市系统                 Query_a_record(pe,x);                 printf("\t");                 system("pause");                 break;              case 5:                 printf("\n\t修改超市系统中的记录\n");      //根据用户在主界面上输入的指令在进行操作，当输入5时则修改记录到超市系统                 Change(pe,x);                 printf("\t");                 system("pause");                 break;              case 0:                 printf("\n\t\t谢谢使用，再见!\n");         //根据用户在主界面上输入的指令在进行操作，当输入0时，结束程序                 printf("\n\t\t");                 exit(0);         }     } }  供参考～

CSDN论坛新手指南[/quote][/quote] 代码整理一下，看的累


Question: 求救，我太南了

变了。。	CSDN论坛新手指南

如何计算？需求是什么？ 建议贴出你的代码～


Question: 这个题看不懂

引用 6 楼 wowpH的回复:找个好点的网站刷题。 我们学校老师出的题，团队训练用。

找个好点的网站刷题。

就是这个题,完全不懂他在讲什么。

尴了个尬，我好像也没看懂题意。。。

引用 2 楼 qqdreamypp 的回复:翻译成了中文还是看不懂  输入的第一行是前面已经添加的数的数量，第二行是几个不同的整数，表示索引 输出是下一组测试数所需要的默认索引值 结论：话说一半，意思表达不清楚，差评

翻译成了中文还是看不懂

翻译成英文就知道了。


Question: 烧脑奇怪数-救救孩子

上面已经有人用回溯法求解了子集，但是如果子集里面个数不是很多的话，是可以暴力用二进制来表示子集的。  [子集生成 递归回溯](https://blog.csdn.net/Africa_South/article/details/102612501) long long 限制子集个数在63以内  #include<iostream> #include<string> #include<cstring> #include<vector> #include<algorithm> using namespace std;  typedef long long LL; int factor[1010]; // 因子 int sum, cnt; // 因子的和，因子的个数 int subset; // 子集和,可以用sum代替 bool isYingshu(int num) { 	// 拆分一个数num，然后因子存入factor[]，并返回是不是盈数 	cnt = 0, sum = 0; 	factor[cnt++] = 1; sum += 1; // 1 肯定是因子 	for (int i = 2; i*i <= num; i++) { 		if (num % i == 0) { 			factor[cnt++] = i; sum += i; 			factor[cnt++] = num / i; sum += (num / i); 			if (i*i == num) { // 多算了一个 				cnt--; sum -= i; 			} 		} 	} 	if (sum <= num) return false; 	else return true; }  bool isStrange(int num) { 	// 返回是不是奇怪数 	if (!isYingshu(num)) return false; 	LL len = ((LL)1 << cnt); // 总共的子集情况 	for (LL i = 0; i < len; i++) { 		subset = 0; 		for (LL j = 0; j < cnt; j++) { 			if (i & ((LL)1 << j)) subset += factor[j]; 		} 		if (subset == num) return false; 	} 	return true; }  int main() { 	for (int i = 70; i <= 1000; i++) { 		if (isStrange(i)) { 			printf("该数%d，因子个数%d\n", i,cnt); 		} 	} 	return 0; }

#include <iostream> #include<stdio.h>  #include<stdlib.h> #include<math.h> #define  MAX  50 int back(int i, int s, int n); int static t; int i, j, n, k, sum=0, a[MAX], num; int flag = 1; int b[MAX] = { 0 };  //初始化数组b,给定数组a中的元素一个状态，类似排列组合  int main() { for (n =4; n <= 4; n++) { int i = 0,  num = 0; for (j = 2; j <= n - 1; j++) //找 n的所有因子  { if (n % j == 0) { a[i] = j;    //将n的因子存在数组a[1000]中  sum = sum + j;// 计算所有因子的和  i++;     //数组的序号+1  num++; //计算数组的大小，n的所有因子数  } } if(sum!=0）{} sum = sum + 1;  //1也是n的因子  a[num] = 1;  //把1赋给数组a[1000]  if (sum > n)  //判断n是否为赢数  { t = num + 1;    back(1, t, n);//把n的因子数赋给t  if (flag)//第1个元素开始 ，求n所有因子的子集的和并与sum比较 printf("%d是奇怪数", n); break;//找到第一个奇怪数后停止循环   } }   return 0; }    int back(int i, int s, int n) {  int k, Sum = 0; if (i > s)//判断a中的元素的状态是否都已确定  { for (k = 1; k <= s; k++)// 对a中的元素 进行排列组合  {  if (b[k])    //判断第K个元素的状态 { if (a[k] != 0) {  Sum += a[k];  } } } if (n == Sum) flag = 0;   return flag;//如果满足这个条件，就不用执行后面为a中的元素赋予一种状态的操作 }  { b[i] = 1;                //对a中元素的状态进行排列组合  back(i + 1, t, n); b[i] = 0; back(i + 1, t, n); return flag; } }

这个好高深啊，弄不懂

奇怪数为这样一个整数，①：除了自身以外所有因子之和大于这个数本身（首先必须是盈数）；②：除了自身以外所有因子的集合，没有任何一个子集中所有数的和等于这个数本身，例如70就是一个奇怪数，求1000以内的第二个奇怪数  好难呀

10000以内7个数： 70 836 4030 5830 7192 7912 9272

数学就是那么深奥真正有用 的地方很少。我们要学会有的放矢的学习

兄弟 ，这行代码是你自己写。

除了暴力外筛法+分解定理也可做，打一张1000内的表，再维护2张不符合两个条件的表分别筛一下

什么意思？没用看懂哈哈

打错了不好意思正确答案836

答案不正确，正确答案是839

这真的能运行出正确结果吗

引用 36 楼 user-11的回复:memset初始化数组为0。 刚试了一下。这句代码是多余的。可以删掉。  我习惯清零了，所以就写了。 谢谢大佬，后面用回溯法求子集的还是不懂，我再仔细看看，非常感谢您

兄弟这程序运行结果不对

引用 32 楼 user-11的回复:好了，改对了。  // user-11 // 2019年10月31日10:10:03 #include <stdio.h> #include <math.h> #include <string.h>  #define TRUE 1 #define FALSE 0 #define MAX_NUM 1000  int strangeNumber(int);// 判断是否是奇怪数  int sum;// 因子的和 int factor[MAX_NUM];// 保存因子 int factorNum;// 因子个数 int abundantNumber(int);// 判断是否是盈数  int back(int, int);// 回溯判断是否有子集的和是num  int main(void) { 	for (int i = 71; i <= 1000; ++i) { 		if (TRUE == strangeNumber(i)) { 			printf("%d\n", i); 			break; 		} 	} 	return 0; }  int strangeNumber(int num) { 	if (FALSE == abundantNumber(num)) { 		return FALSE;// 不是盈数，即不是奇怪数 	} 	if (FALSE == back(0, num)) { 		return FALSE;// 存在子集的和为num，即不是奇怪数 	} 	return TRUE; }  int abundantNumber(int num) { 	// 初始化 	memset(factor, 0, sizeof(factor)); 	factorNum = 0; 	factor[factorNum++] = 1;// 1肯定是因子 	sum = 1; 	int max = (int)sqrt(num); 	// 循环找到num的所有因子 	for (int i = 2; i <= max; ++i) { 		if (0 == num % i) { 			factor[factorNum++] = i; 			factor[factorNum++] = num / i; 			sum += i + num / i; 		} 	} 	// num是开方数，那么循环里面max加了两遍，要减掉多余的 	if (max * max == num) { 		--factorNum; 		sum -= max; 	} 	return sum <= num ? FALSE : TRUE; }  int back(int index, int left) { 	if (index >= factorNum) { 		return 0 == left ? FALSE : TRUE; 	} 	if (FALSE == back(index + 1, left)) {// 不选择第index个数 		return FALSE; 	} 	// 选择第index个数，剩余的减去当前数 	if (FALSE == back(index + 1, left - factor[index])) { 		return FALSE; 	} 	return TRUE; }   但是menset是干什么的函数呢

还有这这能运行出来不😂😂我急用

兄弟，你这是用啥写的，粘贴到c＋＋上一篇红色

谢谢大哥，小女子无以为报，只能表达对您的景仰与感谢

我发现搜不到这个题目的博客。所以整理成博客了，不迷路，哈哈哈哈：https://blog.csdn.net/pfdvnah/article/details/102832648


Question: 请大神指导

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

CSDN论坛新手指南[/quote]

楼上的大佬都说了，其实这个问题很容易查出来，编译器单步跟踪，1分钟不到就OK了

最后的else后面多了一个分号；

最后一个else(x==0);中的分号表示判断语句结束了，他下面的大括号包起来的内容肯定都会运行的


Question: 已经声明了数组的元素个数，怎么还能追加元素？

数组越界了，后果上面给的连接中有说。 这里说一下语言对越界的处理：C、C++语言中不处理，只能程序员写程序时小心不要越界。有些其他语言会处理，比如pascal。至于说哪种方式更正确？没有正确与否，就是一个设计目标和理念的问题。C、C++更自由一些，但是使用时需要更小心

可以看看这个


Question: 这是一个评委打分程序，要求从高到低输出成绩和相应的评委编号

也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

考虑学习一下结构体类型。结构体类型排序可参考：https://blog.csdn.net/pfdvnah/article/details/90239385 CSDN论坛新手指南


Question: 如何用C语言实现以下代码

char mumstr[256]={}; char childstr[256]={};  char* res=strstr(mumstr,childstr);  if(res==NULL){     printf("－1\n"); }  printf("%d\n",(int)(res－mumstr));

可否如此：只做一个循环（母串依次后移），把母串当前位置到与匹配串相同长度数据拷贝到过程量，用字符串比较函数判断二者是否相等，如果相等返回循环值，否则继续；最后没有匹配项，则返回-1。

楼上有正解，参考一下

操作指针啊，返回的int pos=pStr-str1，pos就是下标，如果是位置的话就再+1

引用 21 楼 离水的鱼儿的回复:char *str=“50” char *str1=“1050” char*pStr=strstr（str1，str）; 如果找到了 pStr存储的就是查找的字符串首地址，否则为空。 这个我知道了，就是不知道怎么读出在数组的位数

19楼正解，楼主可以参考。

#include <stdio.h> #include<string.h>  int cmp(char* p1, char* p2) { 	int temp = 0,temp1=0; 	char* p3 = p2; 	for (char* p4=p1; *p1 != '\0'; p1++) 	{ 		 		for (p2 = p3; *p2 != '\0'; p2++) 		{  			if (*p2 == *p1) 			{ 				char* p5 = p1; 				for (; (*p2 != NULL) && (*p1 != NULL); p2++, p1++) 				{ 					if (*p2 == *p1) { temp = 1; temp1 =( p5 - p4)+1; 					} 					else { temp = 0; temp1 = 0; break; } 				}  			} 			if (temp == 1)break; 		} 		if (temp == 1)break; 	} 	return temp1; } int main(void) {

strstr看一下，字数字数

#include <stdio.h> #include<string.h>  int cmp(char* p1, char* p2) { 	int temp = 0; 	char* p3 = p2; 	for (int i = 0; *p1!= '\0'; p1++) 	{ 		for (p2=p3; *p2!= '\0'; p2++) 		{  			if (*p2 == *p1) 			{ 				for (; (*p2 != NULL) && (*p1 != NULL); p2++,p1++) 				{ 					if (*p2 == *p1) { temp = 1; } 					else { temp = 0; break; } 				} 				 			}  		} 	} 	return temp; } int main(void) { 	char digit1[10]; 	char digit2[10]; 	 	int i, j, temp = 0; 	printf("请输入第一个数字串：\n"); 	gets_s(digit1); 	printf("请输入第二个数字串：\n"); 	gets_s(digit2); 	char* p1=NULL, * p2=NULL; 	int a = strlen(digit1); 	int b = strlen(digit2); 	if (strlen(digit1) <=strlen(digit2)) 	{ 		p1 = digit2; 		p2 = digit1; 	} 	else 	{ 		p1 = digit1; 		p2 = digit2; 	} 	temp = cmp(p1, p2); 	printf("%d", temp);  	return 0; }  这一段代码可以 ，我编译过了，有问题可以联系我

这个要自己去想，想不出来就用现成函数算了  https://blog.csdn.net/huan447882949/article/details/82852423

引用 15 楼 user-7的回复:[quote=引用 14 楼 qq_45768871 的回复:] [quote=引用 13 楼 user-7的回复:][quote=引用 12 楼 qq_45768871 的回复:] [quote=引用 11 楼 user-7的回复:]digit2[i]==NULL这个根本就不对！而且字符建议用'\0'增加可读性 digit2[i] != '\0' 这个解决了，但是还是没有发哪里逻辑有问题[/quote]  你这个大角度的思路就不对了，潜在的嵌入的字符串，是需要跟随比较的（同时移动位置），这个根本就不对路，逻辑就更不需要考虑了[/quote] 同时移动？有点不明白[/quote]  真是晕啊，好比你给的例子，遇到5相等的，接下来要同时往后移动，看看0是不是也相等，所以要到所有的字符都对上，你才能认为确实是内嵌啊。建议你写程序的时候，把思路全部捋清楚并且能用脑子来运行一下，才能对题。你这样完全就是跑题了[/quote] 那这个应该怎么写呢？

引用 14 楼 qq_45768871 的回复:[quote=引用 13 楼 user-7的回复:][quote=引用 12 楼 qq_45768871 的回复:] [quote=引用 11 楼 user-7的回复:]digit2[i]==NULL这个根本就不对！而且字符建议用'\0'增加可读性 digit2[i] != '\0' 这个解决了，但是还是没有发哪里逻辑有问题[/quote]  你这个大角度的思路就不对了，潜在的嵌入的字符串，是需要跟随比较的（同时移动位置），这个根本就不对路，逻辑就更不需要考虑了[/quote] 同时移动？有点不明白[/quote]  真是晕啊，好比你给的例子，遇到5相等的，接下来要同时往后移动，看看0是不是也相等，所以要到所有的字符都对上，你才能认为确实是内嵌啊。建议你写程序的时候，把思路全部捋清楚并且能用脑子来运行一下，才能对题。你这样完全就是跑题了

引用 13 楼 user-7的回复:[quote=引用 12 楼 qq_45768871 的回复:] [quote=引用 11 楼 user-7的回复:]digit2[i]==NULL这个根本就不对！而且字符建议用'\0'增加可读性 digit2[i] != '\0' 这个解决了，但是还是没有发哪里逻辑有问题[/quote]  你这个大角度的思路就不对了，潜在的嵌入的字符串，是需要跟随比较的（同时移动位置），这个根本就不对路，逻辑就更不需要考虑了[/quote] 同时移动？有点不明白

引用 12 楼 qq_45768871 的回复:[quote=引用 11 楼 user-7的回复:]digit2[i]==NULL这个根本就不对！而且字符建议用'\0'增加可读性 digit2[i] != '\0' 这个解决了，但是还是没有发哪里逻辑有问题[/quote]  你这个大角度的思路就不对了，潜在的嵌入的字符串，是需要跟随比较的（同时移动位置），这个根本就不对路，逻辑就更不需要考虑了

引用 11 楼 user-7的回复:digit2[i]==NULL这个根本就不对！而且字符建议用'\0'增加可读性 digit2[i] != '\0' 这个解决了，但是还是没有发哪里逻辑有问题

引用 9 楼 user-7的回复:[quote=引用 2 楼 qq_45768871 的回复:] [quote=引用 1 楼 user-7的回复:]strstr看一下，字数字数 但是不知道怎么实现，逻辑有点问题[/quote]  逻辑有问题的代码，可以贴出来一下[/quote] #include<stdio.h> #include<string.h> int main() { 	char digit1[10]; 	char digit2[10]; 	int i,j,temp=0; 	printf("请输入第一个数字串：\n"); 	gets(digit1); 	printf("请输入第二个数字串：\n"); 	gets(digit2); 	for(i=0;digit2[i]==NULL;i++) 	{ 		for(j=0;digit1[j]==NULL;j++) 		{  		if(digit2[i]==digit1[j])  		{ 			temp=j+1;	 			break; 		}  		} 	} 	printf("%d",temp); 	return 0; }    只实现一个的逻辑有问题

引用 2 楼 qq_45768871 的回复:[quote=引用 1 楼 user-7的回复:]strstr看一下，字数字数 但是不知道怎么实现，逻辑有点问题[/quote]  逻辑有问题的代码，可以贴出来一下

引用 7 楼 wowpH的回复:[quote=引用 6 楼 qq_45768871 的回复:] [quote=引用 5 楼 wowpH的回复:]我发的链接，不要选择性忽略（内心：不要选择性眼瞎）。 用的是手机，没有看到在哪结帖[/quote]哦哦，手机不能结贴。[/quote] 好吧，那我用电脑试一下吧。


Question: VS malloc debug 内存报错：Buffer is too small

joke是指针类型，因此在32位系统里，它的sizeof长度就是4.

你的代码的第25行的第2个参数换成length

引用 8 楼 FlowingSoul 的回复:引用 6 楼 wowpH 的回复:发个论坛指南被管理员给删除了（这叫忘恩负义），我的解答你（管理员）咋不删。。。。。。。。。麻烦楼主结贴。CSDN论坛新手指南你删我也发。可能链接都不让发吧，我点进你的文章看了，有点帮助基操，勿六。

引用 7 楼 user-3 的回复:[quote=引用 6 楼 wowpH 的回复:] 发个论坛指南被管理员给删除了（这叫忘恩负义），我的解答你（管理员）咋不删。。。。。。。。。麻烦楼主结贴。CSDN论坛新手指南你删我也发。 有道是屁股决定脑袋，这个论坛的奇怪现象也不是一天两天了。就是不知道这样折腾下去，大家都不来了肿么办？[/quote]可能仗着自己（论坛）有点底子，使劲挥霍吧。

引用 6 楼 wowpH 的回复:发个论坛指南被管理员给删除了（这叫忘恩负义），我的解答你（管理员）咋不删。。。。。。。。。麻烦楼主结贴。CSDN论坛新手指南你删我也发。 有道是屁股决定脑袋，这个论坛的奇怪现象也不是一天两天了。就是不知道这样折腾下去，大家都不来了肿么办？

我自己解决了，sizeof不能计算动态分配空间的大小，把joke分配的内存固定为一个变量就行了 // Program 6.4 Joining strings // 2019年10月30日13:57:15 #define __STDC_WANT_LIB_EXT1__ 1        // Make optional versions of functions available #include <string.h>                     // Header for string functions         #include <stdio.h> #include <malloc.h>  int main(void) { 	char preamble[] = "The joke is:\n\n"; 	char str[][40] = { 					   "My dog hasn\'t got any nose.\n", 					   "How does your dog smell then?\n", 					   "My dog smells horrible.\n" 	}; 	unsigned int strCount = sizeof(str) / sizeof(str[0]);  	// Find the total length of all the strings in str                 	unsigned int length = 0; 	for (unsigned int i = 0; i < strCount; ++i) 		length += strnlen(str[i], sizeof(str[i]));  	// Create array to hold all strings combined 	int destz = length + strnlen_s(preamble, sizeof(preamble)) + 1; 	char *joke = (char *)malloc(destz);  	if (strncpy_s(joke, destz, preamble, sizeof(preamble))) 	{ 		printf("Error copying preamble to joke.\n"); 		return 1; 	} 	// Concatenate strings in joke 	for (unsigned int i = 0; i < strCount; ++i) 	{ 		if (strncat_s(joke, destz, str[i], sizeof(str[i]))) 		{ 			printf("Error copying string str[%u].\n", i); 			return 2; 		} 	}  	printf("%s\n", joke); 	free(joke); 	getchar(); 	return 0; }


Question: 大佬求助，这个一年中求第几天的程序哪里不对

引用 4 楼 huangsuo 的回复:[quote=引用 1 楼 不闻窗外事的回复:]没有不对啊，只是你输入的时候需要这样输入   “2019,4,4”  输入引号里面的，不能不加逗号 可是为什么我编译运行不了[/quote]建议提供报错截图。CSDN论坛新手指南

引用 1 楼 不闻窗外事的回复:没有不对啊，只是你输入的时候需要这样输入   “2019,4,4”  输入引号里面的，不能不加逗号 可是为什么我编译运行不了

引用 2 楼 自信男孩的回复:#include<stdio.h>   //void main() int main() {     int day,month,year,sum,leap;     printf("/nplease input year,month,day/n");     scanf("%d,%d,%d",&year,&month,&day);     switch(month)/*先计算某月以前月份的总天数*/     {         case 1:sum=0;break;         case 2:sum=31;break;         case 3:sum=59;break;         case 4:sum=90;break;         case 5:sum=120;break;         case 6:sum=151;break;         case 7:sum=181;break;         case 8:sum=212;break;         case 9:sum=243;break;         case 10:sum=273;break;         case 11:sum=304;break;         case 12:sum=334;break;         default:printf("data error");break;     }     sum=sum+day;     if(year%400==0||(year%4==0&&year%100!=0))         leap=1;     else         leap=0;     if(leap==1 && month>2)         sum++;     printf("It is the %dth day.\n",sum);      return 0; }  供参考～  楼主是什么问题？ 这个编译的时候运行结果不对呀

这个怎么结帖呀

结贴走人。CSDN论坛新手指南

多谢大家，现在可以运行了

引用 4 楼 huangsuo 的回复:[quote=引用 1 楼 不闻窗外事的回复:]没有不对啊，只是你输入的时候需要这样输入   “2019,4,4”  输入引号里面的，不能不加逗号 可是为什么我编译运行不了[/quote] 我把你的程序拷过来，直接运行都没问题，


Question: 双线链表的一个小问题

引用 3 楼 45045399 的回复:[quote=引用 2 楼 鱼酥不是叔 的回复:] [quote=引用 1 楼 45045399 的回复:] void reverseshow(link a,int n) { int i; for(i=0;i<n;i++) { printf("%4d",a->data); a=a->rnext;  //遍历找到最后一个值后，说明此时的a是链表中最后一个，然后再执行 a->rnext应该为NULL，即a = NULL； } 上面遍历后找到最后一个，并显示最后一个值//printf("%4d",a->data);  for(i=0;i<n;i++) { printf("%4d",a->data); a=a->lnext; } }明白了，谢谢。请问如果要修改该如何达到目的[/quote]最简单的方法是加一个判断条件，如： if(a->rnext != NULL)    a= a->rnext;仅供参考 [/quote]好滴好滴

引用 2 楼 鱼酥不是叔 的回复:[quote=引用 1 楼 45045399 的回复:] void reverseshow(link a,int n) { int i; for(i=0;i<n;i++) { printf("%4d",a->data); a=a->rnext;  //遍历找到最后一个值后，说明此时的a是链表中最后一个，然后再执行 a->rnext应该为NULL，即a = NULL； } 上面遍历后找到最后一个，并显示最后一个值//printf("%4d",a->data);  for(i=0;i<n;i++) { printf("%4d",a->data); a=a->lnext; } }明白了，谢谢。请问如果要修改该如何达到目的[/quote]最简单的方法是加一个判断条件，如： if(a->rnext != NULL)    a= a->rnext;仅供参考

引用 1 楼 45045399 的回复:void reverseshow(link a,int n) { int i; for(i=0;i<n;i++) { printf("%4d",a->data); a=a->rnext;  //遍历找到最后一个值后，说明此时的a是链表中最后一个，然后再执行 a->rnext应该为NULL，即a = NULL； } 上面遍历后找到最后一个，并显示最后一个值//printf("%4d",a->data);  for(i=0;i<n;i++) { printf("%4d",a->data); a=a->lnext; } }明白了，谢谢。请问如果要修改该如何达到目的


Question: 求解c语言问题

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

去掉scanf中stu[i].name前的&

把名字和分数分开，否则会把名字后面的内容识别为字符串的一部分，所以你下面的输出中，1,100,100,100这部分其实就是字符串的输出  		printf("请输入姓名:\n"); 		scanf("%s", stu[i].name); 		printf("请依次输入分数1， 分数2， 分数3：\n"); 		scanf("%d,%d,%d", &stu[i].score1, &stu[i].score2, &stu[i].score3);

一看就是中文逗号的问题

输入下面数据试试： 1,100,100,100


Question: 求c语言代码过程

引用 4 楼 qq_45744378 的回复:好笑，真好笑，不会直说，还说那么多  嗯，单循环一个if带else我都不会，真不该在IT圈子混了

好笑，真好笑，不会直说，还说那么多

引用 2 楼 qq_45744378的回复:[quote=引用 1 楼 SuperDay的回复:]for if ++ 剩下脑补 来个完整的可以吗，不会呀[/quote] 需不需要我替你上课，替你考试？

引用 1 楼 SuperDay的回复:for if ++ 剩下脑补 来个完整的可以吗，不会呀

for if ++ 剩下脑补

引用 6 楼 user-3 的回复:[quote=引用 5 楼 SuperDay 的回复:] [quote=引用 4 楼 qq_45744378 的回复:] 好笑，真好笑，不会直说，还说那么多  嗯，单循环一个if带else我都不会，真不该在IT圈子混了[/quote]大佬可真够惨的。他们都看不到你的用心。。。[/quote]  还好吧，我做题的时候还不需要抓耳挠腮，当然真正遇到问题的时候，真的是麻烦至极，甚至根本无解！

CSDN论坛新手指南

引用 5 楼 SuperDay 的回复:[quote=引用 4 楼 qq_45744378 的回复:] 好笑，真好笑，不会直说，还说那么多  嗯，单循环一个if带else我都不会，真不该在IT圈子混了[/quote]大佬可真够惨的。他们都看不到你的用心。。。


Question: c语言作业，希望大佬能帮看看！

CSDN论坛新手指南[/quote]


Question: 求助，unsigned int a =-100u;是非法定义的语句吗？

引用 49 楼 advance_coder 的回复:非法，都－100了，还加个 u干啥？不知道编译器会不会对这里有重新解释，如果是我写编译器的话，绝对不会考虑对这种写法的支持。编程习惯不好。  可以 int a=－100;  // 对内存的重新解释 unsigned int b =(unsigned int)a;那么你写的编译器就不符合标准文档的要求了 是你错 不是代码错

引用 46 楼 weixin_43049869 的回复:我看到分号 就认为是一条语句。至于楼上说的语句分多少种没有声明，这是学生考试的思维. 语句不会报错，但效果不是字面上的意思然后这不是考试思维  往深的说 这是编译原理中语法分析的内容 往浅的说 这是语法标准要求  顺便 刚刚好相反的是 考试思维是 看到分号就以为是语句

引用 46 楼 weixin_43049869 的回复:我看到分号 就认为是一条语句。至于楼上说的语句分多少种没有声明，这是学生考试的思维. 语句不会报错，但效果不是字面上的意思语句是一个专用术语 可以不了解 别随便解

不是，但是编译器会取它的二进制的补码，可能会导致这个数很大。 一般不这样写的

语句应该是合法的

合法的。没什么问题。

引用 40 楼 不想秃头爱敲码的小姐姐 的回复:为什么无符号的还可以定义为负数啊其实 -100 不是一个整体 是 一元 - 运算符和 操作数100 组成的表达式

为什么无符号的还可以定义为负数啊

引用 23 楼 六道佩恩 的回复:[quote=引用 20 楼 lin5161678 的回复:] 顺便 int i = 0 的确不是定义变量 是语法错误 这还真不是语法错误，C99已经通过了，你如何说？[/quote]看清楚别人说了什么  int i = 0 是语法错误 int i = 0; 才对  是不是要我加大加粗标红才能看见分号?

引用 18 楼 六道佩恩 的回复:[quote=引用 12 楼 lin5161678 的回复:] for( int i=0 ; i<10 ; i++ ); 分号属于表达式语句 照你这么说，这里的int i=0不是定义变量了？没有声明i了？这个位置难道不是一个表达式语句该存在的地方吗？[/quote] for ( for-init-statement condition opt; expression opt) statement 有3个部分 for-init-statement condition opt ; expression opt  注意 for-init-statement 和 condition opt ; 中间什么都没有哦 没分号哦 再看看 for-init-statement 是什么东西 for-init-statement: expression-statement simple-declaration

引用 20 楼 lin5161678 的回复:顺便 int i = 0 的确不是定义变量 是语法错误 这还真不是语法错误，C99已经通过了，你如何说？

引用 18 楼 六道佩恩 的回复:[quote=引用 12 楼 lin5161678 的回复:] for( int i=0 ; i<10 ; i++ ); 分号属于表达式语句 照你这么说，这里的int i=0不是定义变量了？没有声明i了？这个位置难道不是一个表达式语句该存在的地方吗？[/quote]哦 你以为 for(这里只能写表达式 用2个分号隔开???)

引用 16 楼 lin5161678 的回复:[quote=引用 15 楼 user-10 的回复:] 楼上两位跑偏了，如何就掐起来了。 根据本人查找资料，好象是这样：C和C++中关于语句的定义是不一样的，Declaration在后者中是语句，但C中不是，这一点应该没有争议吧。而6种语句，在K&R的书中确实列出了： 带标号语句 表达式语句 复合语句 选择语句 循环语句 跳转语句 共6种。但是MSDN中却有更多的，至少异常处理的是不能归类到这6种中去吧？所以6种至少不符合最新标准。 至于淡化语句概念，我感觉没有错，因为：C语言中变量的定义必须放在可以执行的语句前面，而C++没有这种限制。所以语句的概念并不会造成困扰。 另外函数调用似乎可以归类于表达式语句吧？C本来就没有异常处理的语句 最新的C标准中 语句依然是这6种 [/quote] 好象标准C中确实没有异常处理

引用 18 楼 六道佩恩 的回复:[quote=引用 12 楼 lin5161678 的回复:] for( int i=0 ; i<10 ; i++ ); 分号属于表达式语句 照你这么说，这里的int i=0不是定义变量了？没有声明i了？这个位置难道不是一个表达式语句该存在的地方吗？[/quote]什么叫做照我这么说  我说什么了? 顺便 int i = 0 的确不是定义变量 是语法错误 分号是声明的组成部分 不能随便省略  100你不能省略一个0 变成 10  这是完全不同的意思 int i = 0; 声明定义一个变量i 怎么了  和我说的什么内容有冲突??

引用 17 楼 user-10 的回复:[quote=引用 15 楼 user-10 的回复:] 楼上两位跑偏了，如何就掐起来了。 根据本人查找资料，好象是这样：C和C++中关于语句的定义是不一样的，Declaration在后者中是语句，但C中不是，这一点应该没有争议吧。而6种语句，在K&R的书中确实列出了： 带标号语句 表达式语句 复合语句 选择语句 循环语句 跳转语句 共6种。但是MSDN中却有更多的，至少异常处理的是不能归类到这6种中去吧？所以6种至少不符合最新标准。 至于淡化语句概念，我感觉没有错，因为：C语言中变量的定义必须放在可以执行的语句前面，而C++没有这种限制。所以语句的概念并不会造成困扰。 另外函数调用似乎可以归类于表达式语句吧？ 毕竟语法和编写出好的程序比较起来不是重点[/quote] 不是重点 但 是基础 顺便这里也不是在说写好程序  是在讲基础 提问本身就只是一个语法问题而已

引用 12 楼 lin5161678 的回复:for( int i=0 ; i<10 ; i++ ); 分号属于表达式语句 照你这么说，这里的int i=0不是定义变量了？没有声明i了？这个位置难道不是一个表达式语句该存在的地方吗？

引用 15 楼 user-10 的回复:楼上两位跑偏了，如何就掐起来了。 根据本人查找资料，好象是这样：C和C++中关于语句的定义是不一样的，Declaration在后者中是语句，但C中不是，这一点应该没有争议吧。而6种语句，在K&R的书中确实列出了： 带标号语句 表达式语句 复合语句 选择语句 循环语句 跳转语句 共6种。但是MSDN中却有更多的，至少异常处理的是不能归类到这6种中去吧？所以6种至少不符合最新标准。 至于淡化语句概念，我感觉没有错，因为：C语言中变量的定义必须放在可以执行的语句前面，而C++没有这种限制。所以语句的概念并不会造成困扰。 另外函数调用似乎可以归类于表达式语句吧？ 毕竟语法和编写出好的程序比较起来不是重点


Question: 解题

也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

题目不要随便写好吧。CSDN论坛新手指南  至于题目可以自己动手写写。

是要这种的？自己动手吧。。  int gender; printf("请输入性别代码：0代表女人，1代表男人\n"); scanf("%d", &gender); if (1 == gender) {     printf("男人\n"); } else {     printf("女人\n"); }


Question: 有大佬知道这个第一题怎么做吗

CSDN论坛新手指南

第二题应该跟编译器也有关。

第一题设计很不合理，原则上无解 第二题基础的结构体对齐问题


Question: 求2～1000之间所有的完数，要求每行输出5个

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

你用了三个if，第二个和第三个的if可以改成elseif试下。

/*-  * Copyright (C), 1999-2019, mymtom.  *                     _  *  ____  _   _ ____ _| |_ ___  ____   * |    \| | | |    (_   _) _ \|    \  * | | | | |_| | | | || || |_| | | | |  * |_|_|_|\__  |_|_|_| \__)___/|_|_|_|  *       (____/   *  * vi:set ts=4 sw=4:  */ /**  * @file    PerfectNumber.c  */  #include <stdio.h>  static  int isPerfectNumber(int number) {     int sum;     int factor;      sum = 1;     for (factor = 2; factor <= number / 2; factor++) {         if ((number % factor) == 0) {             sum += factor;         }     }      if (sum == number) {         return 1;     } else {         return 0;     } }  int main(void) {     int number;      for (number = 2; number <= 1000; number++) {         if (isPerfectNumber(number)) {             printf("%d\n", number);         }     }     return 0; }  /* output 6 28 496 */

/*测试下彩色功能2019年11月1日01:40:11*/ #include <stdio.h> void //初始化  init(void);  void  //输出全部完数  ws_puts(void); int //完数判断，如果返回1表示完成，返回0表示非完数 is_ws(int n); void //每n个换行  newline(int n);  int ws_count = 0; //统计完数量 int n; //待输入的数  int main(int argc, char *argv[]) { 	init(); 	ws_puts(); 	return 0; }  /* 初始化输入  */  void init(void) { 	fprintf(stdout, "%s", "Enter the number: "); 	fscanf(stdin, "%d", &n); }  /* 输出全部的完数  */ void ws_puts(void) { 	int i;   	for (i = 1; i <=n ; ++i) { 		if (is_ws(i)) { 			newline(5); //每输出5个就换行  			printf("%d\t", i); 		} 	}  }  /* 完数判断，如果返回1表示完成，返回0表示非完数 */ int is_ws(int n) { 	int i; 	int sum = 0; 	for (i = 1; i < n; i++) { //除以1至其本身以外的数，如果能整除，就求和，最后与其本身相比较 		if (n % i == 0) 			sum += i; 	}  	if (sum == n) 		return 1; 	else 		return 0;  }  /* ws_count++,如果满n个，就打印换行 */ void newline(int n) { 	ws_count++; 	if (ws_count % n == 0) 		printf("\n");  }

～～～for循环的执行语句为空

每行输出5个，你的这个表述的方法不对你只判断了m小于5的情况如果说m比5大你又如何判断了，所以只要m是5的倍数就可以换行了 if(m % 5 == 0) {     printf("\n");  }

在第一个循环中要加一句s=0

s=0应该在第一个for语句下，不应该在开头，每次都要清零的

引用 15 楼 自信男孩的回复:你的s没有重新初始化为0. 有啊，一开头不是吗，s=0

你的s没有重新初始化为0.

引用 24 楼 weixin_45812797的回复:[quote=引用 21 楼 qq_42176102的回复:]第二个if语句有问题。他应该在上一个if语句里 那应该怎么改，说一下[/quote] 等我打完这把lol，跟你打出来

引用 21 楼 qq_42176102的回复:第二个if语句有问题。他应该在上一个if语句里 那应该怎么改，说一下

引用 22 楼 weixin_45812797 的回复:[quote=引用 20 楼 weixin_40290083的回复:]int main() { 	int m = 0; 	for (int i = 2; i <= 1000;i++) { 		int s = 0; 		for (int t = 1; t < i; t++) { 			if (i % t == 0) { 				s += t; 			} 		} 		if (s == i) { 			m++; 			printf("%d \t", i); 		} 		if (m % 5 == 0) { 			printf("\n"); 		} 	} 	 }   1、注意你的S每次在第一重循环中要重新赋值为0 2、判断是不是完数的语句块if(s == n)在要第二重循环之外，而在第一重循环之内。 按你的打出来只输出2[/quote]

引用 20 楼 weixin_40290083的回复:int main() { 	int m = 0; 	for (int i = 2; i <= 1000;i++) { 		int s = 0; 		for (int t = 1; t < i; t++) { 			if (i % t == 0) { 				s += t; 			} 		} 		if (s == i) { 			m++; 			printf("%d \t", i); 		} 		if (m % 5 == 0) { 			printf("\n"); 		} 	} 	 }   1、注意你的S每次在第一重循环中要重新赋值为0 2、判断是不是完数的语句块if(s == n)在要第二重循环之外，而在第一重循环之内。 按你的打出来只输出2

第二个if语句有问题。他应该在上一个if语句里

我初始化了，难道就对了吗

引用 16 楼 weixin_45812797 的回复:[quote=引用 15 楼 自信男孩的回复:]你的s没有重新初始化为0. 有啊，一开头不是吗，s=0[/quote] 只需要初始化一次吗？如果这样，你的s是不是一直增加呢？

按照格式贴出你的代码。


Question: c语言题求解

https://baike.baidu.com/item/printf%28%29/402521?fr=aladdin CSDN论坛新手指南


指针指向了a，那么%s输出p，就是从a地址开始输出字符串～

输出字符串没问题啊，指针的基础操作.

你把p指向了a，结果不是字符串是啥 你认为该是什么呢。

这样有什么问题吗？？


Question: 鄙人小小见解，望大佬多多指点，谢谢！

引用 4 楼 wowpH 的回复：[quote=引用 2 楼 wowpH 的回复:] putchar可以输出单字符。 改为：putchar也可以输出单字符。[/quote]好的，谢谢

引用 2 楼 wowpH 的回复:putchar可以输出单字符。 改为：putchar也可以输出单字符。

引用 2 楼 wowpH 的回复：putchar可以输出单字符。puts不可以输出单字符吗？

putchar可以输出单字符。

引用 6 楼 user-3 的回复：  puts是会强行换行的！！！楼主是想对我的回复视而不见吗？  引用 1 楼 user-3 的回复:局部变量占用的是栈空间，也不能定的太大了，大概几千以内吧。puts会强行换行，使用时请注意我也不知道 ，不过谢谢大佬，我又学了隔新知识

引用 6 楼 user-3 的回复：  puts是会强行换行的！！！楼主是想对我的回复视而不见吗？  引用 1 楼 user-3 的回复:局部变量占用的是栈空间，也不能定的太大了，大概几千以内吧。puts会强行换行，使用时请注意对不去啊，我也是个新学者


Question: 帮我看看那里错了呗

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

麻烦按照格式发代码。另外直接说你的错误。不要叫别人找。CSDN论坛新手指南


Question: C语言指针

指针初看简单，理解深了可能有点难。应用就更复杂了。

这种基础问题一搜一大堆，简单点说，指针记录的是地址，完了. 至于这个地址咋个解释就是你把指针转成啥类型(编译器)决定的。

最好不明白指出来，并且最好用代码方式～

挺好理解的吧 #include <stdio.h> #include<string.h>  int cmp(char* p1, char* p2) { 	int temp = 0; 	char* p3 = p2; 	for (int i = 0; *p1!= '\0'; p1++) 	{ 		for (p2=p3; *p2!= '\0'; p2++) 		{  			if (*p2 == *p1) 			{ 				for (; (*p2 != NULL) && (*p1 != NULL); p2++,p1++) 				{ 					if (*p2 == *p1) { temp = 1; } 					else { temp = 0; break; } 				} 				 			}  		} 	} 	return temp; } int main(void) { 	char digit1[10]; 	char digit2[10]; 	 	int i, j, temp = 0; 	printf("请输入第一个数字串：\n"); 	gets_s(digit1); 	printf("请输入第二个数字串：\n"); 	gets_s(digit2); 	char* p1=NULL, * p2=NULL; 	int a = strlen(digit1); 	int b = strlen(digit2); 	if (strlen(digit1) <=strlen(digit2)) 	{ 		p1 = digit2; 		p2 = digit1; 	} 	else 	{ 		p1 = digit1; 		p2 = digit2; 	} 	temp = cmp(p1, p2); 	printf("%d", temp);  	/* 	int n=0, m, sum=0,p=0; 	scanf("%d", &n); 	do 	{ 		m = n % 10; 		if (m % 2 == 0) 		{ 			p = m; 		} 		else if (m % 2 != 0) 		{ 			p = 0; 		} 		sum = sum + p; 		n = n / 10; 	} while (n > 0); 		printf("%d", sum); 		*/ 	return 0; }  比如这个就用到指针，我写的，挺好理解的呢

去搜博客。看看

引用 1 楼 user-6的回复:书上应该也得挺详细的啊。 详细，但是不怎么理解

书上应该也得挺详细的啊。


Question: 求问，这道题怎么做。 c语言

引用 1 楼 user-2 的回复：CSDN论坛新手指南  把你会的先写了。。。这就是基础的。好的

有问题再把代码贴上

CSDN论坛新手指南  把你会的先写了。。。这就是基础的。


Question: 偶数数位求和 求助

也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

P也没有定义

sum未初始化

sum没有初始化为0，它原来的数是未知的吧

CSDN论坛新手指南

代码就不能格式化一下吗？哪里有问题可以把你的运行截图贴出来。


Question: 马踏棋盘算法

引用 7 楼 user-1 的回复:额，你直接告诉我输入多少吧。我试了好几个都不行。 不好意思，重新改了下，但是还有一个运行了小于1ms就栈溢出的毛病~~调试的时候是可以的，不知道你的vs是否可以运行   #include<iostream> using namespace std; //棋盘 int map[8][8]; //马步方向 int direction[8][2] = { {1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1} }; //坐标，行列 int coordL, coordR; //已走的格子数 int flag = 0;  void solve() { 	//步数 	int step = 0; 	//方向控制 	int control = 0; 	//下一步的坐标 	int fcoordL; 	int fcoordR; 	//未走完时 	if (flag < 64) { 		//确保每次递归如果能走必须走一步 		while (true) { 			fcoordL = coordL + direction[control][0]; 			fcoordR = coordR + direction[control][1]; 			//如果下一步可走，则走 			if (fcoordL < 8 && fcoordL >= 0 && fcoordR < 8 && fcoordR >= 0&& map[fcoordL][fcoordR] != 1) { 					coordL += direction[control][0]; 					coordR += direction[control][1]; 					//标记已经走过 					map[coordL][coordR] = 1; 					flag++; 					step = flag; 					break; 			} 			//如果下一步不可走，则切换方向 			else { 				if (control < 8) { 					control++; 				} 				else { 					break; 				} 			} 		} 		//继续走下一步，并且在下一步无法进行时回退继续尝试其他走法 		while (true) { 			//进入下一步 			solve(); 			//若下一步失败，则回退 			if (flag < 64) { 				map[coordL][coordR] = 0; 				flag--; 				coordL -= direction[control][0]; 				coordR -= direction[control][1]; 				//control为7时已无其他走法，不必再试 				if (control < 7) { 					control++; 				} 				else { 					break; 				} 				//继续尝试其他走法 				while (true) { 					fcoordL = coordL + direction[control][0]; 					fcoordR = coordR + direction[control][1]; 					if (fcoordL < 8 && fcoordL >= 0 && fcoordR < 8 && fcoordR >= 0 && map[fcoordL][fcoordR] != 1) { 						coordL += direction[control][0]; 						coordR += direction[control][1]; 						map[coordL][coordR] = 1; 						flag++; 						step = flag; 						break; 					} 					else { 						if (control < 8) { 							control++; 						} 						else { 							break; 						} 					} 				} 			} 			else { 				break; 			} 		} 	} 	//走完时 	else { 		cout << "第" << step << "步的走法为" << "[" << direction[control][0] << "," << direction[control][1] << "]" << endl; 	} } int main() { 	//初始化棋盘 	for (int i = 0; i < 8; i++) { 		for (int j = 0; j < 8; j++) { 			map[i][j] = 0; 		} 	} 	scanf_s("%d %d", &coordL, &coordR); 	//走起 	solve(); 	return 0; }

8*8的数组，只要大于0小于8就行  那个函数里面判断是否可以走的那个if太长了，刚才我没试，无法读取值，所以无法比较，然后就退了   引用 7 楼 user-1 的回复:额，你直接告诉我输入多少吧。我试了好几个都不行。

额，你直接告诉我输入多少吧。我试了好几个都不行。

引用 3 楼 user-1 的回复:经测试，代码无法运行（输入8 8都不行）。思路还没看。  我都注释了没有设置检测，总共8*8的数组，你给我输个8

输出之后运行多久能出来就看你电脑了，XP起码一天

经测试，代码无法运行（输入8 8都不行）。思路还没看。

引用 1 楼 user-1 的回复:你这个输入压根儿没用。。。我输入半天。   你告诉我你输入了啥

你这个输入压根儿没用。。。我输入半天。


Question: C语言函数问题求助，懵逼了

全局变量、静态变量或者未释放的堆空间

大概明白了，第二个题的形式，除了指针就试用，指针情况下就需要定义静态变量和&这些东西

须知返回值就相当于复制一个数值回来，这个值永远都是存在的，所以对于普通的返回值都是有效。但是如果返回指针的话，就取决于指针所指向那段内存的有效性了，栈空间返回之后就无效了，堆空间在free之前还是有效的，所以这种情形下全局空间，静态变量和未释放的堆空间都是有效的

如果第一个不是指针而是有一个形式参数，那么就能返回了吗

第一个的字符串是反正栈空间的，函数返回之后就会失效，返回的只是指针，指向无效的内存空间


Question: C语言顺序表制作的系统，插入信息时，原有信息被覆盖了求改正

麻烦将代码放到代码片里面。CSDN论坛新手指南 我更喜欢一键复制。


Question: 要求：输出50个素数，请大神指教哪里错了，谢谢！

引用 5 楼 S_GKCYY 的回复:bool表达式是啥？可以理解为if语句判断的必须是确定的关系，而不能赋值吗？if是如果的意思，如果后面你说该干啥。

bool表达式是啥？可以理解为if语句判断的必须是确定的关系，而不能赋值吗？

#include<stdio.h> int main() {     int x=2;     int cnt=0;     int ispreme=1;     int i;     while(cnt<50)     {         for(i=2;i<x;i++)         {             if(x%i==0)             {                 ispreme=0;                 break;             }         }         if(ispreme==1) {             printf("%d ",x);             cnt++;         }         x++;         ispreme = 1;     }     putchar(10); }  供参考～

if(ispreme=1) 改成： if(ispreme==1)  if判断的是bool表达式。不是赋值语句。注意一下～

我找到了错误地方，但不是很明白。。。。希望各位能人志士不吝赐教。

每次外循环开始新一轮循环的时候，需要重置ispreme值


Question: 求C语言程序

CSDN论坛新手指南[/quote]

算一下某天到那一天的隔了几天，对5取余 要算隔了几天方法多得很，最没技术含量的你就直接获取两个时间的时间戳，然后除以一天的时间


Question: 请问a=-a为什么会取反符号

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

是负号，不是取反。取反应该是~符号～

他是两个运算符，把-a赋值给 a了

a赋值为负a

可以理解为单目运算符负号，功能是取一个数的相反数

引用 5 楼 csucxy的回复:a=-a的计算过程：计算表达式-a，即对a乘-1，再将表达-a的值对a赋值。 当然a最终结果就是所谓的取反。 单目运算符-的优先级别比赋值运算符=高 为什么在会有个乘-1的操作呢

引用 3 楼 與蘤舊縐 的回复:你的写的是a = -a，=-是合在一起的 不好意思，看错了还以为你想说-=，那就是-作减号（负号）

你的写的是a = -a，=-是合在一起的

负号‘-’’是单双目运算符，具有两种用途

-也可以是一个单目运算符。 =-确实不是一个运算符，而是=和-两个运算符


Question: C语言求 球体积

引用 楼主 weixin_45807650 的回复:#include<stdio.h> #define PI 3.1415927 int main() { double r,a; while(scanf("%lf",&r)!=EOF) { getchar(); a=(double)4/3*PI*r*r*r; printf("%.3lf\n",a); } return 0; } while后的(scanf("%lf",&r)!=EOF)啥意思？ 求大佬指导  EOF是文件结尾 也代表-1 你要是想结束的话 windows下就在键盘摁ctrl+z 然后回车 具体可以百度一下EOF是什么


Question: c语言初学者求下面这道题的程序，求大神指点，谢谢，不胜感激

可以用stdlib.h中的itoa

个人以为，递归作为练习可以，但不可滥用，像这种循环可以搞定的事情，没必要用递归

十六进制可以在printf之前加判断，输出后面的英文字符

超过十进制不再适用

#include<stdio.h> void transform(int num,int system) { 	//system为目标进制 	if (num != 0) { 		transform(num / system, system); 		printf("%d", num % system); 	} } int main() { 	int num; 	scanf_s("%d", &num); 	transform(num,8); 	return 0; }


Question: 求教C语言怎样实现压缩文件夹为zip文件？

引用 1 楼 user-2 的回复:https://blog.csdn.net/sadwjy520/article/details/77931918这篇博客我看过了，迭代读写有点不方便，有没有直接压缩文件夹的办法？不用命令行


Question: 小白求助——求大佬解答

好好捋捋，哈哈

引用 5 楼 qq_43764817 的回复:[quote=引用 4 楼 liups的回复:]明明就是对的嘛！递归到N=1时开始第一次输出，也就是1先输出 还是不太理解，为什么是从1开始输出的呀，最后输出的是N我知道[/quote] 递归调用的最后一次是N==0,但是这时if条件不成立，所以不会继续递归调用，也不会输出，直接返回了

引用 4 楼 liups 的回复:明明就是对的嘛！递归到N=1时开始第一次输出，也就是1先输出 引用 楼主 qq_43764817 的回复:这里不应该是先输出后递归吗？ 感觉这里顺序搞反了。 明白了明白了

引用 4 楼 liups的回复:明明就是对的嘛！递归到N=1时开始第一次输出，也就是1先输出 还是不太理解，为什么是从1开始输出的呀，最后输出的是N我知道

明明就是对的嘛！递归到N=1时开始第一次输出，也就是1先输出

引用 2 楼 qq_43764817 的回复:[quote=引用 1 楼 user-4的回复:]我觉得好像是反了 我感觉也是，不过这样敲出来也是对的[/quote] 对的？ 那估计就是咱俩的感觉有问题吧

引用 1 楼 user-4的回复:我觉得好像是反了 我感觉也是，不过这样敲出来也是对的

我觉得好像是反了


Question: 求解


Question: 求解

#define PI 3.1415 double r(周长/(2*PI));  // 圆形半径 double s1 = PI*r*r;  // 圆形面积 double b(周长/4);  // 正方形边长 double s2 = b*b;  // 正方形面积  至于周长怎么输入，这些基本都输入输出自己看书去吧

这个应该是初一公式吧，很简单啊，套一下，1分钟就做完了


Question: 求解

CSDN论坛新手指南


Question: c语言编程题

第二题的思路没有错，有一种情况没有考虑，比如：12=2*2*3。虽然结果是一样的，但是算法上是通不过的。

第二题题目没拍好。第一题用循环做。第二题应该也差不多，用嵌套循环遍历到2~1000的数(除去本身)与自身能否整除得到约数，然后再相加与本身比较得到完数。如果是我，我会这样做，办法可能蠢了些。

第四行j*j<=j是什么意思呀

不会  但我会学点的

for 循环

引用 26 楼 user-6 的回复：[quote=引用 25 楼 醒着一脸懵 的回复:] [quote=引用 23 楼 user-6 的回复：]这才是学习该有的样子。啥都叫别人写。你觉得你能掌握几成？ 自己动手，错了再说。手机上怎么结帖[/quote]手机无法结贴。[/quote]哦哦

引用 25 楼 醒着一脸懵 的回复:[quote=引用 23 楼 user-6 的回复：]这才是学习该有的样子。啥都叫别人写。你觉得你能掌握几成？ 自己动手，错了再说。手机上怎么结帖[/quote]手机无法结贴。

引用 23 楼 user-6 的回复：这才是学习该有的样子。啥都叫别人写。你觉得你能掌握几成？ 自己动手，错了再说。手机上怎么结帖

引用 23 楼 user-6 的回复：这才是学习该有的样子。啥都叫别人写。你觉得你能掌握几成？ 自己动手，错了再说。嗯嗯 谢谢教导

这才是学习该有的样子。啥都叫别人写。你觉得你能掌握几成？ 自己动手，错了再说。

对。CSDN论坛新手指南

引用 18 楼 user-6 的回复：#include<stdio.h> int main() { 	int sum1 = 0, sum2 = 0, n, k, m; 	double sum3 = 0; 	for (n = 1; n <= 100; n++) 		sum1 += n;// 这里对了  	for (k = 1; k <= 50; k++) 		sum2 += k;// 这里加的应该是平方 	 	for (m = 1; m <= 10; m++) 		sum3 += m;// 这里是倒数  	// 这里sum3是double型的，那么这三个数相加 	// 后的类型会转成double型的，而你在这里用的 	// 格式是%d，是不符合语法的。 	// 两种选择： 	// 1、将sum1和sum2都改成double型的，并且改成下面这样 	// 这样损失较小。 	printf("%lf\n", sum1 + sum2 + sum3); 	// 2、将后面强制转换为int型的，这样损失数据较大 	printf("%d\n", (int) (sum1 + sum2 + sum3));  	return 0; }#include<stdio.h> void main() {     int ,n,k,m;     double sum1=0,sum2=0,sum3=0;     for(n=1;n<=100;n++)     sum1+=n;     for(k=1;k<=50;k++)     sum2+=k*k;     for(m=1;m<=10;m++)     sum3+=1/m;     printf("%lf\n",sum1+sum2+sum3); } 现在这样对吗

引用 19 楼 user-6 的回复：拓展，去搜搜“高斯求和”  for里面的循环变量没必要定义这么多，就一个就行了。通常用i，j，k真心谢谢

引用 16 楼 user-6 的回复：计算1~n的和这个是对的。谢谢🙏

计算1~n的和这个是对的。

引用 14 楼 user-6 的回复：不知道你运行一下没，我运行的结果是0我的是6380

不知道你运行一下没，我运行的结果是0

引用 12 楼 醒着一脸懵 的回复：[quote=引用 10 楼 user-6 的回复：]不知道明天叫你写，你还能不能单独写出来。#include<stdio.h> void main() {     int sum1=0,sum2=0,n,k,m;     double sum3=0;     for(n=1;n<=100;n++)     sum1+=n;     for(k=1;k<=50;k++)     sum2+=k;     for(m=1;m<=10;m++)     sum3+=m;     printf("%d\n",sum1+sum2+sum3); }[/quote]第一个应该对吧


Question: 求解

什么叫标题？ 图片能不能摆正？ CSDN论坛新手指南


Question: (求教)为什么这个输入语句的输出总是缺少最后一个数字?

引用 2 楼 201410164的回复:[quote=引用 1 楼 user-1的回复:]麻烦代码格式化一下。看的全乱在一起了。CSDN论坛新手指南  你这不很明显吗？你输入5后直接换行了。最后一次循环的a是5，然后getchar读取的是换行。直接退出循环了。5就没加上去。  对不起，以后会注意的...那么请问我如果想要显示出5应该怎么写这个回车退出的语句呢？[/quote] 用do-while可以

引用 1 楼 user-1的回复:麻烦代码格式化一下。看的全乱在一起了。CSDN论坛新手指南  你这不很明显吗？你输入5后直接换行了。最后一次循环的a是5，然后getchar读取的是换行。直接退出循环了。5就没加上去。  对不起，以后会注意的...那么请问我如果想要显示出5应该怎么写这个回车退出的语句呢？🙏


Question: C语言可以调用Pytho的库吗


Question: 新手求教

也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: 新手小白求教！


Question: 求助啊~C语言二维数组赋值会调到其他行

你的问题是格式化输出的时候后面两个参数搞反了 printf("a[%d][0]=%d a[%d][1]=%d\n", i , a[i][0], a[j][1] , j );

引用 楼主 mr.hman 的回复:#include <stdio.h>  int main() { 	int a[][2]={{0}}; 	int b[][2]={}; 	int i , j ; 	int x , y ; 	i = 0; 	j = 0; 	x = 0; 	y = 1; do{ 	scanf("%d", &a[i][0]); 	scanf("%d", &a[j][1]); 	printf("a[%d][0]=%d a[%d][1]=%d\n", i , a[i][0], a[j][1] , j ); 	i++; 	j++;  }while(a[i][0]!=0);  	return 0;  }     甚是不解呀，是二维数组初始化错误了吗？请大神帮忙一下 感谢~~~ 我又来了，刚才跟你说的怕你误解，int a[][2]={{0}}这样定义是可以的，但是这样定义你就确定了a的大小，就只有1一个二维数组的元素，因为你在后面的大括号中只有一个元素，所以a这个二维数组就只有一个元素，超过一个元素就越界了，你只能使用a[0][0],a[0][1]这个0下标的元素，其他的就不行了

引用 楼主 mr.hman 的回复:#include <stdio.h>  int main() { 	int a[][2]={{0}}; 	int b[][2]={}; 	int i , j ; 	int x , y ; 	i = 0; 	j = 0; 	x = 0; 	y = 1; do{ 	scanf("%d", &a[i][0]); 	scanf("%d", &a[j][1]); 	printf("a[%d][0]=%d a[%d][1]=%d\n", i , a[i][0], a[j][1] , j ); 	i++; 	j++;  }while(a[i][0]!=0);  	return 0;  }     甚是不解呀，是二维数组初始化错误了吗？请大神帮忙一下 感谢~~~ 大兄弟，你这样定义a[][2]这个数组，你知道它是多大的吗？你这样的话就是使用这个数组就越界了，你可以用两种方式修改，第一，a[100][2]这样定义一个固定的大小；第二，int *（a[2]），你定义一个指针，每次都是用malloc获取分配空间

明白了大兄弟 因为我是要两列的矩阵存放数据的 那还是得定义数组大小

引用 4 楼 636f6c696e 的回复：应该是： printf("a[%d][0]=%d a[%d][1]=%d\n", i , a[i][0], j, a[j][1] );对哦 你不说我还没看出来


Question: 求助，求求大佬救救我吧

中间是不是多了个括号哦


Question: 新手求教

VC6.0在win 8.1和win10中的安装使用  不会安装看这里。 没有安装源的话可以私信我，可以百度网盘分享给你（原版的vc6，需要手动打SP6）

引用 12 楼 喵兮兮的回复:而且如果是汉化版的就是新建文件。项目 嗯，我这个电脑太难了，好几次下个vc6.0都安装不了，够难的

而且如果是汉化版的就是新建文件。项目

对，把版本换一下吧，不然用codeblocks也是不错的

引用 9 楼 liups的回复:[quote=引用 7 楼 qq_45673225 的回复:] [quote=引用 2 楼 liups的回复:]点是那个按钮就可以了。 原因：编译器还没有生成相应的exe，自然无法调试了 应该早生成exe了，每次只要点个它就显示这个弹窗[/quote] 也就是说你一次都没有成功运行过了？ 如果是这样，结合你图中的文件夹信息，正常的exe不应该在那里，那么我建议你换一个原版的VC6.0（英文版的）。所有的汉化版本都不要用了[/quote] 哦哦，好吧，电脑应该自带的visual studio

引用 7 楼 qq_45673225 的回复:[quote=引用 2 楼 liups的回复:]点是那个按钮就可以了。 原因：编译器还没有生成相应的exe，自然无法调试了 应该早生成exe了，每次只要点个它就显示这个弹窗[/quote] 也就是说你一次都没有成功运行过了？ 如果是这样，结合你图中的文件夹信息，正常的exe不应该在那里，那么我建议你换一个原版的VC6.0（英文版的）。所有的汉化版本都不要用了

引用 5 楼 qq_45673225 的回复:[quote=引用 3 楼 喵兮兮的回复:]你建文件时要在new中选择project->应该是倒数第3个，建立工作空间，然后写上项目名等等按提示操作，再点new，选source，填写文件名.c,就可以了，先试试 我这个编译器不知道是什么版本，没有new,project[/quote] 不要用这种狗屁汉化版本！现在你只有自己英译汉了

引用 2 楼 liups的回复:点是那个按钮就可以了。 原因：编译器还没有生成相应的exe，自然无法调试了 应该早生成exe了，每次只要点个它就显示这个弹窗

引用 4 楼 qq_45673225 的回复:[quote=引用 2 楼 liups的回复:]点是那个按钮就可以了。 原因：编译器还没有生成相应的exe，自然无法调试了 是，之后再怎么弄额[/quote]点了就开始编译、连接这些，如果程序没有问题就开始执行（调试），如果有问题就会显示错误，这就要修改后再来一次了

引用 3 楼 喵兮兮的回复:你建文件时要在new中选择project->应该是倒数第3个，建立工作空间，然后写上项目名等等按提示操作，再点new，选source，填写文件名.c,就可以了，先试试 我这个编译器不知道是什么版本，没有new,project

引用 2 楼 liups的回复:点是那个按钮就可以了。 原因：编译器还没有生成相应的exe，自然无法调试了 是，之后再怎么弄额😓

点是那个按钮就可以了。 原因：编译器还没有生成相应的exe，自然无法调试了

编译通过了吗？


Question: 这个每个子函数里的int n是啥？

告诉这个函数，传给它的数组a的元素个数

拒推测必然是数组的元素个数


Question: C语言浮点型精度

引用 1 楼 user-1的回复:就是有效数字，中学数学还记得吗？ 意思是保留的有效数字的位数？

就是有效数字，中学数学还记得吗？


Question: 求助

也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

用命令stat测试文件的时间戳，如果时间戳改变就copy。  在调试shell用命令touch就可以改变时间戳做测试。

感觉只能遍历文件数据对照，比如每1秒访问所有文件的信息，与之前记录的信息对比，有不同复制，并更新信息

文件大小相应的api可以自行百度，代码写一下并没有那么难


Question: C语言 翁爷 求助

就是死算啊，没啥特别的


Question: 求10000以内的回文素数

应该是先找个回文，再判断它是不是素数啊

引用 1 楼 SuperDay的回复:你这个思路完全不对嘛，不知道你怎么想的 可以具体说一下吗，我其实确实很混乱

你这个思路完全不对嘛，不知道你怎么想的

所以咋改？


Question: 给定一串字符输出最后两数字

isdigit  判断一个字符是否是数字。

最后两位不是数字怎么办？CSDN论坛新手指南


Question: 求求大佬帮忙看下 为什么运行没有结果

贴代码更方便。截图还要保存再上传。。。CSDN论坛新手指南

引用 6 楼 bsnow 的回复： int main() {     printf("Hello World");     double b=1,c,sum=0;     for(int a=1;a<=9;a++)     {         b=b*(double)a;         if(a%2 == 0)         {             b = -1/b;         }         else         {             b = 1/b;         }         sum = b + sum;     }     printf("sum=%f",sum);     return 0; }  根据你的程序，这样应该可以打印出值。不过我认为根据你的题目，你阶乘这个地方还没做，所以结果应该是错的。接下来你自己再改改吧。好的

c语言没有办法表示分数吗

引用 3 楼 user-4 的回复：[quote=引用 2 楼 weixin_45781181的回复:][quote=引用 1 楼 user-4 的回复：]int运算，1除以大于1的数，结果取整为0 要用浮点数来运算不是1除以b 是想表示b分之1 c语言初学者莫笑话[/quote] 一回事，C语言没有分数，这个就是除法运算，你把类型改成浮点型吧[/quote]改成double了 但是还是没有结果

引用 2 楼 weixin_45781181的回复:[quote=引用 1 楼 user-4 的回复：]int运算，1除以大于1的数，结果取整为0 要用浮点数来运算不是1除以b 是想表示b分之1 c语言初学者莫笑话[/quote] 一回事，C语言没有分数，这个就是除法运算，你把类型改成浮点型吧

引用 1 楼 user-4 的回复：int运算，1除以大于1的数，结果取整为0 要用浮点数来运算不是1除以b 是想表示b分之1 c语言初学者莫笑话

int运算，1除以大于1的数，结果取整为0 要用浮点数来运算


Question: 这两个程序的求值顺序是什么情况呢？

希望新版教材出现。虽然我用不上。。。

引用 4 楼 user-4 的回复:[quote=引用 3 楼 liups的回复:][quote=引用 2 楼 user-4 的回复:] 是老师出的题吗？孔乙己式 象是个PPT[/quote] 嗯，真是误人子弟，研究这些有什么意义呢？想搞个编译器吗？[/quote] 这些老师真是悲哀啊，估计他们就是这样学的，手上的教材什么的也是这样写的。更悲哀的是又这样教他们的学生！

引用 4 楼 user-4 的回复:[quote=引用 3 楼 liups的回复:][quote=引用 2 楼 user-4 的回复:] 是老师出的题吗？孔乙己式 象是个PPT[/quote] 嗯，真是误人子弟，研究这些有什么意义呢？想搞个编译器吗？[/quote] 老师想教一点有深度、难度的问题，结果却传授了错误的知识！其实最近类似的错误看到很多，说明这种问题搞不清楚的老师还很多。

引用 3 楼 liups的回复:[quote=引用 2 楼 user-4 的回复:] 是老师出的题吗？孔乙己式 象是个PPT[/quote] 嗯，真是误人子弟，研究这些有什么意义呢？想搞个编译器吗？

引用 2 楼 user-4 的回复:是老师出的题吗？孔乙己式 象是个PPT

是老师出的题吗？孔乙己式

C语言参数的求值顺序标准中没有规定，取决于编译器。  半吊子老师


Question: 请问求给定精度的简单交错序列部分和 ，用while为什么一定要在前面先计算一次？

我自己调试明白了


Question: 求助，c语言for……if的问题

引用 7 楼 liups的回复:[quote=引用 6 楼 你吃辣条不 的回复:] 好像有点懂了，是不是当i=1，3，5，7，9时，余数为1，此时i%2为真，所以执行continue返回if语句，当i=0，2，4，6，8时，余数为0，所以i%2为假，跳过continue语句到下一行 对的！非0就为真（true，PS：C++才有true，不过C用法是一样的，只是没有规定true和false关键字），0为假[/quote] 谢谢大佬

引用 6 楼 你吃辣条不 的回复:好像有点懂了，是不是当i=1，3，5，7，9时，余数为1，此时i%2为真，所以执行continue返回if语句，当i=0，2，4，6，8时，余数为0，所以i%2为假，跳过continue语句到下一行 对的！非0就为真（true，PS：C++才有true，不过C用法是一样的，只是没有规定true和false关键字），0为假

引用 4 楼 你吃辣条不 的回复:[quote=引用 3 楼 liups的回复:][quote=引用 2 楼 你吃辣条不 的回复:] [quote=引用 1 楼 user-2的回复:]if (i % 2)   continue;  就是i为奇数（1，3，5，7，9）的时候，跳过 sum的值就是偶数的和，即0 + 2 + 4 + 6 + 8 = 20 那i%2是不是等价于i%2==0啊？[/quote] 不等价，但是这里也可以这样写[/quote] if (i%2)   continue 这句话我的理解是如果i%2的余数绝对等于0，那么返回if语句。 有哪里不对吗大佬[/quote] 或者说结果、效果可以说一样，但是进行的运算不一样，效率也不一样，推荐i%2

引用 3 楼 liups的回复:[quote=引用 2 楼 你吃辣条不 的回复:] [quote=引用 1 楼 user-2的回复:]if (i % 2)   continue;  就是i为奇数（1，3，5，7，9）的时候，跳过 sum的值就是偶数的和，即0 + 2 + 4 + 6 + 8 = 20 那i%2是不是等价于i%2==0啊？[/quote] 不等价，但是这里也可以这样写[/quote] if (i%2)   continue 这句话我的理解是如果i%2的余数绝对等于0，那么返回if语句。 有哪里不对吗大佬

引用 2 楼 你吃辣条不 的回复:[quote=引用 1 楼 user-2的回复:]if (i % 2)   continue;  就是i为奇数（1，3，5，7，9）的时候，跳过 sum的值就是偶数的和，即0 + 2 + 4 + 6 + 8 = 20 那i%2是不是等价于i%2==0啊？[/quote] 不等价，但是这里也可以这样写

引用 1 楼 user-2的回复:if (i % 2)   continue;  就是i为奇数（1，3，5，7，9）的时候，跳过 sum的值就是偶数的和，即0 + 2 + 4 + 6 + 8 = 20 那i%2是不是等价于i%2==0啊？


Question: 大佬们求助 ！。C语言初学者

在第一个WHILE中存在s=s/10；这个语名已将s赋值为0了。 解决办法1：使用临时变量int k = s; 办法2:只用一个while将，sum = sum *10 + s/10放在同一个while中

引用 楼主 mmdddeade的回复:为什么第二个while不执行了，应该怎样写呢?  求解 适时使用tab键。看的更舒服


Question: C语言数组的应用，不知道从那插入

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

首先查找插入位置，然后移动插入位置之后的元素，把插入位置腾出来，最后插入新的元素。

将输入的数与原数组中的数依次比较，当处于某两个数之间或者与某个数相等，那就是插入点； 再把其他元素往后移

这种插入的重点是找到插入点，这个过程叫查找，因为是有序的，所以查找方法和无序的不一样，具体请看数据结构或算法书

你的思路是啥 。。。。


Question: 下标输出怎么都有问题，怎么改？？

引用 3 楼 OYJJO 的回复:[quote=引用 1 楼 45045399的回复:]#include "stdio.h"  int main () {    int a[8];    int i,n = 1,m = 1;  //默认为第一个为最大值和最小值    int max,min;        printf("请输入8个数:\n");    for(i=0;i<8;i++)    scanf("%d",&a[i]);        max=min=a[0];        for(i=1;i<8;i++)    {       if(a[i]>max){        max=a[i];n=i + 1;}  //第几个数与数组下标的关系为数组下标 + 1    }         for(i=1;i<8;i++)    {        if(a[i]<min){       min=a[i];m=i + 1;}  //同上    }        printf("最大数为第%d个:%d,最小数为第%d个:%d\n",n,max,m,min);    return 0; }仅供参考 那那两个if能不分开，在一个for里吗？[/quote] 两个if语句可以放在一个for循环里面，在这个程序里面不影响，

试试就知道了。

引用 1 楼 45045399的回复:#include "stdio.h"  int main () {    int a[8];    int i,n = 1,m = 1;  //默认为第一个为最大值和最小值    int max,min;        printf("请输入8个数:\n");    for(i=0;i<8;i++)    scanf("%d",&a[i]);        max=min=a[0];        for(i=1;i<8;i++)    {       if(a[i]>max){        max=a[i];n=i + 1;}  //第几个数与数组下标的关系为数组下标 + 1    }         for(i=1;i<8;i++)    {        if(a[i]<min){       min=a[i];m=i + 1;}  //同上    }        printf("最大数为第%d个:%d,最小数为第%d个:%d\n",n,max,m,min);    return 0; }仅供参考 那那两个if能不分开，在一个for里吗？

数组下表是从0开始，第一个是0， 所以你要的第几个需要+1


Question: 用VS2010,写C语言("D\:.txt","w");为什么用记事本打开是ASCII值不是用“wb”打开才是二进制吗

执行程序后，我的R.txt里面的数据是： 1   0   6   1   0   7   1   0   8   1   0   9

CSDN论坛新手指南

你说的编码  最起码的 ASCII 都不知道  https://baike.baidu.com/item/ASCII  书上没有提到ASCII你就可以把书扔了

如何实现在txt文件看到10进制数据呢，或者不在txt文件看用什么可以看到10进制数

?  https://docs.microsoft.com/zh-cn/dotnet/standard/io/file-path-formats


引用 1 楼 user-2 的回复:这类基础问题应该在百度搜索，比论坛问高效的多 不然，编译器提示信息已经说得很清楚了！英文看不懂的话可以查一下

这类基础问题应该在百度搜索，比论坛问高效的多


Question: 萌新求助！

引用 8 楼 qq_45802164 的回复:[quote=引用 6 楼 與蘤舊縐的回复:]temp=*(pa+(9-i)) *(pa+(9-i))=pa[i] pa[i]=temp 用这一段吗？前面需不需要改呀，直接用就是啥都不变。。。[/quote]  这一段只是告诉你如何交换 至于你的程序很有问题，不知道你用的什么编译器，我想gcc和vc压根不会让你跑起来 首先函数传入了两个参数，第一个应当是字符串的长度，所以在使用函数之前先得获取字符串长度，然后传入 其次，你的函数中for循环的条件，不能用i，传入的就是i，如果用j表示，则j应当小于i而不是小于10，否则如果你输入的字符串长度根本没有10，就会访问一块没有初始化的内存 最后交换的时候是字符串的正数第n个和倒数第n个交换，而不是数组下标倒数第n个

引用 5 楼 與蘤舊縐的回复:[quote=引用 3 楼 qq_45802164 的回复:] 就是，为啥他只能赋值一半啊，后一半不会改变。比如qwertyuiop，输出就是poiuyyuiop 还搞不明白吗 你的程序前五个获得了后五个的值，而后五个要获得值时获得的是此时前五个的值，也就是原本后五个的值 poiuy反过来就是yuiop[/quote] 这是我们上学期c语言一道题，反转一串字符，储存加输出。有人用两个指针来做，我比较想知道我这个程序能不能通关修改完成这个过程呀

引用 6 楼 與蘤舊縐的回复:temp=*(pa+(9-i)) *(pa+(9-i))=pa[i] pa[i]=temp 用这一段吗？前面需不需要改呀，直接用就是啥都不变。。。

引用 5 楼 與蘤舊縐的回复:[quote=引用 3 楼 qq_45802164 的回复:] 就是，为啥他只能赋值一半啊，后一半不会改变。比如qwertyuiop，输出就是poiuyyuiop 还搞不明白吗 你的程序前五个获得了后五个的值，而后五个要获得值时获得的是此时前五个的值，也就是原本后五个的值 poiuy反过来就是yuiop[/quote] 哦，明白了。。。，谢谢。

引用 3 楼 qq_45802164 的回复:就是，为啥他只能赋值一半啊，后一半不会改变。比如qwertyuiop，输出就是poiuyyuiop 还搞不明白吗 你的程序前五个获得了后五个的值，而后五个要获得值时获得的是此时前五个的值，也就是原本后五个的值 poiuy反过来就是yuiop

引用 2 楼 與蘤舊縐的回复:如果你传入的i是字符串的长度，那么for循环的条件应该是int j=0;j<i;j++ 就是，为啥他只能赋值一半啊，后一半不会改变。比如qwertyuiop，输出就是poiuyyuiop

这个函数明明接受两个变量，怎么搞成这个样子 另外你只有一个数组，该顺序需要的是交换，而不是纯粹的赋值，比如你一开始把最后一个赋值给了第一个，循环最后，第一个又赋值给了最后一个，但此时你的第一个本就是原来的最后一个

mingw不就是gcc和g++吗，传参少一个都给过

引用 10 楼 與蘤舊縐的回复:[quote=引用 8 楼 qq_45802164 的回复:] [quote=引用 6 楼 與蘤舊縐的回复:]temp=*(pa+(9-i)) *(pa+(9-i))=pa[i] pa[i]=temp 用这一段吗？前面需不需要改呀，直接用就是啥都不变。。。[/quote]  这一段只是告诉你如何交换 至于你的程序很有问题，不知道你用的什么编译器，我想gcc和vc压根不会让你跑起来 首先函数传入了两个参数，第一个应当是字符串的长度，所以在使用函数之前先得获取字符串长度，然后传入 其次，你的函数中for循环的条件，不能用i，传入的就是i，如果用j表示，则j应当小于i而不是小于10，否则如果你输入的字符串长度根本没有10，就会访问一块没有初始化的内存 最后交换的时候是字符串的正数第n个和倒数第n个交换，而不是数组下标倒数第n个[/quote] 多谢(o^^o)大佬！我好好想想。另外我的是mingw编译器

j不是小于i~~，只需要到i的一半就够了，4个数只要交换两次


Question: c语言中的卷积算法

问题是啥？CSDN论坛新手指南


Question: 为什么不能运行求救

引用 1 楼 user-1 的回复：CSDN论坛新手指南不好意思，了解了，怎么删帖子

CSDN论坛新手指南

不用删，你在下面再发一遍代码即可。顺便描述一下你的问题。


Question: 请大佬指点这个杨辉三角题输出答案为什么不对

CSDN论坛新手指南

卑微楼主求指点


Question: C语言的小编程问题

也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 也许对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

#include <stdio.h> #include <math.h>  void print_n_ch(char ch, int n) { 	for (int i = 0; i < n; ++i) { 		printf("%c", ch); 	} }  int main(void) { 	char ch; 	scanf_s("%c", &ch, 1); 	int hn = ch - 'A'; 	int n = (hn << 1) + 1; 	for (int i = 0; i < n; ++i) { 		print_n_ch(' ', abs(hn - i)); 		char cur = ch - abs(hn - i); 		int cur_n = ((hn << 1) + 1) - (abs(hn - i) << 1); 		print_n_ch(cur, cur_n); 		printf("\n"); 	} 	return 0; }

引用 1 楼 喜欢做我自己的回复: int count = 1; for(i = 'A';i <= 'D';i++) { 	for(j = 0;j < count;j++) 	{ 		printf("%c",i); 	} 	count += 2; 	printf("\n");  } for(i = 'C';i >= 'A';i--) { 	count -= 2; 	for(j = 0;j < count;j++) 	{ 		printf("%c",i); 	}	 	printf("\n");  }   差不多是这样吧，中心显示的话我就没写了 哥，你的代码我有些看不懂，但是好像不是我想要的答案……不过谢谢了


Question: c语言二叉树的创建

先序输入。  你将所有空的补上#就很明显了。  步骤： 先访问根结点，A 再访问左子树，B 访问B的左子树，D D无左右子树，## B无右子树，# 访问A右子树，C 访问C的左子树，E 。。。。 。。。。   规则先根结点，再左子树，最后右子树。即：DLR


Question: 直接插入排序 循环表达式

CSDN论坛新手指南

引用 楼主 a31576jdj的回复:为什么使用--j，执行后，不就变成了A[0]复制A[1]了吗? 我错了，循环语句执行顺序搞错了，谢谢大家了

我错了，循环语句执行顺序搞错了，谢谢大家了

A[0]存放要比较的值

为啥是A[0]复制A[1]？这代码没问题啊。里层for循环是大于哨兵的数后移一位。然后将哨兵放到插入的位置。

什么意思？不是后移至某个位置，再做插入吗？


Question: 初学者求组

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

去掉scanf中的\n 另外，area没有定义

光秃秃一个main()函数看起来太别扭了 自己写的话还是按标准来吧 int main(void) {     return 0; } 或者 int main(int argc, char *argv[]) {     return 0; }

1. main没标返回值（应该是警告） 2. main参数没标void（警告） 3. main里没有返回值（应该是警告） 4. scanf内的\n（逻辑问题，语法没问题） 5. area未定义

scanf \n用法错误，area没定义.

引用 2 楼 qq_45804184 的回复:应该就是scanf的问题了，我也是初学者area没定义

应该就是scanf的问题了，我也是初学者

scanf不需要换行符，错误让编译器检查就好了呀


Question: 求帮助

求一个学习c语言栈程序的视频网站

CSDN论坛新手指南

规范标题，作业别发  你可以将已经写的代码放上来来寻求帮助，而不是让别人帮你写


Question: 求代码

1~N中每个数的约数的个数的和。

不好意思。你写的和我说的不一样。CSDN论坛新手指南

引用 5 楼 user-1的回复:看看你的代码。 #include<stdio.h> int main(){     int n;     int sum=0;     scanf("%d",&n);     if(n==0) return 0;     for(int i=1;i<=n/2;i++)         {         if(n%i==0)         {             sum++;         }         }     printf("%d",sum+1); }

看看你的代码。

引用 2 楼 user-1的回复:m%n=0说明n是m的是“因”。说白了就是1~N中每个数的约数的个数的和。 按你的想法写不对我试了

引用 2 楼 user-1的回复:m%n=0说明n是m的是“因”。说白了就是1~N中每个数的约数的个数的和。 可是三的约数只有两个啊

m%n=0说明n是m的是“因”。说白了就是1~N中每个数的约数的个数的和。


Question: C语言，求解

未命名3. c文件跟main. c都有main函数，去除一个文件

就是说你之前这个代码运行的程序还没关，因此未命名3.exe不可写，于是你编译失败收到提醒。

一个项目只能有一个main函数。CSDN论坛新手指南

最简单的办法，重启电脑 想找的话，开任务管理器


Question: C语言问题，求大佬解决

引用 4 楼 youhehu 的回复:[quote=引用 3 楼 與蘤舊縐的回复:]那你就用一个数组存储输入的字符串 用一个变量存储当前最长的片段长度 用一个变量存储当前片段的长度 遍历字符串，当后一个字符和前一个字符相同时，当前片段长度+1，否则比较当前最长片段长度和当前片段长度的大小，然后更新当前最长片段长度，然后重置当前片段长度，继续遍历，直到字符串被完整遍历 能不能给个关键代码，我新手[/quote]  自己先尝试呗，我想这个逻辑够简单了，又没什么骚操作 出了问题再说

引用 3 楼 與蘤舊縐的回复:那你就用一个数组存储输入的字符串 用一个变量存储当前最长的片段长度 用一个变量存储当前片段的长度 遍历字符串，当后一个字符和前一个字符相同时，当前片段长度+1，否则比较当前最长片段长度和当前片段长度的大小，然后更新当前最长片段长度，然后重置当前片段长度，继续遍历，直到字符串被完整遍历 能不能给个关键代码，我新手

引用 1 楼 與蘤舊縐的回复:最纯净神奇字符型数组片段是什么 众所周知，猪猪学姐遭到了邹学长的重拳出击后并不不服气，于是找来了我胖哥帮忙，我胖哥可是大魔法师，邹学长自知打不过我胖哥，于是也找到了古月学姐，但是古月学姐当然也打不过我胖哥（我胖哥可是最强的）。于是跑到了魔法森林，去寻找传说中的神奇字符型数组来打败我胖哥。神奇字符串有“0”和“1”组成，现在要找到一个最纯净的字符型数组片段，即连续的相同字符最长的一段。请告诉我最纯净的字符型数组片段的长度。

最纯净神奇字符型数组片段是什么


Question: C语言问题，求大佬解决

看不懂才问，好吧要不然我自己写了


Question: 求教有关于getchar，函数中参数调用太多的问题

getchar（）的小括号里是不加东西的

getchar是无参的


Question: c程序问题求救！！

#include <stdio.h> int main() {  int n,a[50];//定义数据   int i,sum=0;       printf("输入：\n");//输入n值   scanf("%d\n",&n);    for(i=0;i<n;i++)  {   scanf("%d",&a[i]);  }//输入数组内整数     int max=a[0],min=a[0];//循环   for(i=0;i<n;i++)  {   sum=sum+a[i];  if(a[i]>max)   max=a[i];   if(a[i]<min)  min=a[i];  }     printf("输出：\n%d,%d,%d",sum,max,min);  return 0; }

解决了就结贴。CSDN论坛新手指南

引用 6 楼 余国煜 的回复:[quote=引用 3 楼 user-2的回复:]C/C++明确规定，数组定义时长度必须使用大于0的整型常量。因此根据运行时输入变量的值来限定数组的长度是不可实现。如果是C++，可以使用vector来实现所谓变长度数组的需求，但vector实质上并不是数组。 哦哦，不是不是，先确定a[50]，容量定好方可解决[/quote]那不就是我的方法吗？

引用 3 楼 user-2的回复:C/C++明确规定，数组定义时长度必须使用大于0的整型常量。因此根据运行时输入变量的值来限定数组的长度是不可实现。如果是C++，可以使用vector来实现所谓变长度数组的需求，但vector实质上并不是数组。 哦哦，不是不是，先确定a[50]，容量定好方可解决

很奇怪的是，我发现其实现在是可以用scanf输入n，半路定义数组a的大小的，现在题目已解决，不知道是不是现在的c支持数组临时输入数组大小了

引用 2 楼 wowpH的回复:#define MAX_N 51   int main() {    int a[MAX_N];     //....... } 开头定义max_n可以吗，题目是n要输入的哦


Question: if运行后出来的结果都一样

为啥这么多人喜欢写%d,%d呢

你是怎么输入的，输出又是什么结果？

你输入这个试试： 0,0


Question: 到底哪有问题？？？？求助

为了防止出错，还是第一个和第二个for循环，都加上花括号，sum初始化

你的括号有问题，建议初学者每一个括号都不要丢，特别是在嵌套循环中

貌似初始化也有问题emmmm

你第二个for循环想要控制下面的scanf与sum加和操作吧，但你没用大括号把它们两个括起来，所以系统判定为你的第二个for循环只用来输入emmm偷懒的话，可以把scanf那句后面的分号改成逗号

首先变量初始化没做好，然后里面的第二个循环你记得加括号 不然默认循环体为后面一句内容，但是这里求和肯定是在第二个循环体内的，所以加括号，求平均值放在第二个循环体外，因为你要根据求和的值再去求平均，注意格式问题，至少注意美不美观叭，养成习惯就好多了

引用 1 楼 user-17 的回复:括号要写全，养成好习惯。CSDN论坛新手指南 for循环！

sum数组未初始化  应该初始化为0

首先变量初始化(你可以先循环输出一遍sum和v看看里面是什么东西)，其次v和输出放外层，三个数加完再求平均数

记得结贴！！！

引用 9 楼 OYJJO的回复:[quote=引用 6 楼 user-17 的回复:] sum[x]没初始化。说不定一开始sum[x]就为100呢。  记得结贴给分。 [/quote] 数组初始化要用大括号，你这样没用，而且还是初始化了一个没有声明地址空间的变量

养成加括号的好习惯，sum.没初始化

直接看十一楼的吧  他写的是对的

错误有三： 第一，求和sum与平均值v要赋初值0，不然没办法执行四则运算。 第二，平均值不能在第二个循环体里放，要移到第一个循环体里，第二个循环体是为了加总和的。 第三，printf语句同上。

要养成数据初始化，注意循环体的范围

额啊，我也不知了

编译没错，第二个for没有括号功能不对吧

#include<stdio.h> int main() { 	int x, y; 	int a[5][3], sum[5], v[5]; 	printf("请输入5人三门课的成绩：\n"); 	for (x = 0; x < 5; x++) { 		sum[x] = 0; 		for (y = 0; y < 3; y++) { 			scanf("%d", &a[x][y]); 			sum[x] += a[x][y]; 		} 		v[x] = sum[x] / 3; 		printf("第%d人的总分为%d平均分为%d\n", x + 1, sum[x], v[x]); 	} 	return 0; }

这么大个桌面非要挪到这里。右边留着干嘛


Question: 大佬们帮帮我

引用 9 楼 weixin_40290083的回复:你的reg51. h中应该用到了这个lib库文件，但是没有在目标位置找到 好的，多谢我试一下

你的reg51. h中应该用到了这个lib库文件，但是没有在目标位置找到

CSDN论坛新手指南

引用 6 楼 user-3的回复:不好意思，我没有<reg51.h>，没办法看。 好吧。。。。。。。

不好意思，我没有<reg51.h>，没办法看。

引用 3 楼 user-3的回复: 你的程序不给出来，不知道你的程序出了什么问题 喔喔喔我发下面了，你可以帮我看看吗

#include <reg51.h>  typedef unsigned int uint;	  //对数据类型进行声明定义 typedef unsigned char uchar;  uchar SEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar COM[]={0x01,0x02,0x04,0x08,0x10,0x20}; uchar dis_buf[6]={0,0,0,0,0,0};   sbit DQ=P2^0;  void delay1ms(uint t) {   uint x;   for(;t>0;t--)   {    for(x=110;x>0;x--);   } }  uchar init() {  uchar i;  DQ=0;  i=70;  while(i--);  DQ=1;  i=0;  while(DQ)  {   delay1ms(1);   i++;   if(i>5)   {    return 0;   }  }  return 1; }  void writebyte(uchar dat) {  uint i,j;  for(j=0;j<8;j++)  {   DQ=0;   i++;   DQ=dat&0x01;   i=6;   while(i--);   DQ=1;   dat>>=1;  } }  uchar readbyte() {  uint byte,bi;  uint i,j;  for(j=8;j>0;j--)  {   DQ=0;   i++;   DQ=1;   i++;   i++;   bi=DQ;   byte=(byte>>1)|(bi<<7);   i=4;   while(i--);  }  return byte; }  void changtemp() {  init();  if(init()==1)  {   delay1ms(1);   writebyte(0xcc);   writebyte(0x44);  } }  void read_temp_com() {  init();  if(init()==1)  {   delay1ms(1);   writebyte(0xcc);   writebyte(0xbe);  } }  int readtemp() {  int temp=0;  uint tmh,tml;  changtemp();  read_temp_com();  tml=readbyte();  tmh=readbyte();  temp=tmh;  temp<<=8;  temp|=tml;  return temp; }  void jisuan(int l) {  float tp;  if(l<0)  {   dis_buf[5]=0x40;   l=l-1;   l=~l;   tp=l;   l=tp*0.0625*100+0.5;  }  else  {   dis_buf[5]=0x00;   tp=l;   l=tp*0.0625*100+0.5;  }  dis_buf[4]=l/10000;  dis_buf[3]=l%10000/1000;  dis_buf[2]=(l%1000/100)|0x80;  dis_buf[1]=l%100/10;  dis_buf[0]=l%10; }  void display() {  uchar i;  for(i=0;i<6;i++)  {   P1=COM[i];   P0=SEG[dis_buf[i]];   delay1ms(10);  } }  void main() {  while(1)  {   jisuan(readtemp());   display();  } }

你的程序不给出来，不知道你的程序出了什么问题

引用 1 楼 user-3的回复:请给出源代码 是什么意思鸭，能不能解释详细一点

请给出源代码


Question: 十四进制转换为七进制，可以帮忙写一下代码吗？

引用 6 楼 user-1 的回复:[quote=引用 5 楼 user-1 的回复:]代码来自：https://zhidao.baidu.com/question/809437191274955412.html 稍作修改。[/quote] 太感谢了！成功pass，辛苦你啦~~

引用 5 楼 user-1 的回复:代码来自：https://zhidao.baidu.com/question/809437191274955412.html 稍作修改。

#include<stdio.h>  // 可根据n调整大小 #define MAX_N 30 #define MAX_LENGTH 100  int conver_14_to_10(char* tar) {//把14进制转为10进制 	int res = 0; 	int cur_idx = 0; 	while (tar[cur_idx] != '\0') { 		if (tar[cur_idx] >= '0' && tar[cur_idx] <= '9') { 			res = 14 * res + tar[cur_idx] - '0'; 		} else { 			res = 14 * res + tar[cur_idx] - 'A' + 10; 		} 		cur_idx++; 	} 	return res; }  void print_7(int tar) {//将10进制转为7进制输出 	if (tar == 0) 		return; 	print_7(tar / 7); 	printf("%d", tar % 7); }  int main() { 	int n; 	scanf("%d", &n); 	char arr[MAX_N][MAX_LENGTH]; 	for (int i = 0; i < n; ++i) { 		scanf("%s", arr[i]); 	} 	for (int i = 0; i < n; i++) { 		print_7(conver_14_to_10(arr[i])); 		printf(" "); 	} 	printf("\n"); 	return 0; } 2 1A D

引用 3 楼 user-1 的回复:引用 2 楼 Silvia0121 的回复:user-1说的网上的那个程序我看了，不符合题目要求，可以帮忙修改吗？为啥不符合要求。把你的要求说一下。 比如在这个程序中我输入2和1A还没输入D就已经输出33了。这个n=2输入不就无效了吗，要的是n个数字的转换。可能还需要一些小的修改，但我不太会······

user-1说的网上的那个程序我看了，不符合题目要求，可以帮忙修改吗？

https://zhidao.baidu.com/question/809437191274955412.html 问之前搜一下。CSDN论坛新手指南


Question: c 语言输出应为五位数

int x = 2345; printf("%05d", x);


Question: 为什么visual studio 2019不可以这样用？谁知道这个怎么改？

因为scanf_s()函数都不能处理回车符。即把回车符看作再次输入的字符。 所以，此时你的代码中a1的值是你在控制台输入的第一个字符，而此时a2的值是你输入第一个字符后按下的回车按键'\n'它的值是0x0a，所以此时程序等不到你输入第二个字符就开始输出a1+a2的值了，此时的输出是第一个字符串加上0x0a。所以，解决的方法是在两个scanf_s()函数中间再加入一个scanf_s()函数用来屏蔽回车符，即'\n'。 	char temp; 	scanf_s("%c", &c1); 	scanf_s("%c", &temp); 	scanf_s("%c", &c2); 以下是VS2015中的输出  对于scanf_s()函数屏蔽回车的详细资料，请参考《scanf()、gets()和getline()读取输入》 希望能够帮到你

CSDN论坛新手指南

%c会将回车当作字符读进去

第一个scanf_s接收了你输入的那个字符，第二个接收了回车，没毛病  撸起我的老花镜

你这样提问，是想我们看瞎眼呀


Question: C语言判断一个数是否是素PTA

6楼这个。我长见识了。

这些方法都太慢，很可能超时，更快一些的方法是先判断是否偶数，奇数的话则试除以3..sqrt(n)之间的小素数，该方法可以非常快测试32位范围内的数，如果更大范围，64位、128位或者更多，需要用Miller-Rabin素数性测试的变体或者AKS素数性测试之类的方法。

引用 4 楼 Guuudbro 的回复:我的这个算法也是在网上找的，原理就是大于等于5的质数一定和6的倍数相邻， 第一次见这个，我得捋一捋。

我的这个算法也是在网上找的，原理就是大于等于5的质数一定和6的倍数相邻， 令x≥1，将大于等于5的自然数表示如下： ······ 6x-1，6x，6x+1，6x+2，6x+3，6x+4，6x+5，6(x+1），6(x+1)+1 ······ 可以看到，不在6的倍数两侧，即6x两侧的数为6x+2，6x+3，6x+4，由于2(3x+1)，3(2x+1)，2(3x+2)，所以它们一定不是素数，再除去6x本身，显然，素数要出现只可能出现在6x的相邻两侧。这里有个题外话，关于孪生素数，有兴趣的道友可以再另行了解一下，由于与我们主题无关，暂且跳过。这里要注意的一点是，在6的倍数相邻两侧并不是一定就是质数。 此时判断质数可以6个为单元快进，即将方法（2）循环中i++步长加大为6，加快判断速度，原因是，假如要判定的数为n，则n必定是6x-1或6x+1的形式，对于循环中6i-1，6i，6i+1,6i+2，6i+3，6i+4，其中如果n能被6i，6i+2，6i+4整除，则n至少得是一个偶数，但是6x-1或6x+1的形式明显是一个奇数，故不成立；另外，如果n能被6i+3整除，则n至少能被3整除，但是6x能被3整除，故6x-1或6x+1（即n）不可能被3整除，故不成立。综上，循环中只需要考虑6i-1和6i+1的情况，即循环的步长可以定为6，每次判断循环变量k和k+2的情况即可

CSDN论坛新手指南

#include <stdio.h> #include <math.h>  int main(void) { 	int n, flag; 	scanf("%d", &n); 	if (n < 2) { 		flag = 0; 	} else { 		int max = (int)sqrt(n); 		flag = 1; 		for (int i = 2; i <= max; ++i) { 			if (0 == (n % i)) { 				flag = 0; 				break; 			} 		} 	} 	if (1 == flag) { 		printf("Yes\n"); 	} else { 		printf("No\n"); 	} 	return 0; }

你这个逻辑。可否说一下。建议直接去百科看看素数怎么判断的。

思路没啥错，这样的效率确实比常规方法要高，只是代码看上去比较绕。 错的地方在于这里： if(n%6!=1&&n%6!=5){printf("No");return 0;}


Question: C语言装箱，东西个数剩余最少问题

CSDN论坛新手指南


Question: 求大佬们解决，没有输出怎么回事

if(m*2.3+n*1.9==s&&m<n)   会不会是这个不成立

引用 6 楼 羅昇 的回复:想都不用想，没输出肯定是条件没满足没运行到那呗。不会打断点看就把每一个值都打印出来看什么情况 +1. 这个问题你下一个断点轻松搞定,现在的编译器比较智能了，新版本编译器浮点数直接对比可以的

m*2.3+n*1.9==s&&m<n  float类型的不要直接用  == 比较。。由于精度问题，你输入s为2.3  可能会变成 2.299995这样的。 所以会导致   if(m*2.3+n*1.9==s&&m<n)  这个条件一直不满足，就没有输出

第8行应该是n<=吧

引用 1 楼 fireyou的回复:#include<studio.h>  //多了个 u #include <stdio.h>  for(n=m+1;m<=floor(s/1.9),n++) for(n=m+1;m<=floor(s/1.9);n++) 谢谢，打字写程序还不熟练，但电脑上打的格式都对，就是没有输出，请问您知道怎么回事吗？


Question: 关于编写程序运行超时以及不明不白的格式错误所带来的疑惑和困扰...

什么格式错误？你边界没处理好吧？第二题算法需要优化


Question: 求大神指导？

谢谢大家，我明白了。

CSDN论坛新手指南   ps：怎么感觉昨天见到过，不过那位同学发的是截图。

正如楼上朋友说的，你的代码中：  a=(f-32)/9; 假设输入f的值是40，此时f-32的值是40-32=8；因为a的类型是int，所以a = 8/9时，a的值实际上是0，再运行 printf("Celsius = %d\n",a*5); 代码时，依旧输出的是0。 而如果把代码改为 a = (f - 32) * 5 / 9; 假设输入f的值是40，此时f-32的值是40-32=8；8×5=40,因为a的类型是int，所以a = 40/9时，a的值实际上是4，之后将输出的代码改为 printf("Celsius = %d\n", a); 即可。 #include<stdio.h> int main(int argc, char **argv) { 	int f;  	scanf("%d", &f);  	int a;   	if (f >= 32)  	{ 		a = (f - 32) * 5 / 9;  		printf("Celsius = %d\n", a);  	}  	else  	{ 		a = (32 - f) * 5/ 9;  		printf("Celsius = -%d\n", a);  	}  	return 0; }  VS2015调试结果为

应该是先乘以5再除以9，先除以9精度都掉光啦


Question: #include#includetypedef struct node{	int data;	struct node*ne

活久见啊，头一次见这样的

CSDN论坛新手指南


Question: dev c++中怎么配mpi

你好，请问解决了吗

没有


Question: 为什么是返回字符指针的函数

引用 3 楼 马振宇 的回复:[quote=引用 2 楼 六道佩恩 的回复：]不是void，是void* 这个星号不能忽略，这是指针类型 所以这个函数会接收一个char*指针，返回一个void*指针 而void*和其他指针是兼容的，可以随意转换那应该是返回void指针，也不是字符指针啊[/quote] 我说了呀，void*指针和其他指针是兼容的啊，可自动转换、随意转换，你随后一句话都不看的吗？ 简单来说， char  *p = (void*)q void* p = (char*)q 这两种都没问题，你这返回的void*指针，你用任何一种类型的指针变量接收都可以

引用 8 楼 棉猴 的回复:[quote=引用 7 楼 wowpH 的回复:] [quote=引用 6 楼 棉猴 的回复:]这个不行啊。C语言可以不，例如malloc函数不一直都是 int* a = (int*)malloc(sizeof(int) * 10); 这样用啊。。。[/quote] C语言是双向转换的，但是C++是单向转换的[/quote]额，看到了啊。懂了。

引用 7 楼 wowpH 的回复:[quote=引用 6 楼 棉猴 的回复:]这个不行啊。C语言可以不，例如malloc函数不一直都是 int* a = (int*)malloc(sizeof(int) * 10); 这样用啊。。。[/quote] C语言是双向转换的，但是C++是单向转换的

引用 4 楼 马振宇 的回复:有人知道吗？调用的地方转换就行了

引用 2 楼 六道佩恩 的回复：不是void，是void* 这个星号不能忽略，这是指针类型 所以这个函数会接收一个char*指针，返回一个void*指针 而void*和其他指针是兼容的，可以随意转换那应该是返回void指针，也不是字符指针啊

CSDN论坛新手指南


Question: 求教个问题

可以采用深度搜索遍历的方式，写个递归函数，用一个长度为5的数组来存每一位，然后遍历从高位允许的最大的数开始循环，将每一位的结果存在数组里面，当存满5位时输出即可，代码如下： #include<stdio.h> int a[5]; void dfs(int n,int cnt) {     if(n<0)         return;     if(n==0&&cnt==5)//满足条件输出     {         for(int i=0;i<5;i++)         {             printf("%d",a[i]);         }         printf("\n");     }     for(int i=n-4+cnt;i>=1;i--)     {         a[cnt]=i;         dfs(n-i,cnt+1);//深度搜索遍历     } } int main() {     int n;     scanf("%d",&n);     dfs(n,0);     return 0; }

有没有大佬帮忙解答一下?


CSDN论坛新手指南

你可能建的不是项目，而是一个简单的C语言文件

编译了吗？？ 不是有个绿色的矩形调试吗，点那个


最好while(true) 把退出循环的条件放到循环里面 你这个条件怕是根本退不出去 另外sum等变量每次循环开始时都需要初始化为原值

CSDN论坛新手指南


Question: 数据结构魔王语言

神仙难救

你粘过来的代码也挺魔王。。

CSDN论坛新手指南


Question: 模式串的匹配，将程序写出来后，运行后直接跳出停止工作的字样，我也找不到问题出在哪儿？

debug一步一步调试能找到问题


Question: 求助！！！

CSDN论坛新手指南

能不能规范标题？

缺少头文件  加上 #include <string.h>


Question: 求大神帮忙看看，串的模式匹配，究竟哪出了问题，为何运行不出来，急求≥﹏≤

CSDN论坛新手指南


Question: ACM题不会

#include <stdio.h> #include <string.h>  int main() {   int n;   char s[20][21];    while(~scanf("%d", &n))   {     for (int i = 0; i < 20; i++)       i < n ? scanf("%s", s[i]) : s[i][0] = 0;     for (int i = 0, j = n, k; k = strlen(s[i]), j;)     {       if (k > 1) s[i][k - 1] = 0, printf("%s ", s[i]);       if (k == 1) s[i][0] = 0, j--;       if (++i == n && j) i = 0, puts("");     }   }    return 0; }

引用 5 楼 qq_45800134 的回复:不找的话，我怎么知道输出多少行是要找，我说错了。

引用 5 楼 qq_45800134 的回复:不找的话，我怎么知道输出多少行我想的是所有的长度单独保存。我写一下。

不找的话，我怎么知道输出多少行

引用 3 楼 qq_45800134 的回复:我是不是得找最长的单词的长度可找可不找。

我是不是得找最长的单词的长度

方便写一下吗

用一个二维数组保存读的单词。每次将最后一个字符换成\0就行


Question: 加密问题

你要求的不是每次只输入两个字符吗，那只有一行的， 想多次输入，可以再加个循环，输入两个字符串，得到结果，循环再输入两个字符串。 引用 4 楼 qq_45800134 的回复:if((temp=strchr(temp，s1[i])==NULL)) 这样写会不会不仅访问了temp的第一行，还可能访问temp的所有行

#号换成空格。。方便调试才写的#

ACM不会那道题，我发在这儿了。不能连续回帖三次。  我还是不自找麻烦了。找最大长度这种写法简单点。 #include <stdio.h> #include <string.h> int main(void) { 	int n; 	scanf("%d", &n); 	char str[20][21]; 	int len[20]; 	int max = 0; 	for (int i = 0; i < n; ++i) { 		scanf("%s", str[i]); 		len[i] = strlen(str[i]); 		if (len[i] > max) { 			max = len[i]; 		} 	} 	while (max > 1) { 		for (int i = 0; i < n; ++i) { 			if (len[i] > 0) { 				--len[i]; 				str[i][len[i]] = '\0'; 				printf("%s", str[i]); 				if (len[i] > 0) { 					printf("#"); 				} 			} 		} 		printf("\n"); 		--max; 	} 	return 0; }

temp = s2;         for (i = 0; i < strlen(s1); i++)         {             if ((temp = strchr(temp, s1[i])) == NULL)             {                 isEncrypt = false;                 break;             }             isEncrypt = true;         } 		if (isEncrypt) 		{ 			printf("Yes\n"); 		} 		else 		{ 			printf("No\n"); 		}

循环判断   可以用  strchr  函数。

for循环依次判断就行了。


Question: 输出所有的“水仙花数”，所谓水仙花数是指一个3位数，其各位数字立方和等于该数本身。 例如，153是一水仙花数，因为153=1³﹢5³﹢3³

while(m)的前面加上sum = 0


Question: 编写程序

CSDN论坛新手指南  取余


Question: switch-case 语句以及if语句的小白疑难...

第一题 first=1; (x%2==0) first=0;(first判断是不是第一个数字，第一个数字前不需要空格) printf(" %d",x); 第二题 (month) ((year%4==0&&year%100!=0)||year%400==0) day=28; break; case 1:case 3:case 5:case 7:case 8:case 10:case 12:(作为一行代码只想到这种方式) default: 第一题每输入一个数字如果是偶数就会马上输出，不是多个偶数连续输出的形式，不知道是不是题目出得有问题

引用 2 楼 user-2的回复:第1题的第12行用到了first，但是前面没有初始化，而这个初始化显然不能在循环里面。因此第1空填： first = 1;  第2空是判断是不是偶数，是的话，if里面就输出他。  第3空输出第1个数后，first要加1，表示输出的不是第1个数了，不然每次输出的都是if里面的x，这样中间就没有空格分隔了。  第4空输出的内容和第3空前面的那一句比就是%x前面多了个空格。用来分隔。 感谢指导 下次一定改进不当行为

CSDN论坛新手指南


Question: 请帮忙讲解一下，谢谢！

第一个循环是输入十个数。 第二个循环是找到最大最小值。

CSDN论坛新手指南


Question: 请看看这个程序有什么问题

我觉得是指针传递的问题，你试试用create函数返回头结点指针。


Question: 求大神帮助

引用 4 楼 自信男孩的回复:输出不应该放到排序的循环里，应该想输入那样，重新用一个循环，逐个输出～ 嗯，对的，输出也得循环输出，负责就输出一个最大值

输出不应该放到排序的循环里，应该想输入那样，重新用一个循环，逐个输出～

引用 2 楼 weixin_45726302 的回复:[quote=引用 1 楼 45045399的回复:]printf()函数的位置问题 是最后那个输出函数吗？[/quote]嗯，最后一个printf函数位置

引用 1 楼 45045399的回复:printf()函数的位置问题 是最后那个输出函数吗？

printf()函数的位置问题


Question: 求助大神 谢谢大神

我这个是M3的板子的，中文的话因为编码关系，我就没去改了，你想看的话可以复制出来自己调下

//°´¼ü³õÊ¼»¯º¯Êý void KEY_Init(void) //IO³õÊ¼»¯ {   	GPIO_InitTypeDef GPIO_InitStructure; 	//³õÊ¼»¯KEY0-->GPIOA.13,KEY1-->GPIOA.15  ÉÏÀÊäÈë  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//Ê¹ÄÜPORTA,PORTEÊ±ÖÓ  	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//PE2~4 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖÃ³ÉÉÏÀÊäÈë  	GPIO_Init(GPIOE, &GPIO_InitStructure);//³õÊ¼»¯GPIOE2,3,4  	//³õÊ¼»¯ WK_UP-->GPIOA.0	  ÏÂÀÊäÈë 	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0; 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0ÉèÖÃ³ÉÊäÈë£¬Ä¬ÈÏÏÂÀ	   	GPIO_Init(GPIOA, &GPIO_InitStructure);//³õÊ¼»¯GPIOA.0  }  u8 KEY_Scan(u8 mode) {	  	static u8 key_up=1;//°´¼ü°´ËÉ¿ª±êÖ¾ 	if(mode)key_up=1;  //Ö§³ÖÁ¬°´		   	if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1)) 	{ 		delay_ms(10);//È¥¶¶¶¯  		key_up=0; 		if(KEY0==0)return KEY_RIGHT; 		else if(KEY1==0)return KEY_DOWN; 		else if(KEY2==0)return KEY_LEFT; 		else if(KEY3==1)return KEY_UP; 	}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1; 	      	return 0;// ÎÞ°´¼ü°´ÏÂ }   #define KEY0  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//¶ÁÈ¡°´¼ü0 #define KEY1  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)//¶ÁÈ¡°´¼ü1 #define KEY2  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)//¶ÁÈ¡°´¼ü2  #define KEY3  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//¶ÁÈ¡°´¼ü3(WK_UP)    #define KEY_UP 		4 #define KEY_LEFT	3 #define KEY_DOWN	2 #define KEY_RIGHT	1


Question: #c语言

引用 5 楼 s46264k 的回复：[quote=引用 2 楼 SNOY文的回复:]换成int main（） {return 0;}的格式 可是书上也是这些语句啊，就是不知道哪里错了[/quote]错误提示是什么

要请绕罗翔老师来教教你怎么截图

我把显示器扭断了

换成int main（） {return 0;}的格式

引用 2 楼 SNOY文的回复:换成int main（） {return 0;}的格式 可是书上也是这些语句啊，就是不知道哪里错了

CSDN论坛新手指南


Question: 输入8个正整数，输出其中所有的“对称数”，并求“对称数”的个数。

引用 18 楼 user-1 的回复:[quote=引用 17 楼 ljn20010724 的回复:] 谢谢你啊，我自己再试试 不客气，希望下次发代码能按照格式发就行。[/quote] #include<stdio.h> main() { 	int i,j,sum=0,k,n=1,a[8],b[10],count=0; 	for(i=0;i<8;i++)scanf("%d",&a[i]); 	for(i=0;i<8;i++) 	{ 		for(j=0;n!=0;j++) 		{ 		    n=a[i]%10; 		    count=count+1;		 		    if(a[i]!=a[count-1]) 			{ 				k=0;break; 			} 			if(k!=0) 		    { 			sum=sum+1; 			printf("%d",a[i]);	 		    }	 		}  	} 	printf("对称数个数：%d",sum);   } 这是我改的代码，但它只能输出一个9，个数也是1个，可是答案有4个

引用 17 楼 ljn20010724 的回复:谢谢你啊，我自己再试试 不客气，希望下次发代码能按照格式发就行。

引用 16 楼 user-1的回复:[quote=引用 15 楼 ljn20010724 的回复:] [quote=引用 14 楼 user-1的回复:]要想得到一个数字的长度，1、可以转成字符串。2、循环除10，用个int型变量计数。 噢噢噢，是不是整除10，看余数有几位就可以计算它的长度啦？[/quote]right[/quote] 谢谢你啊，我自己再试试

引用 15 楼 ljn20010724 的回复:[quote=引用 14 楼 user-1的回复:]要想得到一个数字的长度，1、可以转成字符串。2、循环除10，用个int型变量计数。 噢噢噢，是不是整除10，看余数有几位就可以计算它的长度啦？[/quote]right

引用 14 楼 user-1的回复:要想得到一个数字的长度，1、可以转成字符串。2、循环除10，用个int型变量计数。 噢噢噢，是不是整除10，看余数有几位就可以计算它的长度啦？

引用 11 楼 ljn20010724 的回复:引用 9 楼 user-1的回复:[quote=引用 7 楼 ljn20010724 的回复:] 这条语句我是跟在for语句后面的，它们在一行这和在哪儿没关系。把你的输入数据发出来。 9 26 262 2621 1232 14641 251 8118[/quote]那就好说了。错的有点离谱。  你的a的类型是char型的。而char型的范围是-128~127。很明显越界了。  所以要改成int型的。那么现在又有问题了。strlen只能计算字符串的长度。而int型的不是字符串。所以不能用这个函数。

引用 10 楼 user-1的回复:strlen函数是检测到'\0'结束，而你的代码没有这个，所以报错 好的，那所以这一题我不能用这个函数来计算字符串长度是吧？

引用 9 楼 user-1的回复:引用 7 楼 ljn20010724 的回复:这条语句我是跟在for语句后面的，它们在一行这和在哪儿没关系。把你的输入数据发出来。 9 26 262 2621 1232 14641 251 8118

strlen函数是检测到'\0'结束，而你的代码没有这个，所以报错

引用 3 楼 user-1 的回复:[quote=引用 2 楼 ljn20010724 的回复:] [quote=引用 1 楼 user-1的回复:]CSDN论坛新手指南 什么意思？？？？？？[/quote][/quote] 我还想问一下，这些错误是什么原因？

这条语句我是跟在for语句后面的，它们在一行

引用 5 楼 user-1 的回复:这里，你想输入的是字符还是数字。从后面的代码看应该是输入字符，那么就需要将%d改为%c 	char a[8]; 	for (i = 0; i < 8; i++) { 		scanf("%d", &a[i]); 	} 为啥我发的代码又这个框框，而你的没有呢，这是个问题

引用 3 楼 user-1的回复:[quote=引用 2 楼 ljn20010724 的回复:] [quote=引用 1 楼 user-1的回复:]CSDN论坛新手指南 什么意思？？？？？？[/quote][/quote] 在上面我有粘贴代码啊

引用 2 楼 ljn20010724 的回复:[quote=引用 1 楼 user-1的回复:]CSDN论坛新手指南 什么意思？？？？？？[/quote]

引用 1 楼 user-1的回复:CSDN论坛新手指南 什么意思？？？？？？

CSDN论坛新手指南


Question: 麻烦看段C代码

结贴了，自己搞明白了。手机端没法关闭，周一用pc关。

是啊，linux下没输出。

CSDN论坛新手指南  这是Linux环境下的代码吗？


Question: 冒泡排序

引用 6 楼 wowpH的回复:引用 3 楼 k....... 的回复:MySQL中可以实现数据的排序吗这和帖子有什么关系？ 第一次用这个软件，好像发错了

引用 4 楼 k....... 的回复:[quote=引用 1 楼 wowpH的回复:]CSDN论坛新手指南  问题是什么 MySQL中可以实现数据的排序吗[/quote]可以

引用 2 楼 user-2的回复:what is your problem? MySQL中可以实现数据的排序吗

引用 1 楼 wowpH的回复:CSDN论坛新手指南  问题是什么 MySQL中可以实现数据的排序吗

MySQL中可以实现数据的排序吗

what is your problem?

CSDN论坛新手指南  问题是什么


Question: c语言算法，求大神帮忙

CSDN论坛新手指南


Question: 求解一个地址二维模型的做法

有没有人能帮助我一下

急用呀急用，求哪位大神帮帮忙


Question: acm水题(Creating a Character),求看为什么我的代码不能AC

这题应该可以直接计算：  #include <stdio.h>  int main() {   int T, s, i, e, n;    scanf("%d", &T);   while(T--)   {     scanf("%d%d%d", &s, &i, &e);     ((n = (s + e > i) ? s + e - i : 0) & 1) ? n = n / 2 + 1 : n /= 2;     printf("%d\n", n);   }    return 0; }

看着没问题啊。


Question: 这个求两个数的最大公约数的有什么问题吗 为什么算出来答案不对

while那个地方错了，条件应该是或而不是与。即a和b只要有一个不为0都不是公约数。 while ((a != 0) || (b != 0)) 希望采纳，给分


Question: c大牛在这里停一停咯

CSDN论坛新手指南


Question: 急！！用feof读取文件的问题

PS：结贴会返还一半积分。  实际是我想要积分。

引用 13 楼 weixin_45660023 的回复:[quote=引用 12 楼 user-1的回复:][quote=引用 11 楼 user-1 的回复:] [quote=引用 9 楼 weixin_45660023 的回复:] [quote=引用 8 楼 user-1的回复:]结构体的定义也发一下。 我已经明白了，问题出在文件上，最后一行文件应该在输入一个回车，不然feof返回最后一行最后结尾，问题解决了，谢谢，分数给你。[/quote]我的天。我早就问你了。。。。文件的最后一个字符是数据还是空字符？[/quote]空字符包含换行，空格，tab。 另外，建议最后不要回车。以数据结尾比较好[/quote] 了解了。谢谢。请问为什么最好不要已回车作为结尾呢？[/quote]我上次写的时候，用feof函数他会认为后面还有数据。于是又多循环了一次。。。但那不是我想要的。也不能说建议吧。应该要分情况。你这么用没毛病的话，就这么写也行。

引用 12 楼 user-1的回复:[quote=引用 11 楼 user-1 的回复:] [quote=引用 9 楼 weixin_45660023 的回复:] [quote=引用 8 楼 user-1的回复:]结构体的定义也发一下。 我已经明白了，问题出在文件上，最后一行文件应该在输入一个回车，不然feof返回最后一行最后结尾，问题解决了，谢谢，分数给你。[/quote]我的天。我早就问你了。。。。文件的最后一个字符是数据还是空字符？[/quote]空字符包含换行，空格，tab。 另外，建议最后不要回车。以数据结尾比较好[/quote] 了解了。谢谢。请问为什么最好不要已回车作为结尾呢？

引用 11 楼 user-1 的回复:[quote=引用 9 楼 weixin_45660023 的回复:] [quote=引用 8 楼 user-1的回复:]结构体的定义也发一下。 我已经明白了，问题出在文件上，最后一行文件应该在输入一个回车，不然feof返回最后一行最后结尾，问题解决了，谢谢，分数给你。[/quote]我的天。我早就问你了。。。。文件的最后一个字符是数据还是空字符？[/quote]空字符包含换行，空格，tab。 另外，建议最后不要回车。以数据结尾比较好

引用 9 楼 weixin_45660023 的回复:[quote=引用 8 楼 user-1的回复:]结构体的定义也发一下。 我已经明白了，问题出在文件上，最后一行文件应该在输入一个回车，不然feof返回最后一行最后结尾，问题解决了，谢谢，分数给你。[/quote]我的天。我早就问你了。。。。文件的最后一个字符是数据还是空字符？

从你给的来看。我没看出什么问题。

引用 8 楼 user-1的回复:结构体的定义也发一下。 我已经明白了，问题出在文件上，最后一行文件应该在输入一个回车，不然feof返回最后一行最后结尾，问题解决了，谢谢，分数给你。

结构体的定义也发一下。

引用 3 楼 user-1 的回复:[quote=引用 4 楼 weixin_45660023 的回复:] [quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 weixin_45660023 的回复:] [quote=引用 1 楼 user-1的回复:]CSDN论坛新手指南 好的我下次注意。。。请问大佬我这个问题出在哪呢？[/quote]你把以前的帖子结一下，再说。[/quote] 等下哈，在外面，手机好像不能结。。[/quote]文件的最后一个字符是数据还是空字符？[/quote] 帖子结完了，下面是的文件，麻烦大佬帮看一下 001 Heaven Merry pub1 2008.03.02 48  003 World  Lisa  pub3 2004.11.22 44 004 Wrong  Helen pun5 2010.12.11 31 002 Hell   Tom   pub2 2005.07.04 29

引用 5 楼 user-1的回复:[quote=引用 4 楼 weixin_45660023 的回复:] [quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 weixin_45660023 的回复:] [quote=引用 1 楼 user-1的回复:]CSDN论坛新手指南 好的我下次注意。。。请问大佬我这个问题出在哪呢？[/quote]你把以前的帖子结一下，再说。[/quote] 等下哈，在外面，手机好像不能结。。[/quote]文件的最后一个字符是数据还是空字符？[/quote] 是数字，等下我回去，先把帖子结了，文件也发出来。

引用 4 楼 weixin_45660023 的回复:[quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 weixin_45660023 的回复:] [quote=引用 1 楼 user-1的回复:]CSDN论坛新手指南 好的我下次注意。。。请问大佬我这个问题出在哪呢？[/quote]你把以前的帖子结一下，再说。[/quote] 等下哈，在外面，手机好像不能结。。[/quote]文件的最后一个字符是数据还是空字符？

引用 3 楼 user-1的回复:[quote=引用 2 楼 weixin_45660023 的回复:] [quote=引用 1 楼 user-1的回复:]CSDN论坛新手指南 好的我下次注意。。。请问大佬我这个问题出在哪呢？[/quote]你把以前的帖子结一下，再说。[/quote] 等下哈，在外面，手机好像不能结。。

引用 2 楼 weixin_45660023 的回复:[quote=引用 1 楼 user-1的回复:]CSDN论坛新手指南 好的我下次注意。。。请问大佬我这个问题出在哪呢？[/quote]你把以前的帖子结一下，再说。

引用 1 楼 user-1的回复:CSDN论坛新手指南 好的我下次注意。。。请问大佬我这个问题出在哪呢？

CSDN论坛新手指南


Question: 青年歌手参加歌曲大奖赛，输入6个评委的打分，求这位选手的平均得分（去掉一个最高分和最低分）

引用 2 楼 user-1的回复:[quote=引用 楼主 ljn20010724 的回复:] 参考答案中分数是9.26 9.17 9.35 9.28 9.24 9.33 平均分是:9.277501 但是我代码调试时发现它不会执行if(a[i]>max){max=a[i];} 这条语句是为什么？ #include<stdio.h> main() { 	float a[6],sum=0.0,average=0.0,max=a[0],min=a[0]; 	int i; 	for(i=0;i<6;i++)scanf("%f",&a[i]);     for(i=0;i<6;i++) 	{ 		sum=sum+a[i]; 		if(a[i]<min) 		{ 		min=a[i]; 		}  		if(a[i]>max) 		{ 		max=a[i]; 		}  	} 	sum=sum-max-min; 	average=sum/4.0;	     printf("平均分：%f\n",average); } #include<stdio.h> int main() { 	float a[6] = {0}, sum = 0.0, average = 0.0, max = a[0], min = a[0]; 	int i; 	for (i = 0; i < 6; i++) 		scanf_s("%f", &a[i]); 	max = a[0]; 	min = a[0]; 	for (i = 0; i < 6; i++) 	{ 		sum = sum + a[i]; 		if (a[i] < min) 		{ 			min = a[i]; 		} 		if (a[i] > max) 		{ 			max = a[i]; 		} 	} 	sum = sum - max - min; 	average = sum / 4.0; 	printf("平均分：%f\n", average); 	return 0; } 你的max和min在数组a还没输入数据并且也没初始化的时候把a[0]赋值给它了 导致这两个变量是两个未知数 所以不会按你预期的走 你可以不在上面赋值初始化 直接初始化为0 然后下面赋值 如果非要在上面赋值初始化 你只能像这个代码这样写 而且下面还得赋值[/quote] 噢噢噢，我会了，谢谢你

引用 2 楼 user-1的回复:[quote=引用 楼主 ljn20010724 的回复:] 参考答案中分数是9.26 9.17 9.35 9.28 9.24 9.33 平均分是:9.277501 但是我代码调试时发现它不会执行if(a[i]>max){max=a[i];} 这条语句是为什么？ #include<stdio.h> main() { 	float a[6],sum=0.0,average=0.0,max=a[0],min=a[0]; 	int i; 	for(i=0;i<6;i++)scanf("%f",&a[i]);     for(i=0;i<6;i++) 	{ 		sum=sum+a[i]; 		if(a[i]<min) 		{ 		min=a[i]; 		}  		if(a[i]>max) 		{ 		max=a[i]; 		}  	} 	sum=sum-max-min; 	average=sum/4.0;	     printf("平均分：%f\n",average); } #include<stdio.h> int main() { 	float a[6] = {0}, sum = 0.0, average = 0.0, max = a[0], min = a[0]; 	int i; 	for (i = 0; i < 6; i++) 		scanf_s("%f", &a[i]); 	max = a[0]; 	min = a[0]; 	for (i = 0; i < 6; i++) 	{ 		sum = sum + a[i]; 		if (a[i] < min) 		{ 			min = a[i]; 		} 		if (a[i] > max) 		{ 			max = a[i]; 		} 	} 	sum = sum - max - min; 	average = sum / 4.0; 	printf("平均分：%f\n", average); 	return 0; } 你的max和min在数组a还没输入数据并且也没初始化的时候把a[0]赋值给它了 导致这两个变量是两个未知数 所以不会按你预期的走 你可以不在上面赋值初始化 直接初始化为0 然后下面赋值 如果非要在上面赋值初始化 你只能像这个代码这样写 而且下面还得赋值[/quote] 可是我在定义中把min和max的初值设为0.0之后代码就不执行if(a[i]<min){min=a[i];}这条语句了

引用 楼主 ljn20010724 的回复:参考答案中分数是9.26 9.17 9.35 9.28 9.24 9.33 平均分是:9.277501 但是我代码调试时发现它不会执行if(a[i]>max){max=a[i];} 这条语句是为什么？ #include<stdio.h> main() { 	float a[6],sum=0.0,average=0.0,max=a[0],min=a[0]; 	int i; 	for(i=0;i<6;i++)scanf("%f",&a[i]);     for(i=0;i<6;i++) 	{ 		sum=sum+a[i]; 		if(a[i]<min) 		{ 		min=a[i]; 		}  		if(a[i]>max) 		{ 		max=a[i]; 		}  	} 	sum=sum-max-min; 	average=sum/4.0;	     printf("平均分：%f\n",average); } 如果要求高精度 尽量定义成double型

引用 楼主 ljn20010724 的回复:参考答案中分数是9.26 9.17 9.35 9.28 9.24 9.33 平均分是:9.277501 但是我代码调试时发现它不会执行if(a[i]>max){max=a[i];} 这条语句是为什么？ #include<stdio.h> main() { 	float a[6],sum=0.0,average=0.0,max=a[0],min=a[0]; 	int i; 	for(i=0;i<6;i++)scanf("%f",&a[i]);     for(i=0;i<6;i++) 	{ 		sum=sum+a[i]; 		if(a[i]<min) 		{ 		min=a[i]; 		}  		if(a[i]>max) 		{ 		max=a[i]; 		}  	} 	sum=sum-max-min; 	average=sum/4.0;	     printf("平均分：%f\n",average); } #include<stdio.h> int main() { 	float a[6] = {0}, sum = 0.0, average = 0.0, max = a[0], min = a[0]; 	int i; 	for (i = 0; i < 6; i++) 		scanf_s("%f", &a[i]); 	max = a[0]; 	min = a[0]; 	for (i = 0; i < 6; i++) 	{ 		sum = sum + a[i]; 		if (a[i] < min) 		{ 			min = a[i]; 		} 		if (a[i] > max) 		{ 			max = a[i]; 		} 	} 	sum = sum - max - min; 	average = sum / 4.0; 	printf("平均分：%f\n", average); 	return 0; } 你的max和min在数组a还没输入数据并且也没初始化的时候把a[0]赋值给它了 导致这两个变量是两个未知数 所以不会按你预期的走 你可以不在上面赋值初始化 直接初始化为0 然后下面赋值 如果非要在上面赋值初始化 你只能像这个代码这样写 而且下面还得赋值


Question: vs2017编写c语言时不能用scanf，为什么啊？

文件第一行添加 #define _CRT_SECURE_NO_WARNINGS 即可

他认为这个不安全。所以优先支持scanf_s  1、改为scanf_s 2、属性里面取消安全检查 3、加宏定义#define _CRT_SECURE_NO_WARNINGS

不可能吧，肯定是程序哪里不对


Question: 连接两个字符串

引用 16 楼 qq_43455546 的回复:[quote=引用 15 楼 N_n_n_n_n_N的回复:][quote=引用 14 楼 qq_43455546 的回复:] [quote=引用 13 楼 N_n_n_n_n_N的回复:][quote=引用 12 楼 qq_43455546 的回复:] [quote=引用 11 楼 N_n_n_n_n_N的回复:][quote=引用 9 楼 qq_43455546 的回复:] [quote=引用 7 楼 user-2的回复:][quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)[/quote] 你看一下 是这样吗？[/quote] 我把下面的函数改了，但是还是不行，是主函数字符串输入的事儿吗？[/quote] 我在上面给你贴代码了 你可以看一下是不是这个效果 如果不是你就说哪不对 如果是 你就对照着看一下[/quote] 好，我看一下，谢谢了[/quote] 如果对记得结贴 谢谢 不对就接着问[/quote] 这个结贴是不是只能用电脑，我用的手机，好像没有这个选项[/quote] 好像是的 你用电脑的时候再结吧 记得结了就行

引用 15 楼 N_n_n_n_n_N的回复:[quote=引用 14 楼 qq_43455546 的回复:] [quote=引用 13 楼 N_n_n_n_n_N的回复:][quote=引用 12 楼 qq_43455546 的回复:] [quote=引用 11 楼 N_n_n_n_n_N的回复:][quote=引用 9 楼 qq_43455546 的回复:] [quote=引用 7 楼 user-2的回复:][quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)[/quote] 你看一下 是这样吗？[/quote] 我把下面的函数改了，但是还是不行，是主函数字符串输入的事儿吗？[/quote] 我在上面给你贴代码了 你可以看一下是不是这个效果 如果不是你就说哪不对 如果是 你就对照着看一下[/quote] 好，我看一下，谢谢了[/quote] 如果对记得结贴 谢谢 不对就接着问[/quote] 这个结贴是不是只能用电脑，我用的手机，好像没有这个选项

引用 14 楼 qq_43455546 的回复:[quote=引用 13 楼 N_n_n_n_n_N的回复:][quote=引用 12 楼 qq_43455546 的回复:] [quote=引用 11 楼 N_n_n_n_n_N的回复:][quote=引用 9 楼 qq_43455546 的回复:] [quote=引用 7 楼 user-2的回复:][quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)[/quote] 你看一下 是这样吗？[/quote] 我把下面的函数改了，但是还是不行，是主函数字符串输入的事儿吗？[/quote] 我在上面给你贴代码了 你可以看一下是不是这个效果 如果不是你就说哪不对 如果是 你就对照着看一下[/quote] 好，我看一下，谢谢了[/quote] 如果对记得结贴 谢谢 不对就接着问

引用 13 楼 N_n_n_n_n_N的回复:[quote=引用 12 楼 qq_43455546 的回复:] [quote=引用 11 楼 N_n_n_n_n_N的回复:][quote=引用 9 楼 qq_43455546 的回复:] [quote=引用 7 楼 user-2的回复:][quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)[/quote] 你看一下 是这样吗？[/quote] 我把下面的函数改了，但是还是不行，是主函数字符串输入的事儿吗？[/quote] 我在上面给你贴代码了 你可以看一下是不是这个效果 如果不是你就说哪不对 如果是 你就对照着看一下[/quote] 好，我看一下，谢谢了

引用 12 楼 qq_43455546 的回复:[quote=引用 11 楼 N_n_n_n_n_N的回复:][quote=引用 9 楼 qq_43455546 的回复:] [quote=引用 7 楼 user-2的回复:][quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)[/quote] 你看一下 是这样吗？[/quote] 我把下面的函数改了，但是还是不行，是主函数字符串输入的事儿吗？[/quote] 我在上面给你贴代码了 你可以看一下是不是这个效果 如果不是你就说哪不对 如果是 你就对照着看一下

引用 11 楼 N_n_n_n_n_N的回复:[quote=引用 9 楼 qq_43455546 的回复:] [quote=引用 7 楼 user-2的回复:][quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)[/quote] 你看一下 是这样吗？[/quote] 我把下面的函数改了，但是还是不行，是主函数字符串输入的事儿吗？

引用 9 楼 qq_43455546 的回复:[quote=引用 7 楼 user-2的回复:][quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)[/quote] 你看一下 是这样吗？

引用 9 楼 qq_43455546 的回复:[quote=引用 7 楼 user-2的回复:][quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)[/quote] #include<stdio.h> #include<string.h> int main() { 	   void fun(char string[], char string1[]); 	   char s1[100] = { 0 }, s2[50] = {0}; 	   int i; 	   printf("input string1:"); 	   for (i = 0; i < 100; i++) 	   { 	      scanf_s("%c", &s1[i]); 		      if (s1[i] == '\n') 			      break; 	   } 	   printf("input string2:"); 	   for (i = 0; i < 50; i++) 	   { 		      scanf_s("%c", &s2[i]); 		      if (s2[i] == '\n') 			      break; 	   } 	   fun(s1, s2); 	   for (i = 0; i < strlen(s1); i++) 	   { 		      printf("%c", s1[i]); 	   } 	   return 0; } void fun(char string[], char string1[]) { 	   int i = 0, j; 	   while (i < strlen(string)&&string[i]!='\n') 		      i++; 	   for (j = 0; j < strlen(string1); j++) 		      string[i++] = string1[j]; }

引用 7 楼 user-2的回复:[quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] OK，我以后会规范的发帖子的，不好意思(T ^ T)

引用 7 楼 user-2 的回复:[quote=引用 6 楼 N_n_n_n_n_N 的回复:] [quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。[/quote] 挺好挺好 支持你 主要是太多人发的东西的确没法看

引用 6 楼 N_n_n_n_n_N 的回复:[quote=引用 4 楼 user-2 的回复:] CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个[/quote]只是写个简单的。还有的没想到还没写。以后就没脸皮的往新手帖子（不合要求的）下面发链接。

引用 4 楼 user-2 的回复:CSDN论坛新手指南 动作这么快 感觉刚看到你发帖说要做一个

引用 3 楼 N_n_n_n_n_N的回复:[quote=引用 2 楼 qq_43455546 的回复:] [quote=引用 1 楼 N_n_n_n_n_N的回复:]i不初始化一下吗 我刚刚用for循环也不行，for循环有初始化[/quote] 你贴代码上来 我跑一下[/quote] #include<stdio.h> #include<string.h> int main() {void fun(char string[],char string1[]); char s1[100],s2[50]; printf("input string1:"); scanf("%s",s1); printf("input string2:"); scanf("%s",s2); fun(s1,s2); printf("after string is:%s",s1); return 0; } void fun(char string[],char string1[]) {int i=0,j; while(i<strlen(string))     i++; for(j=0;string1[j]<strlen(string1);j++)     string[i++]=string1[j]; }

CSDN论坛新手指南

引用 2 楼 qq_43455546 的回复:[quote=引用 1 楼 N_n_n_n_n_N的回复:]i不初始化一下吗 我刚刚用for循环也不行，for循环有初始化[/quote] 你贴代码上来 我跑一下

引用 1 楼 N_n_n_n_n_N的回复:i不初始化一下吗 我刚刚用for循环也不行，for循环有初始化

i不初始化一下吗