Question: 逆序数c语言

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

#include<stdio.h>   //void main() int main() {     int num;      printf("请输入一个4位数：");     scanf("%d", &num);      while (num) {         printf("%d\t", num % 10);         num /= 10;     }     putchar(10);       /*     int a,b,c,d,e,f,g;     printf("请输入一个4位数：");     scanf("%d",&a);     b=a/1000;     c=a%1000;     d=c/100;     e=c%100;     f=d/10;     g=e%10;     printf("这四位数的逆序数是：%d%d%d%%d",g,f,d,b);     */ } 供参考～

你为什么不直接用while呢？ #include<stdio.h> int main() {  int x=0; int i=0; scanf("%d",&x); while(x>0){ i=i*10+x%10; x=x/10;} printf("%d",x); return 0; }

引用 1 楼 Huang Liudi-Brody 的回复：#include<stdio.h> int main() {      int  n,a; printf("请输入4位数的整数："); scanf("%d",&n); /*第一个n%10表示取出个位，n/10%10  表示取十位，n/100%10表示百位   n%1000表示千位    */ a=((n%10)*1000) + (((n/10)%10)*100)) +((n/100)%10)*10) + ((n%1000)); printf("\n逆序后：%d",a); return  0; } //手机手打的   不知道有没有错   大概就是这样子一个思路千位是/的


Question: 求大佬解答如何编写一个太阳方位跟踪系统的程序

天顶角、方位角、高度角

这是什么东东。。。


Question: [Error] 'head' was not declared in this scope 为啥是这个错误啊

非常感谢，差不多解决了

（1）add()函数的声明与底下的原形不一致，具体是第一个参数的类型不一致。 （2）head在main()函数中没有定义过。 （3）add()函数是没有返回值的，如何能赋值呢？


Question: 这是那个银行单列排队的那个题，调试显示这个for循环有一次执行之后没有效果，明明执行了的。大佬给看看吧

SORRY，沒注意到。  不知道你説的沒效果是什麽意思？  有時候我也見過調試過程很詭異的，看起來像是IDE沒有準確定位。建議你可以在關鍵位置設置輸出進行觀察再試試看。  另外，樓上説的這個People的定義確實有問題，一般編譯器應該會報錯，起碼不是你預期的以輸入的N來定義數組，C不支持這樣的動態定義。

引用 1 楼 老马何以识途的回复:哪個for循環？你這代碼裏很多個哦！ 那个for循环后边有注释

People People[N]; 这个代码有问题吧？首先，N不是常量，其次变量名域类型名相同。

哪個for循環？你這代碼裏很多個哦！


Question: C语言程序设计

这题挺弱智的，输入0050，反过来算0500，还是算05（也就是50反过来变成5还是变成500）？而且d0d1d2d3用数组多好，还可以用循环 不考虑特例，按题目设想来做 b=0; temp=a; if (temp>0) { //0反过来还是0。或者大于999保证4位数？ d0=temp%10; b=d0; temp /= 10; d1=temp%10; b = b*10+d1; temp /=10; d2=temp%10; b = b*10+d2; d3=temp%10; b = b*10+d3; }


Question: 编程计算分段函数？

主要两个点，一个是if条件判断语句，一个是用预处理指令include导入math库，具体自己搜吧。这种简单语句在入门书籍肯定会有，先把自己的书浏览一遍，这类简单问题自己解决的好。

引用 1 楼 observer_616的回复:简单的if条件判断，加一个else if就能判断三个了呗 好像很简单的样子

引用 2 楼 user-2的回复:小白就多点想和多点练习 if（0<x && x < 1）{....} else if(3 <= x && x <= 4){....} else{.....} 控制结构 今天才上了一点

简单的if条件判断，加一个else if就能判断三个了呗


Question: 来帮忙啊！! !

看不清图片，没办法解决啊

我的程序在一楼啊，就写在一楼

char a 20 scanfs %s a sizeof a printf %d/n a return  0 符号省略了，格式没问题


Question: C语言中现在还可以有这种程序吗？

引用 5 楼 @风轻云淡_的回复:[quote=引用 3 楼 qq_44780839 的回复:] 谢谢你 那可以告诉我这个是什么意思嘛？ 此为逗号表达式，运算顺序自左向右，如4楼所述，整个表达式的值为最后一个表达式的值，运行完之后  m=3; n=4; x=4;  [/quote] 谢谢大佬指点呀，嘻嘻🌸

引用 4 楼 qybao的回复:逗号表达式。整个表达式的值是最后一个表达式的值 谢谢大佬指点呀，嘻嘻🌸

引用 3 楼 qq_44780839 的回复:谢谢你 那可以告诉我这个是什么意思嘛？ 此为逗号表达式，运算顺序自左向右，如4楼所述，整个表达式的值为最后一个表达式的值，运行完之后  m=3; n=4; x=4;

逗号表达式。整个表达式的值是最后一个表达式的值

引用 2 楼 早打大打打核战争的回复:不可以，n重定义了 int  m,n; int  x=(m=3,n=4);  可以 谢谢你😊 那可以告诉我这个是什么意思嘛？

不可以，n重定义了 int  m,n; int  x=(m=3,n=4);  可以

没见过，可以这样？


Question: 求大神帮忙

引用 4 楼 weixin_44806212的回复:[quote=引用 1 楼 时夜的回复:]整理成一个函数放在里面不就好了，问题是啥？ 上面的程序后还有} } if (3==i) { printf("三次密码错误，退出登录\n")； return 0； }[/quote] 模糊到看不清啊……。。。。。

引用 1 楼 时夜的回复:整理成一个函数放在里面不就好了，问题是啥？ 上面的程序后还有} } if (3==i) { printf("三次密码错误，退出登录\n")； return 0； }

引用 1 楼 时夜的回复:整理成一个函数放在里面不就好了，问题是啥？ 要进行密码验证，三次错误就退出登录，

引用 1 楼 时夜的回复:整理成一个函数放在里面不就好了，问题是啥？ 学生成绩管理系统的C语言程序设计，插进去，总是不对，

整理成一个函数放在里面不就好了，问题是啥？


Question: 数据结构题(快速排序算法的应用)

识别ASCII，排序


Question: 求助QAQ  C语言 数组去重排序（调用了库函数qsort）在一个样例上一直runtime error

引用 4 楼 user-1的回复:[quote=引用 3 楼 超超超超超级菜 的回复:] [quote=引用 2 楼 user-1的回复:]for(j=1;data[j]!='\0';j++) 没有确保结尾0 会出现垃圾值和0比较 数组跑飞越界 出错 对哦，，判断条件改成 j<=i 应该就可以了8[/quote]还有输入的错误[/quote] 好的好的谢谢了

引用 3 楼 超超超超超级菜 的回复:[quote=引用 2 楼 user-1的回复:]for(j=1;data[j]!='\0';j++) 没有确保结尾0 会出现垃圾值和0比较 数组跑飞越界 出错 对哦，，判断条件改成 j<=i 应该就可以了8[/quote]还有输入的错误

引用 2 楼 user-1的回复:for(j=1;data[j]!='\0';j++) 没有确保结尾0 会出现垃圾值和0比较 数组跑飞越界 出错 对哦，，判断条件改成 j<=i 应该就可以了8

while(scanf("%c",&data[i])!=EOF) 输入整型用%d


Question: 急求，数据结构题(用c写)

引用 1 楼 Slzde_sub的回复:50k分可以考虑，50分？ 实在不好意思，初来乍到，没什么分，我也明白它的难度，现在就是中间卡住了，希望征求一下大家有没有做过的经验，可以帮忙给个思路建议，

👀👀实在不好意思，初来乍到，没什么分🙃🙃，我也明白它的难度，现在就是中间卡住了，希望征求一下大家有没有做过的经验，可以帮忙给个思路建议，😁😁😁


Question: 格式化输入输出问题

楼上正解，可以多试几遍


Question: 一道c语言程序设计题，求大神，急。

可以说的再具体一点吗？


Question: 各位大佬有没有C语言实现Http get和post的封装好的方法啊【图片】

引用 2 楼 程序猿Mars 的回复:[quote=引用 8 楼 WNs_ACE 的回复:] 如果是使用vs2017的话，我比较建议使用cpprestsdk咯，这个是微软写的一个开源网络库来的，cpprestsdk是面向对象的写法，如果使用libcurl也是可以的，libcurl的面向过程的写法，百度直接搜索libcurl就有了吧，我记得第一个就是了  想问下 我手写的HTTP GET 为啥HOST 不能写IP+端口 只能写域名呢？[/quote] 因为你不知道知道域名对应的公网IP，只有DNS解析才知道，所以一般访问公网的都是使用域名，而不是使用IP的原因，自己手写的话，也是可以，但是首先通过DNS解析出来IP，然后再通过socket来实现连接，然后再发送http协议的字符串过去给服务器，会麻烦很多而且自己写的话，比较容易出错，而且如果是https的话，还要调用OpenSSL，那就更麻烦了，所以建议还是使用开源类库

引用 4 楼 smwhotjay 的回复: 我记得有几种选择啊。  想问下 我手写的HTTP GET 为啥HOST 不能写IP+端口 只能写域名呢？

引用 8 楼 WNs_ACE 的回复:如果是使用vs2017的话，我比较建议使用cpprestsdk咯，这个是微软写的一个开源网络库来的，cpprestsdk是面向对象的写法，如果使用libcurl也是可以的，libcurl的面向过程的写法，百度直接搜索libcurl就有了吧，我记得第一个就是了  想问下 我手写的HTTP GET 为啥HOST 不能写IP+端口 只能写域名呢？

我记得有几种选择啊。

你想自己實現還是找個sdk？

baidu WinInet

libcurl?

引用 5 楼 WNs_ACE 的回复:如果是C语言的啊，就使用libcurl吧，这个又是跨平台的，如果是c++的话，可以考虑使用boost.asio或者微软的cpprestsdk，看情况和看需求咯，自己写的话，不太建议因为很花时间，而且写出来的效果和效率也没有这些类库好，建议直接是使用吧  那如果是https的话 也可以用libcurl吗？这个libcurl在哪里下载呢....大神一般用什么写C语言啊？VS2017吗？

libcurl吧，网上有编译的方法，也有使用方法，很简单


Question: 数据结构实现单链表的逆序和任意两个元素的逆置

你的问题是什么？如果只是总结分享建议放到博客里哈


Question: C语言新手求问，怎么才能输出更多位数有效的小数

仅供参考：#include <stdio.h> long a=10000; long b; long c=2800; long d; long e; long f[2801]; long g; int main() {     for(;b-c;) f[b++]=a/5; //  while (1) { //      if (0==b-c) break; //      f[b]=a/5; //      b++; //  }      //f[0 - 2800] = 10000/5     for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)           for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); //  while (1) { //      d=0; //      g=c*2; //      if (0==g) break; //      b=c; //      while (1) { //          d+=f[b]*a; //          f[b]=d%--g; //          d/=g--; //          --b; //          if (0==b) break; //          d*=b; //      } //      c-=14; //      printf("%.4d",e+d/a); //      e=d%a; //  }  	return 0; }

建议先了解下组成原理，搞清楚浮点数是怎么存储的 这种需求，只能是通过字符串来处理了 百度搜 “大数运算”可以参考下

引用 2 楼 user-4的回复:如果你使用的是 C/C++语言的双精度数(double)，其有效数字仅16位，其后的数字毫无意义。 就是double型，只有16位有效小数

一般来说，只能使用字符串，自己定义计算规则。

看起来图片不清晰，这个APP有点问题啊。。。还不能删帖重发吗。。


Question: 新手问一个c语言问题

运算优先级的问题 p->a 常用的用法 (*p).a 有点像脱裤子放屁，多此一举，但功能上和p->a一样 *p.a编译报错 request for member 'a' in something not a structure or union

p->a和(＊p).a功能一样，*p.a是先.所以报错。


Question: C语言到底什么时候改什么时候不改啊，指针搞得好晕，求解

介个，你的图片啥也看不清

你的图是用座机拍的吗？


Question: 求个思路

嗯，准备先用matlab求一下通解，或者是把8x35的矩阵简化下来.

《最优化方法》（高等教育出版社）第二章，“单纯形方法”。代码当年我用C++写过……不过不知道扔哪里去了。

对于线性方程组，只有未知数和方程式个数一样多， 才能有确定解。你现在未知数比方程式个数多出如此多，怎么可能求解，就是枚举，神仙也给不出。  你必须首先在方程式方面下功夫，与程序语言无关。

把范围扩大到-1到1上的话，和0到1的计算量相差6个数量级，好像不是一天能跑下来的..

未知数范围是-6到6...本来以为全部未知数在0到1上可能会有解存在..穷举法跑了一遍，发现没有

好像搞错了..方程都是线性的，非齐次方程，这样会不会有简单点的解法


Question: vc编译运行没问题，oj编译出问题，求帮忙

求大佬帮忙看下

引用 5 楼 Slzde_sub 的回复:  出错代码呢  总不可能只告诉你CE而不告诉你原因把谢谢大佬提示了我看错误信息 一直想着是不是指针出问题了，没去看错误信息，刚把struct结构体放到函数声明的前面就可以了 谢谢大佬们

原本的输入我改了下，变得清晰了一点，还是有编译问题 #include <stdio.h> #include <stdlib.h>  void input(struct student *s,int n); void print(struct student *s,int n);  struct student { 	char number[25]; 	char name[25]; 	int score[3]; };  int main() { 	struct student *s; 	int n;  	scanf("%d",&n); 	s=(struct student*)malloc(n*sizeof(struct student));  	input(s,n); 	print(s,n); 	 }  void input(struct student *s,int n) { 	int i; 	for(i=0;i<n;i++) 	{ 		scanf("%s %s %d %d %d",s[i].number,s[i].name, 			&s[i].score[0],&s[i].score[1],&s[i].score[2]); 	} }   void print(struct student *s,int n) { 	int i; 	for(i=0;i<n;i++) 	{ 		printf("%s,%s,%d,%d,%d\n",s[i].number,s[i].name, 			s[i].score[0],s[i].score[1],s[i].score[2]); 	} }

引用 5 楼 Slzde_sub 的回复:  出错代码呢  总不可能只告诉你CE而不告诉你原因把我的锅，忘了放  dotcpp上的提示： vc6的没问题：

引用 3 楼 niiiloc 的回复:g++编译报错main函数必须返回int   我试了一下，不是这个问题

g++编译报错main函数必须返回int

vc编译没出问题，dotcpp上编译出错，  输入格式： 2 a100 clang 70 80 90 b200 dotcpp 90 85 75  输出格式： a100,clang,70,80,90 b200,dotcpp,90,85,75   求大佬帮忙看看哪里出问题了


Question: c语言 大量数据在写入文件时会崩溃 急求问题所在和解决办法

引用 楼主 qq_41821823的回复:想实现的功能是建立一堆文本文件的索引，但是现在已经成功创建了一个索引表，但把索引表存入文件的时候就会进行到一半然后崩溃 需要在目录下创建一个book文件夹储存信息 现在的问题 信息太多时候写入最后save_index 崩溃 释放内存好像不行 代码如下 头文件  #ifndef Searchengine_H #define Searchengine_H #include <stdio.h>   #include <windows.h>  #include<stdlib.h> struct word_place    //保存单词的地址  {     int book_id;     char book_name[30];     long int location; }; typedef struct word_place place; typedef struct key* key_node; struct key          //为每个关键词创造一个节点  {     int id;     char key[20];     int  find_number;     place *places; }; key_node key_information[1000000];   struct file_inf    //搜索文件的序号  {     int number;     char name[100]; }file_information[10000];   void find(char * lpPath); int find_word(char* word); void add_key(char* word,int num,long int place) ; int is_letter(char c) ; void index_a_book(int num) ; void kuaipai(int left,int right,key_node a[]) ; void save_index(int x);  #endif  遍历文件夹获取文件信息的文件  #include"search_engine.h" void find(char * lpPath)  //读取一个文件夹的文件名  {       int i=0;      char szFind[MAX_PATH],szFile[MAX_PATH];       WIN32_FIND_DATA FindFileData;       HANDLE hFind;     strcpy(szFind,lpPath);       strcat(szFind,"\\*.*");      hFind = FindFirstFile(szFind,&FindFileData);       if(INVALID_HANDLE_VALUE == hFind)       return;       while(TRUE)       {           if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)           {                if(FindFileData.cFileName[0]!='.')                   {                       strcpy(szFile,lpPath);                       strcat(szFile,"\\");                        strcat(szFile,FindFileData.cFileName);                       find(szFile);                   }           }           else                {                 // printf("%s\n",FindFileData.cFileName);                file_information[i].number=i;               strcpy(file_information[i].name,FindFileData.cFileName);               i++;              }           if(!FindNextFile(hFind,&FindFileData))            {             file_information[i].name[0]='\0';             break;            }     }   }   void save_filenum()//储存文件序列  {     int i=0;     FILE *fp;     if((fp=fopen("book index.txt","r+"))==NULL)     {printf("open error\n");     exit(0);     }     char* is_write="0";     fscanf(fp,"%s",&is_write);     printf("%c\n",is_write);     if (is_write=='0')     fclose(fp);     else     {         is_write="1";         fseek(fp,0,0);         fprintf(fp,"%s\n",is_write);     }     for(i=0;file_information[i].name[0];i++)     {         fprintf(fp,"%d ",file_information[i].number);         fprintf(fp,"%s\n",file_information[i].name);     }     fclose(fp); } 创建和储存索引的函数  #include"search_engine.h"  int find_word(char* word)  //判断是否为已有的关键词  {     int i;      for(i=0;key_information[i];i++)      {          if(strcmp(key_information[i]->key,word)==0)         break;     }      return i; }//少一个储存查找的算法   void add_key(char* word,int num,long int place) //把关键词添加到索引中  {     int i=find_word(word);      if(!key_information[i])     {         key_information[i]=(key_node)malloc(sizeof(struct key));         strcpy(key_information[i]->key,word);         key_information[i]->find_number=1;         key_information[i]->places=(struct word_place*)malloc(100*sizeof(struct word_place)) ;     }     else      key_information[i]->find_number++;     int temp=key_information[i]->find_number-1;     if(temp%98==0)     key_information[i]->places=(struct word_place*)realloc(key_information[i]->places,(temp+100)*sizeof(struct word_place));     strcpy(key_information[i]->places[temp].book_name,file_information[num].name);     key_information[i]->places[temp].book_id=num;     key_information[i]->places[temp].location=place; } int is_letter(char c)  //判断一个字符是否是特殊字符  {     if(c >='0' && c<='9')     return 1;     else if(c >='a' && c<='z' ||  c >='A' && c<='Z')     return 2;     else return 0; } void index_a_book(int num) //为一本书中的单词建立索引  {     FILE *fp;     char* name=file_information[num].name;     char way[100]="book\\";     strcat(way,name);     printf("%s\n",way);     if((fp=fopen(way,"r+"))==NULL)     {printf("open error\n");     exit(0);     }      char* read;     read=(char*)malloc(sizeof(char)*100);      long int place=0;     fseek(fp,0L,SEEK_SET);      while(!feof(fp))     {         fscanf(fp,"%s",read);         if(is_letter(read[strlen(read)-1])==0)         read[strlen(read)-1]=0;         if(is_letter(read[0])==2)//首为必须为字母          {         printf("%s\n",read);          add_key(read,num,place);         place++;          }      }     fclose(fp); } void kuaipai(int left,int right,key_node a[])  //对列表快速排序  {     int i,j;     char* middle;     key_node temp;     i=left;     j=right;     middle=a[(i+j)/2]->key;     do{         while(strcmp(a[i]->key,middle)<0&&i<right)         i++;         while(strcmp(a[j]->key,middle)>0&&j>left)         j--;         if(i<=j)         {             temp=a[i],a[i]=a[j],a[j]=temp;             j--;             i++;         }     }while(i<=j);     if(left<j)     kuaipai(left,j,a);     if(right>i)     kuaipai(i,right,a); }  void save_index(int x)//储存索引  {     FILE *fp;     if((fp=fopen("word index.txt","w+"))==NULL)     {printf("open error\n");     exit(0);     }      printf("open success\n");     printf("%d",x);     int i,j;     fprintf(fp,"%d\n",x);      i=0;     printf("%d %s %d \n",i,key_information[i]->key,key_information[i]->find_number);     printf("%c %d",key_information[i]->key[0],is_letter(key_information[i]->key[0]));     fprintf(fp,"%d %s %d ",i,key_information[i]->key,key_information[i]->find_number);  /*  for(i=0;i<100;i++)     {         fprintf(fp,"%d %s %d ",i,key_information[i]->key,key_information[i]->find_number);         for(j=0;j<key_information[i]->find_number;j++)         {             fprintf(fp,"%d %d ",key_information[i]->places[j].book_id,key_information[i]->places[j].location);         }         fprintf(fp,"ok\n");     }*/     fclose(fp); }   主函数 #include"search_engine.h"   //void add index()  int  main()   {    char filepath[MAX_PATH]="book";  //可自己输入文件夹绝对路径   find(filepath);    int i=0; /* for(i=0;file_information[i].name[0];i++)  {     printf("%d %s\n",file_information[i].number,file_information[i].name);  }*/  save_filenum();  for(i=0;file_information[i].name[0];i++) {     index_a_book(i);  } /*for(i=0;key_information[i];i++) {     printf("%s\n",key_information[i]->key); } printf("%s\n",key_information[1]->places[0].book_name);*/ int word_num;     for(i=0;key_information[i];i++)     ;     word_num=i-1; kuaipai(0,word_num,key_information); printf("ok\n"); save_index(word_num); system("PAUSE");  for(i=0;key_information[i];i++) {     free(key_information[i]); }   return 0; }  很急，求大佬解答 数据一大就保存失败，释放内存失败了，到底是什么原理

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


Question: 用c语言写一段代码，是小写字母，输出是大写字母，如果输入其他字符，直接输出

引用 6 楼 qq_44797241的回复:[quote=引用 5 楼 超超超超超级菜的回复:][quote=引用 2 楼 Q__ing的回复:]代码如下: #include<stdio.h> int main() {     char a;     scanf("%c",&a);     if(a<='z'&&a>='a')         a=a-'a'+'A';     printf("%c",a);     if (a>='z'&&a<='a')  	printf("%c",a);     return 0; }  结果如下:   if (a>='z'&&a<='a')  这一句有问题，是永假的 应该改成  if (a>'z'||a<'a')   而且可以用一个 else 代替[/quote] 谢谢啦，我是大一的学生。刚接触c还望多多关照[/quote] 我也是😉加油加油😉

引用 2 楼 Q__ing的回复:代码如下: #include<stdio.h> int main() {     char a;     scanf("%c",&a);     if(a<='z'&&a>='a')         a=a-'a'+'A';     printf("%c",a);     if (a>='z'&&a<='a')  	printf("%c",a);     return 0; }  结果如下:   而且if(a<='z'&&a>='a')后的两个语句应该用{}括起来

引用 5 楼 超超超超超级菜的回复:[quote=引用 2 楼 Q__ing的回复:]代码如下: #include<stdio.h> int main() {     char a;     scanf("%c",&a);     if(a<='z'&&a>='a')         a=a-'a'+'A';     printf("%c",a);     if (a>='z'&&a<='a')  	printf("%c",a);     return 0; }  结果如下:   if (a>='z'&&a<='a')  这一句有问题，是永假的 应该改成  if (a>'z'||a<'a')   而且可以用一个 else 代替[/quote] 谢谢啦，我是大一的学生。刚接触c还望多多关照

引用 2 楼 Q__ing的回复:代码如下: #include<stdio.h> int main() {     char a;     scanf("%c",&a);     if(a<='z'&&a>='a')         a=a-'a'+'A';     printf("%c",a);     if (a>='z'&&a<='a')  	printf("%c",a);     return 0; }  结果如下:   if (a>='z'&&a<='a')  这一句有问题，是永假的 应该改成  if (a>'z'||a<'a')   而且可以用一个 else 代替

isupper()：判断是否是大写 islower()：判断是否是小写 toupper()：小写转换为大写 tolower()：大写转换为小写

#include<stdio.h>  int main() {     char a;     scanf("%c",&a);     if(a<='z'&&a>='a')         a=a-'a'+'A';     printf("%c",a);     return 0; }


Question: C语言编译运行后 字符串输出的结果是白色方块是怎么回事呀

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

你看看是不是内存溢出了

每次都把0,1的值赋值给to[i]

引用 5 楼 weixin_44417360 的回复:[quote=引用 1 楼 自信男孩 的回复:] 应该是字符串没有结束符'\0'。 建议查一下是否在有效字符串后加没加'\0'。  另外，也建议把代码发出来。  引用 2 楼 user-6 的回复:代码写错 就是这么回事   你这样问 别人只能这样答   引用 3 楼 潇潇-易水 的回复:大概是因为 数组什么的 的内存 没分配  即 没初始化吧  我找到问题了 是代码while((to[i]=from[i] !='\0'))这里打错了括号 应该是while((to[i]=from[i]） !='\0') 你们能告诉我么   为啥   我这里打错了 按照赋值运算 应该是直接结束 怎么会出现小方框呢？？[/quote] 那就是to数组里没有'\0'，所以出现这样的问题

我也是

引用 1 楼 自信男孩 的回复:应该是字符串没有结束符'\0'。 建议查一下是否在有效字符串后加没加'\0'。  另外，也建议把代码发出来。 引用 2 楼 user-6 的回复:代码写错 就是这么回事   你这样问 别人只能这样答 引用 3 楼 潇潇-易水 的回复:大概是因为 数组什么的 的内存 没分配  即 没初始化吧  我找到问题了 是代码while((to[i]=from[i] !='\0'))这里打错了括号 应该是while((to[i]=from[i]） !='\0') 你们能告诉我么   为啥   我这里打错了 按照赋值运算 应该是直接结束 怎么会出现小方框呢？？

这是代码  #include<stdio.h> #define MAXLINE 1000 int getline(char line[],int maxline); void copy(char to[],char from[]); main() { 	int len; 	int max; 	char line[MAXLINE]; 	char longest[MAXLINE]; 	max=0; 	while((len=getline(line,MAXLINE))>0) 		if(len>max){ 			max=len; 			copy(longest,line); 		} 	if(max>0) 		printf("%s",longest); 	return 0; } int getline(char s[],int lim) { 	int c,i; 	for(i=0;i<lim-1 && (c=getchar()) != EOF && c!='\n';++i) 		s[i]=c; 	if(c=='\n'){ 		s[i]=c; 		++i; 	} 	s[i]='\0'; 	return i; } void copy(char to[],char from[]) { 	int i; 	i=0; 	while((to[i]=from[i] !='\0')) 		++i; }  引用 1 楼 自信男孩 的回复:应该是字符串没有结束符'\0'。 建议查一下是否在有效字符串后加没加'\0'。  另外，也建议把代码发出来。 引用 2 楼 user-6 的回复:代码写错 就是这么回事   你这样问 别人只能这样答 引用 3 楼 潇潇-易水 的回复:大概是因为 数组什么的 的内存 没分配  即 没初始化吧

大概是因为 数组什么的 的内存 没分配  即 没初始化吧

代码写错 就是这么回事   你这样问 别人只能这样答


Question: 设有一下定义语句和输入语句:

scanf()停止从数据流中读取数据的时机：遇到空格时或者遇到不能转换指定格式的数据时。 所以，即使你输入“20A20B”，此时a1，a2，c1和c2的值依然是20，20，A和B。 VS2015测试  请参考《scanf()函数的用法》 希望能够帮到你

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


Question: c语言练习，将十进制转为八进制输出，遇到了难题。。。

大括号没加，而且转换成八进制你要把数组里面的数据逆序。

不熟悉就把大括号都加上去

引用 1 楼 user-3的回复:不熟悉就把大括号都加上去 嗯嗯，明白了，谢谢提醒

引用 2 楼 ⁽⁽◝( ˙ ꒳ ˙ )◜⁾⁾so wh的回复:大括号没加，而且转换成八进制你要把数组里面的数据逆序。 谢谢提醒qaq

引用 3 楼 自信男孩的回复:#include<stdio.h> #include<stdlib.h>  int main(void) {     int YU[20]={0};     int i;     int n;     int x;     printf("enter a number:");     scanf("%d",&n);     for(i=0; n>0; n=n/8)         YU[i++] = n%8;     //i++;     printf("In octal,your number is:\n");     for(x = i-1; x >= 0; x--)         printf("%d",YU[x]);     putchar(10);     system("pause");     return 0; }  参考一下吧，注意得到8进制，输出时需要倒序输出。 蟹蟹大佬！


Question: 新生想请问一下“”ST a”是啥意思?

ST 就是那个结构体的别名。  ST a，就是定义了一个结构体变量。 一般这样定义： typedef struct _ST {   char s[10];     int t; } ST; ST 就是  _ST 的别名。


Question: C语言对文件处理的一些疑问

查找结果存数组里面 fopen 数组元素


Question: C语言疑问

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

木有看到图，贴代码吧


Question: 刚入门，求帮助

数组大小必须已知

不知道的话，需要动态分配数组大小

N是多少，必须知道值


Question: 求素数

Finding prime numbers - Kenneth Haugland  Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

#include <iostream> using namespace std; int main(){int i=3; 	for(int i=3;i<=100;i++){ 		int sum=0; 		for(int j=2;j<=i;j++){ 			if(i%j==0){ 				sum++; 			} 		} 	   if(sum==1){ 	   	cout<<i<<endl; 	   } 	} 	return 0; }


Question: if语句 c语言 求帮

取值范围放在if条件语句，运算放语句块内就行了啊……这个有什么考虑的嘛


Question: 定义结构体数组时中括号里面的数字最大可以填多少？堆栈溢出的问题

不同操作系统不一样，一般超过1M的内存建议动态申请

如果是局部变量数组，那么是在栈上申请的，栈上的空间是很少的，如果需要申请那么多，建议改成全局变量或在堆上申请你需要的空间，堆上申请和释放的接口函数：malloc/free

默认1M 可以修改  建议大数据在堆上申请

栈内存很小。如果你申请的对象很占内存，那么就new吧

请把代码“扔”出来


Question: 大神求教

图片不知道为什么没发出去

简单点的什么？帖子发了一半没下文了？


Question: TCC源代码怎么不能下载呢？

原来是CSDNZ的APP有问题，在浏览器里可以正常下载，搞了好久。

引用 4 楼 weixin_44788335 的回复:[quote=引用 3 楼 儿童节的回复:][quote=引用 2 楼 weixin_44788335 的回复:] [quote=引用 1 楼 儿童节的回复:] 是这个吗？==> https://bellard.org/tcc/  下载页面 ==> http://download.savannah.gnu.org/releases/tinycc/  随便点了一个，可以下载的啊。 你试试。     我想用手机下载，没有反应，莫非用电脑就行？[/quote]  试一下就知道了啊！   手机浏览器也可以改成 电脑模式 浏览网页啊， 都试试就知道了。 [/quote] 在论坛APP里不能下载，在浏览器里才能下载[/quote]  这本身就是开源的，没必要从论坛里下载啊。从人家官网下载才最直接、最可信的呀！

引用 3 楼 儿童节的回复:[quote=引用 2 楼 weixin_44788335 的回复:] [quote=引用 1 楼 儿童节的回复:] 是这个吗？==> https://bellard.org/tcc/  下载页面 ==> http://download.savannah.gnu.org/releases/tinycc/  随便点了一个，可以下载的啊。 你试试。     我想用手机下载，没有反应，莫非用电脑就行？[/quote]  试一下就知道了啊！   手机浏览器也可以改成 电脑模式 浏览网页啊， 都试试就知道了。 [/quote] 在论坛APP里不能下载，在浏览器里才能下载

引用 2 楼 weixin_44788335 的回复:[quote=引用 1 楼 儿童节的回复:] 是这个吗？==> https://bellard.org/tcc/  下载页面 ==> http://download.savannah.gnu.org/releases/tinycc/  随便点了一个，可以下载的啊。 你试试。     我想用手机下载，没有反应，莫非用电脑就行？[/quote]  试一下就知道了啊！   手机浏览器也可以改成 电脑模式 浏览网页啊， 都试试就知道了。

引用 1 楼 儿童节的回复:是这个吗？==> https://bellard.org/tcc/  下载页面 ==> http://download.savannah.gnu.org/releases/tinycc/  随便点了一个，可以下载的啊。 你试试。     我想用手机下载，没有反应，莫非用电脑就行？


Question: 求助:C语言中有字符到无字符的自动转换

因为char类型转int是自动隐式提升的，char不会一下提升到unsigned int.  但是unsigned char也是提升到int类型，需要注意的是unsigned char的范围是0~255,但是char是-128~127，很明显197已经超过了127，所以是-59

谁告诉你系统会默认做 有符号––>无符号转换的？ %d能够格式化输出负数，不会做转换。 %u只能输出正数，才会做转换。


Question: 二级c语言求教

建议了解一下递归的原理，递归是不断的申请自身函数栈，直到条件不满足停止调用自身，最后2/10==0，停止递归。再根据栈的特性：先进后出。所以根据fun(256), n%10 == 6, -->fun(25), n %10 == 5, -->func(2) n %10 == 2， 然后输出就是2, 5, 6（倒序输出，后进先出）

引用 3 楼 qq_44751630 的回复：[quote=引用 2 楼 qq_44751630的回复:][quote=引用 1 楼 sswang1314的回复:]递归实质就是先进先出的栈结构，所以256先求余得6，6先进所以最后出，最高位2最后进所以最先出，所以最后是256 谢谢，明白喽[/quote] 栈是后进先出[/quote]是的

你可以在	putchar(n%10+'0');下面加上一串代码：printf(" %d\n",n);用于看它参数的变化，得到结果： 从图中可以看出最后的到的结果是256

引用 2 楼 qq_44751630的回复:[quote=引用 1 楼 sswang1314的回复:]递归实质就是先进先出的栈结构，所以256先求余得6，6先进所以最后出，最高位2最后进所以最先出，所以最后是256 谢谢，明白喽[/quote] 栈是后进先出😄😄😄

引用 1 楼 sswang1314的回复:递归实质就是先进先出的栈结构，所以256先求余得6，6先进所以最后出，最高位2最后进所以最先出，所以最后是256 谢谢，明白喽😊😊😊😊😊😊😊


Question: 小白求助

引用 1 楼 user-2 的回复:中文好像没有相对应的ascii码，英文的可以 #include<stdio.h> void main() { 	char a[30]; 	int t,sum=0,i; 	scanf("%s",a); 	for(i=0;a[i]!='\0';i++) 	{ 		t=a[i]; 		printf("第%d个ascii码值为%5d",i+1,t); 		sum=sum+t;  	} 	printf("\n"); 	printf("总和为%d",sum);  #include<stdio.h> void main() { 	char a[30]; 	int t,sum=0,i; 	scanf("%s",a); 	for(i=0;a[i]!='\0';i++) 	{ 		t=a[i]; 		printf("第%d个ascii码值为%5d",i+1,t); 		sum=sum+t;  	} 	printf("\n"); 	printf("总和为%d",sum);  } 中文也是有的，只不过不是一个字节表示


Question: 急！！一个逻辑问题求教

无非是触发事件不对呗 一般按钮事件有三种，按下、弹出、点击。 从你的需求看你应该注册点击事件

有没有大神啊

有没有大神知道啊


Question: 三角形类型出

楼主的问题不在问题本身，在学习的方法不清楚。  你这个小代码，编译通过以后，你现在进入的调试过程。不是输入什么输出什么的问题。调试的方法可以用两种，首先是在线调试系统，你可以加断点，查看变量实际是怎么变化的，调试系统熟练掌握是个快速和捷径。  如果有的系统，尤其是嵌入系统没有在线调试怎么办？增加调试代码，调试代码放到宏定义语句里面，正式输出代码的时候，通过宏定义屏蔽调试代码。  你这里最简单的增加printf，在scanf后面。 能明白吗？

输入有问题，按照你的程序，输入的间隔应该是英文逗号，而你的输入没有逗号。可以通过printf输出你输入的内容，以判断scanf是否输入正确。  另外，注意浮点数比较相等的方式，建议从网上看一下

#include <stdio.h>                                         //引用头文件 #include <math.h>											//数学公式函数 main() { 	float a,b,c;											//定义三角形的三条边 	float s,area;											//定义三角形的周长和面积 	printf("请输入您想判断的三角形的三条边:");         	scanf("%f%f%f",&a,&b,&c);                              //输入三条边 												//第一步： 	if(a+b>c && a+c>b && b+c>a)								//判定三角形是否成立的条件 	{											//第二步：			 		s=(a+b+c)/2;										//计算三角形一半的周长 		area=sqrt(s*(s-a)*(s-b)*(s-c));						//计算三角形的面积公式：秦九昭公式（不知道得可以百度一波） 		printf("此三角形的面积为:%f\n",area); 												//第三步： 		if(a==b && a==c)									//先判断三角形是否为等边三角形 		{ 			printf("此三角形是等边三角形\n"); 		} 		else 			if(a==b ||a==c || b==c)                           //再判断三角形是否为等腰三角形 			{ 				printf("此三角形是等腰三角形\n"); 			} 			else 				if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)    //判断三角形是否为直角三角形 				{ 					printf("此三角形是直角三角形\n"); 				} 				else 				{ 					printf("此三角形为普通三角形\n");               //如果都不是则为普通三角形 				} 	} 	else 	{ 		printf("此三边构不成三角形!!!\n");                  //三边不能构成三角形 	} }   这种方法比较清晰，然后你的代码是输入scanf代码出了问题，改一下就好了。

嗯， 看错了，下面的代码不是你贴的。 。。  总而言之，就是 「使用scanf()的时候，输入内容 一定 要 和 输入控制符 对比，确保一致。」。

你截图的代码里，scanf()双引号下面的 输入控制符 和 下面贴图来的代码里 的 输入控制符， 不一样哦！截图里的多了两个逗号。  用你贴出来的代码，和你截图里的 输入，就没问题了。  使用scanf()的时候，输入内容 一定 要 和 输入控制符 对比，确保一致。坛子里好多这种同样原因的问题的提问了。

#include<stdio.h> #include<math.h> int main() { float a,b,c; printf("请输入三条边的长度：\n"); scanf("%f%f%f",&a,&b,&c); if(a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a) { if(a==b && b==c) { printf("等边三角形"); } else if(a==b || a==c || b==c) { printf("等腰三角形"); } else if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a) { printf("直角三角形"); } else { printf("普通三角形"); } } else { printf("非三角形"); } return 0; }


Question: 设计一个大数运算，不能使用数组

string是不是数组？

其实挺无聊的，不用数组就用链表呗，数组只是一种简便的存储方式罢了。

引用 1 楼 user-3的回复:不用内置数组类型就用过malloc或者new呗 全部不用? 你该不会是还没学到数组吧? 没学数组就好好学 别好高骛远的 所以大佬您会吗


Question: 怎么实现在链表头部插入元素和删除元素的两个函数。

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633


Question: 复试机试  在vs能编译的  在oj就是不能通过   请大佬帮忙看看

题目写的很清楚，输出是YES和NO，你非要输出小写

引用 5 楼 niiiloc 的回复:题目写的很清楚，输出是YES和NO，你非要输出小写 对不起  老哥我错了

引用 3 楼 自信男孩 的回复:if (s[i] >= 65 || s[i] <= 90) 这个||应该改成&&.因此，注意这两个运算符的作用  另外，数组下表是从0开始的，看你的for循环是从1开始的 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { 	int m,i,j, len,sum; 	char s[100]; 	scanf("%d", &m); 	for (j = 0; j< m; j++) 	{ 		sum=0; 		scanf("%s",s); 		len = strlen(s); 		if (len < 8 || len>16) 		{ 			printf("no\n"); 			continue; 		} 		for (i = 0; i <len; i++) 		{ 			if (s[i] >64 && s[i] < 91) 			{ 				sum++; 				break; 			} 		} 		for (i= 0; i < len; i++) 		{ 			if (s[i] >96 && s[i] < 123) 			{ 				sum++; 				break; 			} 		} 		for (i= 0; i < len; i++) 		{ 			if (s[i] == 33 || s[i] == 35 || s[i] == 36 || s[i] == 37 || s[i] == 94 || s[i] == 64 || s[i] == 126) 			{ 				sum++; 				break; 			} 		} 		for (i = 0; i < len; i++) 		{ 			if (s[i] > 47 && s[i] < 58) 			{ 				sum++; 				break; 			} 		} 		if (sum > 2) 			printf("yes\n"); 		else 			printf("no\n"); 	} 	system("pause"); 	return 0;  }  老哥  能帮我在看看么我改了还是错的鸭

scanf("%s", &s); 这句去掉&，因为数组名本身就是地址，数组名是数组的首地址。

自己顶！！！！


Question: vscode提示launch program"don't exist

推荐一篇文章供参考，《Elementary OS 0.4.1 Loki配置vscode调试C程序》： https://www.jianshu.com/p/b46fe3663598  vscode是跨平台的，在windows里和linux里，它本身的配置应该是一样的，至少不会差太多。


Question: 宏定义里面的变量未知怎么办？在线求助！

题目就是   图里的宏定义原来是N 10，现在用表达式(int)(sizeof(a)/sizeof(a[0]))或者具有相同值的宏来计算数组的长度。是这么一个修改的问题……

引用 2 楼 weixin_44775375的回复:[quote=引用 1 楼 user-1的回复:]a有几个元素由N来决定，而N又由你的宏定义的a来决定 那这个应该怎么改呀，如果数组长度本来就是未知咋办呢？[/quote] 你发下问题～～～～～～～～

引用 1 楼 user-1的回复:a有几个元素由N来决定，而N又由你的宏定义的a来决定 那这个应该怎么改呀，如果数组长度本来就是未知咋办呢？

a有几个元素由N来决定，而N又由你的宏定义的a来决定


Question: 关于链表的几个问题。

p->next==NULL，应该就是这个


Question: VS code 如何配置C语言

我也是自学C的小白，本身做的行业也和这个无关，楼主加油，共勉~

看了一下你的截图，有一个很重要的运行C程序的插件 coderunner 好像没有安装。  我只在Linux下使用VScode，它本身是跨平台的，为C语言配置调试过程应该是一样的吧，下面这篇文章你可以参考一下。  《Elementary OS 0.4.1 Loki配置vscode调试C程序》  ==>   https://www.jianshu.com/p/b46fe3663598   <==  我的与C程序相关的VScode插件如下：   还有个 indent-rainbow ，是用彩色条来显示不同代码块的，也很值得安装。 希望能帮到你。


Question: 大一c语言女生Dec c求助

引用 1 楼 user-2的回复:之前运行的窗口没有关闭 哈哈哈谢谢 我最近才点开消息！很庆幸已经度过了刚学的阶段！

楼上正解，你上次运行的窗口没有关闭。

之前运行的窗口没有关闭


Question: 读取文件时第一个数据总是读取不出来怎么办？

引用 1 楼 自信男孩 的回复:读操作的循环里，把fclose调用放到循环外。  如果这样操作还不行，建议查一下循环次数n的值或者文件里是否有数据。 我的这个程序是储存不了信息的吗？

第二个参数，打错了

fopen的第三个参数改成 "r"试试


Question: 小白入门遇错误，求指教。

建议把代码图片贴清楚了，看不清你贴的图片。建议直接贴出有问题的代码部分。


Question: c语言内存方面的问题，求助

以后不要用read这种系统关键字来定义变量了。

引用 3 楼 hanxb的回复:char* read;     read=(char*)malloc(sizeof(char)*100);   内存泄漏，完全没必要，直接  char read[100];      另外，不用hash，数据多了，效率太低下。 嗯嗯谢谢了，好像是比较低级的问题

void add_key(read,num,place);   ？？  第一次看到调用函数，还带返回值定义的。 真不知道 编译器是怎么处理的。

求助啊，卡住了从来没碰到过这种问题


Question: 刚学c语音，求救

b=a后面缺少“;”

引用 1 楼 weixin_44778151的回复:第七行没有分号 表情发错了，尴尬

引用 1 楼 weixin_44778151的回复:第七行没有分号 对哦，谢谢

引用 3 楼 qq_42307333的回复:b=a是不能这么写的，数组不能这么赋值 为什么？是因为是中文吗？

b=a是不能这么写的，数组不能这么赋值

char b[]没有分号；第二个是栈上的空间没有那么大。

第七行没有分号


Question: c语言小白求助

还那个有你那个not exist无论怎样都会打印出来的。。可以定义一个变量X初值为1，在输出那个整除数的同时加上X=0;再if（X=1）printf(“not exist”); 注：我这个不是英文输入，不要复制

第一个return 0改为break。


Question: if语句选择三个数中的中位数

引用 1 楼 niiiloc的回复:没这种语法b>=a>=c 只有b>=a && a>=c 嗯，知道了。谢谢(*°∀°)=3

没这种语法b>=a>=c 只有b>=a && a>=c


Question: c语言能做什么游戏呢？在线等，望大佬指教

引用 2 楼 孟一 的回复：坦克大战，2048之类对界面要求不高的都可以嗯嗯

引用 1 楼 niiiloc 的回复：CSDN找一些棋类的游戏吧，应该有很多的，五子棋黑白棋这种有点简单

坦克大战，2048之类对界面要求不高的都可以

CSDN找一些棋类的游戏吧，应该有很多的，五子棋黑白棋这种


Question: 数据结构

个人理解：编程就是将数据输入，存储，输出的表现形式，而数据结构就是为了提高存储，输出数据的一些高效方法吧。

数据结构就是数据的容器，特定的数据有特定存储结构，合适的存储结构可以方便我们存取数据，以及描述一些客观事实。  举个简单的例子： 厕所里会用到卷纸，在卷纸生产的时候，当然是从最里面开始卷，但是我们取纸的时候是从最外面开始撕。 我们把纸筒看成是容器，把纸看成是数据，那么卷纸就是一个典型的“后进先出”的例子，越是后存进容器的数据，越是先被取出来。 在数据结构中把这种“后进先出”的容器称之为“栈”。  再举个例子： 食堂里学生们排队到窗口打饭，食堂阿姨只会按照排队顺序依次打饭，断没有让后来的人先打饭的道理。 我们把排队的人群当做是容器，学生是数据，那么这就是典型的“先进先出”的例子，越是先存的数据，越先取出来。 在数据结构中把这种“先进先出”的容器称之为“队列”  第三个例子： 很多时候我们要对数据进行分门别类，比如某某学院、某某科系、某某专业、某某年级、某某班级、某某小组、某某人 当我们用一个图把这些类别展开展示的时候，看上去就像是一棵在向不同的枝杈延展。 在数据结构中把这种结构的容器称之为“树”  ... ...


Question: 在线等！急

这个问题是很经典和普通的问题，网上有很多这样的代码。建议搜一下，方法不止一种，另外，可以把别人的代码修改一下，然后改成你想要的返回值。

素数就是有1和本身两个因数的数，所以判断一个数n是否是素数，就可从2到n-1依次除n如果能整除则不是素数，否则就是素数。 参考代码如下： #include<stdio.h> int isPrime(int n)  //定义一个函数用来判断素数  {     int i=2;     while(i<n)     {         if(n%i==0)             break; //若该数能被2~n-1直接的数整除 则跳出该判段不执行下一步i++ 直接进行下一个if判断          i++;  // 若不能被整除 则说明当前数字是素数 进行加一后执行下面if判断      }     if(i==n)         return 1; // 若该数是素数 则返回值记为1      else         return 0; // 0表示该数不是素数  }  int main() {     int n;     scanf("%d",&n);     if(isPrime(n)==1) 	 printf("%d是素数\n",n); //调用上述函数的返回值  判断输出该数是素数还是合数      else {  	 printf("%d不是素数\n",n);  ////调用上述函数的返回值  判断输出该数是素数还是合数      for (int i = n; i >= 2; i --) {  //如果是合数 则从当前数依次递减的去再进行一次素数的判断         if (isPrime(i) == 1) {  //不用重复写判断步骤 因为判断过程已经定义在上述的函数中了 所以我们只需要调用 isPrime(int n)函数的返回进行判断               printf("the max prime is: %d\n", i);             break;  //如果找到该合数下的最大素数 则跳出循环          }       }     }      return 0; } 调试运行结果如下图    觉得可以的话 麻烦给我点个赞谢谢 要是还是不懂可以下面评论问哦！


Question: 问大家个语法问题

引用 3 楼 lin5161678 的回复:[quote=引用 2 楼 drakelovejoker 的回复:] [quote=引用 1 楼 user-2 的回复:] pCcplint是typedef定义的函数指针类型。 于是CcpInit就相当于函数指针了 那请问((*(unsigned long *)(0x01005024)))这个放在函数指针旁边是什么意思呢？ typedef 函数指针用法不是 pCcpInit S1;    //定义一个函数指针S1 S1 = XXX;  //赋值S1吗 从结果上看CcpInit是个pCcpInit类型的函数指针，形参输入(0)[/quote] 强制类型转换  (类型)表达式 看不懂就拆分吧 typedef void (*pCcpInit)( unsigned char mode ); #define	CcpInit ((pCcpInit)((*(unsigned long *)(0x01005024)))) #define SYS_CLK ((0)) CcpInit(SYS_CLK); CcpInit(SYS_CLK) 展开 ((pCcpInit)((*(unsigned long *)(0x01005024))))((0)) unsigned long* plong = (unsigned long *)0x01005024; unsigned long nlong = *plong; pCcpInit pFun = (pCcpInit)nlong; pFun(0);    [/quote] 懂了，谢谢老哥

引用 2 楼 drakelovejoker 的回复:[quote=引用 1 楼 user-2 的回复:] pCcplint是typedef定义的函数指针类型。 于是CcpInit就相当于函数指针了 那请问((*(unsigned long *)(0x01005024)))这个放在函数指针旁边是什么意思呢？ typedef 函数指针用法不是 pCcpInit S1;    //定义一个函数指针S1 S1 = XXX;  //赋值S1吗 从结果上看CcpInit是个pCcpInit类型的函数指针，形参输入(0)[/quote] 强制类型转换  (类型)表达式 看不懂就拆分吧 typedef void (*pCcpInit)( unsigned char mode ); #define	CcpInit ((pCcpInit)((*(unsigned long *)(0x01005024)))) #define SYS_CLK ((0)) CcpInit(SYS_CLK); CcpInit(SYS_CLK) 展开 ((pCcpInit)((*(unsigned long *)(0x01005024))))((0)) unsigned long* plong = (unsigned long *)0x01005024; unsigned long nlong = *plong; pCcpInit pFun = (pCcpInit)nlong; pFun(0);

引用 1 楼 user-2 的回复:pCcplint是typedef定义的函数指针类型。 于是CcpInit就相当于函数指针了 那请问((*(unsigned long *)(0x01005024)))这个放在函数指针旁边是什么意思呢？ typedef 函数指针用法不是 pCcpInit S1;    //定义一个函数指针S1 S1 = XXX;  //赋值S1吗 从结果上看CcpInit是个pCcpInit类型的函数指针，形参输入(0)


Question: 计算机大一新生求助

问题解决！是求根公式表达处出了问题，没有用括号括起来

引用 6 楼 Q__ing 的回复：[quote=引用 4 楼 Q__ing 的回复:] 个人复制了你的代码进行多次修改，但结果不变，于是自己写了主要代码，代码如下，请参考： #include<stdio.h> #include<math.h> int main() { 	double a,b,c,x1,x2; 	double d; 	printf("请输入系数a,b,c的值："); 	scanf("%lf%lf%lf",&a,&b,&c); 	printf("%.0fx^2+%.0fx+%.0f=0\n",a,b,c); 	d=b*b-4*a*c; 	printf("d=%lf\n",d); 	if(d>=0) 	{ 	x1=(-b+sqrt(d))/(2*a); 	x2=(-b-sqrt(d))/(2*a); 	printf("该函数的实根分别为：\nx1=%lf\n x2=%lf\n",x1,x2);     }     else     {     	printf("根据所给系数该函数无实根\n");     	printf("\n请按照所给格式重新输入数值进行计算\n\n"); 	}  	return 0;  }   调试过程中可以把d输出， 或者中间加断点查看哪里出错，这个程序的主要问题在于sqrt函数，该函数的参数不可取负数，所以建议将sqrt函数移到后面，直接用（b^2-4ac）来判断函数是否有根，在计算两个根的时候再使用sqrt函数进行求根。 用你的数值运行结果如下：  是这样，上面的配图有误好的，非常感谢！

可以用fabsf或者fabs保证开根号的是一个正数

引用 1 楼 user-3 的回复：d应该先判断正负，再开根号吧已修改，但计算结果还是错的

引用 1 楼 user-3 的回复：d应该先判断正负，再开根号吧多谢提醒！

d应该先判断正负，再开根号吧


Question: C语言 关于EOF和getchar();

我现在理解，当我按下回车键的时候，电脑开始读取缓冲区中数据，如果缓冲区中EOF前面和后面都有数据，例如ABCDEFG^ZQWERTY那么^Z将不会被认为是结束EOF符号，其ASCII数值是26，SUB，另外后面的数据将全部丢失（这点和EOF一样），即ZQWERTY和回车\n都将丢失。下面看看这两段代码：  ---------------------------------------------------------------------------------------------------------------------------------------------- 1 #include <stdio.h>  int main(void) {     int c;     while ((c = getchar()) != EOF)     {         putchar(c);     } }   输入abc,然后回车  光标在第三行，说明putchar()依此返回了a,b,c,\n.  输入abc^Z,然后回车  光标在第二行的末尾，说明putchar()依返回了a,b,c,并没有返回最后的\n，也没有打破循环。后来进一步发现，这一行其实有4个字符  分别为abc和最后一个看不到的字符，其ASCII值是26.  输入^Z,然后回车  发现循环结束，对比第二个实验，说明只有在缓冲区没有数据时候输入EOF再回车，EOF能被识别为END OF FILE，结束循环。  ------------------------------------------------------------------------------------------------------------------------------------------- 验证我上面的推断： 代码：如果字符是EOF或者是'n'("回车键")时候循环结束，输出之前输入的字符； #include <string.h>  int main() {      int i;     int c;     int lim;     lim = 100;     char s[lim];          for (i = 0; i < lim - 1 && ((c = getchar()) != EOF) && c != '\n'; ++i)     {         s[i] = c;              }      s[i] = '\0';     printf("----------------------------------------\n");     printf("%s\n", s);      for (i = 0; s[i] != '\0'; i++)         printf("%d: %c, %d\n", i, s[i], s[i]);   }  验证1： 输入abcd,然后回车：   验证2： 输入^Z然后回车：  此时^Z被识别为EOF，结束循环，由于没有有效字符输入，所以不会有任何输出。  验证3： 输入abc^Z然后回车： 程序并没有结束，而是出现下面的情况：    这证明了之前的推测，在依此输入abc^Z,和回车键("\n")的时候，由于在缓冲区中^Z之前有abc，之后有\n，所以 此时^Z不被认为是EOF符号，而是ASCII为26的符号（SUB），其后面的\n也会丢失，循环由于没有被打破，所以仍然可以输入 新的字符，下面我们继续输入defg，再按回车。   缓冲区最后的回车('\n')打破了循环， 控制台打印了abcdefg，看似是7个字符，实际上是8个字符，c和d之间有个隐藏字符,也就是ASCII值为26的字符。  -------------------------------------------------------------------------------------------------------------------------------- 综上： ^Z在缓冲区中前面没有任何字符时候，会被程序看成是EOF（真正意义上），如果有，那么^Z将被看成是'\032'字符即ASCII为26的字符，getchar()将会从这个字符开始新一轮的读取(因为循环被打破的条件并没有被打破)。但是无论如何,^Z后面的字符都将会丢失包括回车键'\n'.   ------------------------------------------------------------------------------------------------------------------------------------------ 附录： 下面这个可以帮助理解：  #include <stdio.h> #include <string.h>  int main() {      int i;     int c;     int lim;     lim = 100;     char s[lim];          for (i = 0; i < lim - 1 && ((c = getchar()) != EOF) && c != '\n'; ++i)     {         s[i] = c;         printf("load!\n");     }      s[i] = '\0';     printf("----------------------------------------\n");     printf("%s\n", s);      for (i = 0; s[i] != '\0'; i++)         printf("%d: %c, %d\n", i, s[i], s[i]);   }

加个hexdump函数，并调用，输出s的十六进制，你会有发现的void hexdump(char *s) { 	for (; *s; s++){ 		printf("%02X ", *s & 0xff); 	} }


Question: 新的开始

加油，以后你会感谢现在拼命的自己的。

如果以工作为目标学习，先好好找下面试要求再来定学习方向吧


Question: 【求助】一种基于余弦函数的相位干涉仪DOA估计算法的仿真

不过，我能搞

这个还挺麻烦的


Question: 软件工程研究生复试上机题，求大牛解答

题量这么大!!!


Question: c

你这更直接，手机拍个照片就想拿到答案。。。我真是服了，这种人是被谁给惯成这样的？

这里不帮人写作业


Question: C语言UDP通信过程中，recv函数接受不到数据

引用 4 楼 sdghchj 的回复:[quote=引用 3 楼 火花20180731 的回复:] [quote=引用 2 楼 sdghchj 的回复:] 有点扯蛋吧，建了一个socket，绑定了一个本地ip端口，就能收到正确的数据？？？都还没有用connect，也不是用recvfrom，收到了从哪来的数据？通信怎么说得得有个源地址端口和目标地址端口四元组吧。 都说UDP了还connect......[/quote] udp是非连接的，但是C调用过程是可以connect绑定目标ip端口的，没有握手过程，connect后可以调用不用再传参目标ip端口的send和recv函数，否则就得调用sendto和recvfrom.[/quote] sendsock_creat() 函数里执行了connect函数。另外源地址目标ip和端口都用宏定义了，我没把具体地址放上来

引用 3 楼 火花20180731 的回复:[quote=引用 2 楼 sdghchj 的回复:] 有点扯蛋吧，建了一个socket，绑定了一个本地ip端口，就能收到正确的数据？？？都还没有用connect，也不是用recvfrom，收到了从哪来的数据？通信怎么说得得有个源地址端口和目标地址端口四元组吧。 都说UDP了还connect......[/quote] udp是非连接的，但是C调用过程是可以connect绑定目标ip端口的，没有握手过程，connect后可以调用不用再传参目标ip端口的send和recv函数，否则就得调用sendto和recvfrom.

引用 2 楼 sdghchj 的回复:有点扯蛋吧，建了一个socket，绑定了一个本地ip端口，就能收到正确的数据？？？都还没有用connect，也不是用recvfrom，收到了从哪来的数据？通信怎么说得得有个源地址端口和目标地址端口四元组吧。 都说UDP了还connect......

经过了无脑测试，我发现只要我把第65行的那个语句，从创建发送端地址的函数中拿走，放到别的任意的地方，都是一直阻塞在recv函数中，但是只要放在第65行，那么这个recv就能接收到正确的数据


Question: 萌新学c语言求帮忙！！！

是用lf吗？

引用 4 楼 qq_27468839 的回复：scanf里％f之间有逗号的话，输入的时候也要输入逗号谢谢🙏

输入格式不对

scanf里％f之间有逗号的话，输入的时候也要输入逗号

引用 2 楼 weixin_44777368 的回复：能运行出来才怪呢分开的

能运行出来才怪呢

你这是一起运行的？


Question: 心态崩了！用VS2017的C语言编写时scanf的第二个数值老是不对？？？er'qie'you'shi'hou'dui'you'shi'hou'bu'dui

引用 6 楼 儿童节的回复:[quote=引用 5 楼 qq_25638919 的回复:] [quote=引用 4 楼 qq_25638919的回复:][quote=引用 3 楼 儿童节的回复:][quote=引用 2 楼 qq_25638919 的回复:] %f，%f呢，我输入的时候写1,3这样可以吗？  Don't be afraid. Have a try.[/quote] Oh, that's wrong still which accossion I have tried hounderds of millions times....[/quote] accossion=condition[/quote]    [/quote] 哈哈哈哈哈，谢谢谢谢谢谢谢谢谢谢谢谢！！！！

%f，%f呢，我输入的时候写1,3这样可以吗？

引用 5 楼 qq_25638919 的回复:[quote=引用 4 楼 qq_25638919的回复:][quote=引用 3 楼 儿童节的回复:][quote=引用 2 楼 qq_25638919 的回复:] %f，%f呢，我输入的时候写1,3这样可以吗？  Don't be afraid. Have a try.[/quote] Oh, that's wrong still which accossion I have tried hounderds of millions times....[/quote] accossion=condition[/quote]

引用 4 楼 qq_25638919的回复:[quote=引用 3 楼 儿童节的回复:][quote=引用 2 楼 qq_25638919 的回复:] %f，%f呢，我输入的时候写1,3这样可以吗？  Don't be afraid. Have a try.[/quote] Oh, that's wrong still which accossion I have tried hounderds of millions times....[/quote] accossion=condition

引用 3 楼 儿童节的回复:[quote=引用 2 楼 qq_25638919 的回复:] %f，%f呢，我输入的时候写1,3这样可以吗？  Don't be afraid. Have a try.[/quote] Oh, that's wrong still which accossion I have tried hounderds of millions times....

引用 2 楼 qq_25638919 的回复:%f，%f呢，我输入的时候写1,3这样可以吗？  Don't be afraid. Have a try.

scanf("%f%f",&r,&h ); 这里的双引号下面是  %f%f  ，那就要严格按照这个格式来输入，当然了，两个数肯定要隔开才行，但是只能用 （空格） 或者 （回车）。


Question: Temperature in f: （执行程序出错，求大佬指点迷津）

确定没漏一行scanf？从你的代码看没有参数输入啊


Question: 思维迟钝的阿怪前来请教

中文和英文没有区别，字符串比较请用strcmp

引用 5 楼 自信男孩 的回复:if (xia->name=="结束") { goto shuchu; }   这个地方要用strcmp或者memcmp  十分感谢，敢问可以给下微信或者QQ等联系方式吗，我想能多跟你们这样的前辈取取经

引用 4 楼 自信男孩 的回复:/*************************************************************************   > File Name: a.cpp   > Author: ma6174   > Mail: ma6174@163.com    > Created Time: 2017年08月21日 星期一 22时27分21秒  ************************************************************************/  #include <stdio.h> #include <stdlib.h> #include <string.h>  #define SHULIANG 5  struct data{ 	int chengji;   //储存成绩 	char name[20];   //储存姓名 	struct data *next;   //指向改结构的下一个元素的指针 };  struct data *tou;   //头指针：用于回到最初位子 struct data *xin;   //新指针：用于建立新的节点   int main(void) { 	tou=NULL; 	xin=NULL;  	for (int a=1;a<=SHULIANG;a++) 	{    		xin=(struct data *)malloc(sizeof(struct data));     //创建一个新节点 		xin->next = tou;  //新节点的指针指向NULL，说明只增加了一个节点 		tou = xin; 		printf("\n请输入你的名字："); 		scanf("%s", xin->name); 		/* 		if (xin->name ==NULL)   //invalid codes 		{ 			exit(1); 		} 		*/ 		while(1) 		{ 			printf("\n请输入你的成绩(0-100)："); 			//scanf("%d", xin->chengji); 			scanf("%d", &xin->chengji); 			if (xin->chengji <=100 && xin->chengji >= 0) 			{ 				break; 			} 		} 	}  	xin = tou; 	while(xin!=NULL) 	{ 		printf("%d的成绩为：%s\n",xin->chengji, xin->name); 		xin = xin->next;    //move the pointer 	}   	return 0;  }    供参考  昨天自己弄了好久 现在已经能实现目的了，感谢大佬赐教，这个点数要怎么给你

引用 3 楼 niiiloc 的回复:中文和英文没有区别，字符串比较请用strcmp明白了  谢谢大佬赐教，昨天一直在纠结该怎么比较字符串类型的，如果是普通一堆普通字符还可以用数组逐个比较，中文的话只能用strcmp来判断是否==0了。

引用 1 楼 niiiloc 的回复:简单看了下，问题很多 1. scanf("%d", &xin->chengji); 2.  while(xin!=NULL) {    printf("%s的成绩为：%d",xin->name,xin->chengji);  xin = xin->next; }  引用 1 楼 niiiloc 的回复:简单看了下，问题很多 1. scanf("%d", &xin->chengji); 2.  while(xin!=NULL) {    printf("%s的成绩为：%d",xin->name,xin->chengji);  xin = xin->next; }    谢谢大佬回复，我昨天自己搞了一下已经能实现一开始的设定了，现在我想增加一个功能就是在用户输入名字的时候，输入了“结束”，如果第一次输入的时候就输入了“结束”，则结束程序，其他时候输入“结束”则跳到输出语句，输出已经输入的数据，  这个验证功能一直实现不了，我能实现字符的验证，但是中文的我还不会。麻烦大佬指点指点 #include <stdio.h> #include <stdlib.h> #include <string.h>  #define SHULIANG 5  struct data{ 	int yuwen;								  //储存成绩 	int shuxue; 	int yinyu; 	int dili; 	char name[20];							  //储存姓名 	struct data *next;						  //指向改结构的下一个元素的指针 };  struct data *tou;							  //头指针：用于回到最初位子 struct data *xin;							  //新指针：用于建立新的节点 struct data *xia;							  //下指针：用来指向下一个节点 int main(void) { 	tou=NULL; 	xin=NULL; 	xia=NULL;  	xin=(data*)malloc(sizeof(struct data));     //创建一个新节点 	printf("请输入你的姓名："); 	scanf("%s",&xin->name); 	if (xin->name[0]=='结' && xin->name[1]=='束' && xin->name[2]=='\0') 	{ 		exit(0); 	} 	printf("请输入你的成绩：\n语文："); 	scanf("%d",&xin->yuwen); 	printf("数学："); 	scanf("%d",&xin->shuxue); 	printf("英语："); 	scanf("%d",&xin->yinyu); 	printf("地理："); 	scanf("%d",&xin->dili); 	xin->next=NULL; 	tou=xin;  	for (int a=1;a<SHULIANG;a++) 	{   	 			xia=(data*)malloc(sizeof(struct data)); 			printf("请输入你的姓名："); 			scanf("%s",&xia->name); 			if (xia->name=="结束") 			{ 				goto shuchu; 			}  			printf("请输入你的成绩：\n语文："); 			scanf("%d",&xia->yuwen); 			printf("数学："); 			scanf("%d",&xia->shuxue); 			printf("英语："); 			scanf("%d",&xia->yinyu); 			printf("地理："); 			scanf("%d",&xia->dili); 			xia->next=NULL; 			xin->next=xia; 			xin=xin->next;  	} 	xin=tou;  shuchu: 	while(xin!=NULL) 	{ 	   printf("%s的成绩为：语文：%d，数学：%d，英语：%d，地理：%d\n",xin->name,xin->yuwen,xin->shuxue,xin->yinyu,xin->dili); 	   xin=xin->next; 	} 	return 0; }  这是我的代码


Question: C程序重定义入口函数（比如名字叫myfunc）后，程序中可以有main函数吗？

环境ti ccs3.3，给链接加了参数-e myfunc，结果发现程序入口点仍然是main函数，有大神给解惑吗？

自己顶，还是懵懂中。。。

gcc试了一下，链接报错。

引用 1 楼 老马何以识途的回复:你做成lib了，就不應該是提供main函數給對方調用了吧。他的程序有自己的main函數，那才是入口，你的main函數應該就沒用了，作用域只在你的lib中。 那么，他的程序就有两个main函数了？

c 是系统编程语言，所谓“系统”就是这个意思。


Question: 请大神提点！

#include <stdio.h> int main() { 	int h,m,t; 	printf("Enter a 24-hour time:");  	scanf("%d:%d",&h,&m); 	t=h*60+m; 	if(t-480<t-583){ 		printf("Closest departure time is 8:00 a.m,arriving at 10:16 a.m\n"); 	} 	else if(t-480>t-583) 	printf("Closest departure time is 9:43 a.m,arriving at 11:52 a.m\n"); 	else if(t-583<t-679){ 		printf("Closest departure time is 9:43 a.m,arriving at 11:52 a.m\n"); 	} 	else if(t-583>t-679) 	printf("Closest departure time is 11:19 a.m,arriving at 1:13 p.m\n"); 	else if(t-679<t-767) 	printf("Closest departure time is 11:19 a.m,arriving at 1:13 p.m\n"); 	else if(t-679>t-767) 	printf("Closest departure time is 12:47 p.m,arriving at 3:00 p.m\n"); 	else if(t-767<t-840) 	printf("Closest departure time is 12:47 p.m,arriving at 3:00 p.m\n"); 	else if(t-767>t-840) 	printf("Closest departure time is 2:00 p.m,arriving at 4:08 p.m\n"); 	else if(t-840<t-945) 	printf("Closest departure time is 2:00 p.m,arriving at 4:08 p.m\n"); 	else if(t-840>t-945) 	printf("Closest departure time is 3:45 p.m,arriving at 5:55 p.m\n"); 	else if(t-945<t-1140) 	printf("Closest departure time is 3:45 p.m,arriving at 5:55 p.m\n"); 	else if(t-945>t-1140) 	printf("Closest departure time is 7:00 p.m,arriving at 9:20 p.m\n"); 	else if(t-1140<t-1305) 	printf("Closest departure time is 7:00 p.m,arriving at 9:20 p.m\n"); 	else 	printf("Closest departure time is 9:45 p.m,arriving at 11:58 p.m\n"); 	return 0; }

引用 3 楼 w__dong_123的回复:负的排除啊，飞机起飞了还管它干嘛 不对，这个程序是想找查询你输入时间最近的航班，及时在你输入时间以前也是可以的，因为这只是查询。

负的排除啊，飞机起飞了还管它干嘛

引用 3 楼 w__dong_123的回复:负的排除啊，飞机起飞了还管它干嘛 对哦，谢谢你，我马上就试试

引用 1 楼 w__dong_123的回复:简单点的方法是将所有的时间转换成int型，然后用时间去相减 可是我不知道如何比较那些时间，还有负的怎么办

简单点的方法是将所有的时间转换成int型，然后用时间去相减


Question: 学c语言用vista stdio哪个版本好，我用2017的只有c++

引用 4 楼 潇潇-易水的回复:初学的话建议你使用visual stdio6.0  高版本的太智能了 ，不利于你理解很多东西，毕竟很多东西是需要你自己上手过才有深入的理解， 熟练了再用高版本的吧 好，谢谢

可以对照谭浩强的那本书来

6.0的合适

C语言用visual stdio6.0应该比较合适，短小精悍~


Question: 求教一下CE修改器 界面设计的教程


Question: 如何用c语言编一段程序，实现读取硬盘序列号？

linux怎么获取

引用 2 楼 菜是一种姿态 的回复：void CDiskTool::AdjustString(const char * str, int pos, char * buf) {     int i = 0, nStart, nEnd;      nStart = pos;     while ((str[nStart] == ' '))         nStart++;      nEnd = nStart;     while (str[nEnd])     {         buf[i++] = str[nEnd];         nEnd++;     }     buf[i] = '\0'; }  std::string CDiskTool::getDiskId(int nID /*= 0*/) {     char caDriveSerial[20] = {0};     int nlen = 20;     std::string strTmp; #ifdef _WIN32     HANDLE hPhysicalDrive = INVALID_HANDLE_VALUE;      int SerialLen = 0;     char DriveName[32];      // 要检索设备句柄，必须使用设备名称或与设备关联的驱动程序名称来调用CreateFile函数。     // DeviceIoControl可以接受特定设备的句柄。 对于硬盘来说，可能为以下几种形式：     // 对于物理驱动器x，形式为 \\.\PhysicalDriveX ，编号从0开始     sprintf(DriveName, TEXT("\\\\.\\PhysicalDrive%d"), nID);      hPhysicalDrive = CreateFile(DriveName, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);      if (hPhysicalDrive == INVALID_HANDLE_VALUE)     {         return "";     }      struct _STORAGE_PROPERTY_QUERY query;      DWORD cbBytesReturned = 0;      static char local_buffer[10000];      memset((void *)&query, 0, sizeof(query));     query.PropertyId = StorageDeviceProperty;     query.QueryType = PropertyStandardQuery;      memset(local_buffer, 0, sizeof(local_buffer));      if (DeviceIoControl(hPhysicalDrive, IOCTL_STORAGE_QUERY_PROPERTY,         &query, sizeof(query), &local_buffer[0], sizeof(local_buffer), &cbBytesReturned, NULL))     {         struct _STORAGE_DEVICE_DESCRIPTOR * descrip = (struct _STORAGE_DEVICE_DESCRIPTOR *)& local_buffer;          char serialNumber[1000];          AdjustString(local_buffer, descrip->SerialNumberOffset, serialNumber);          if (isalnum(serialNumber[0]))         {             ULONG ulSerialLenTemp = (ULONG)strnlen(serialNumber, nlen - 1);             memcpy(caDriveSerial, serialNumber, ulSerialLenTemp);             caDriveSerial[ulSerialLenTemp] = '\0';             SerialLen = ulSerialLenTemp;         }     }      if (hPhysicalDrive != INVALID_HANDLE_VALUE)     {         CloseHandle(hPhysicalDrive);     } #elif _LINUX     int fd = 0;     hd_driveid hid;     FILE *fp;     char line[10000], *disk, *root;     char *p = NULL;     char cTmp = 97 + nID;     char fileName[20] = {0};      if(nID > 25)         return "";      sprintf(fileName, TEXT("/etc/sd%c"), cTmp);     fp = fopen(fileName, "r");     if (fp == NULL){         fprintf(stderr, "NO %s.\n", fileName);         return "";      }     fd = -1;     while (fgets(line, sizeof(line), fp) != NULL){         disk = strtok(line, " ");         if (disk == NULL) continue;         root = strtok(NULL, " ");         if (root == NULL) continue;         if (strcmp(root, "/") == 0){             for (p = disk + strlen(disk) - 1; isdigit(*p); p--){                 *p = '\0';             }             fd = open(disk, O_RDONLY);             break;         }     }     fclose(fp);      if (fd < 0){         fprintf(stderr, "open hard disk device failed.\n");         return "";      }     if (ioctl(fd, HDIO_GET_IDENTITY, &hid) < 0){         fprintf(stderr, "ioctlerror.\n");         return "";     }     close(fd);     snprintf(caDriveSerial, nlen, "%s", hid.serial_no); #endif     strTmp = caDriveSerial;     return strTmp;   }报错了

Windows DeviceIoControl Linux ioctl


Question: 请教switch语句问题，谢谢啦

引用 4 楼 weixin_44472504 的回复:[quote=引用 1 楼 有点贪玩的回复:]case 2:  {   if(c>b)    printf("max=%d",c);  进了你这个if 所以只打印max啊 谢谢啦谢谢啦，知道怎么回事了[/quote]  int max(const int a, const int b) {     return a > b ? a : b; }  int min(const int a, const int b) {     return a > b ? b : a; }  int main() {     int a,b,c,max,min;     printf("input three numbers:");     scanf("%d%d%d", &a, &b, &c);     printf("max=%d, min=%d",  max(max(a, b), c), min(min(a, b), c));     return 0; }  试试这个吧

引用 2 楼 火花20180731的回复:你这都条件判断语句了还非要在外面再嵌套个switch，真是脱裤子放屁----多此一举！ 刚开始学，菜的一塌糊涂

引用 1 楼 有点贪玩的回复:case 2:  {   if(c>b)    printf("max=%d",c);  进了你这个if 所以只打印max啊 谢谢啦谢谢啦，知道怎么回事了


Question: 我是C语言新手，问一道题，用递归的方法来做。

#include <stdio.h>  void solve(float rest, int level) {   if (level > 1)     solve((rest + 1.0 / level) / (1 - 1.0 / level), level - 1);   else     printf("there is a total of %.0f fish\n", rest); }  int main() {   solve(11, 5);    return 0; }


Question: 输入后结果总是出现无限循环，求大神指教

我个新手都不想看。。

先这样，再这样，再这样就可以了。

自己都不看看发的帖是一坨什么东西么？

删了重发吧，整理下

引用 1 楼 niiiloc的回复:自己都不看看发的帖是一坨什么东西么？ 不好意思，没用过这个平台，第一次，请见谅

引用 3 楼 qq_44738203的回复:我个新手都不想看。。 同是新手…………，我找到原因了


Question: 求几道考研复试上机题答案

一丁点都看不清楚


Question: 用C语言求PI的第100位，是第100位！不是后100位！

乘法不好逼近吧，应该找一个加法的展开来计算

引用 3 楼 lin5161678 的回复:[quote=引用 2 楼 weixin_44771162 的回复:] [quote=引用 1 楼 lin5161678的回复:]那啥  PI没有后100位 逗我呢，圆周率没有100位？图里4/3后面还有一大长串啊，截图没截下来[/quote] 123456789后3位是789 987654321后4位是4321 现在你回答我 圆周率后100位是什么 你逗我呢 无限不循环小数有后100位?[/quote]  这话在理，怕是楼主以为的后100位是小数点后一百位，而不是正在无限不循环的后一百位，这神特么后一百位，找个终点试试？

引用 3 楼 lin5161678的回复:[quote=引用 2 楼 weixin_44771162 的回复:] [quote=引用 1 楼 lin5161678的回复:]那啥  PI没有后100位 逗我呢，圆周率没有100位？图里4/3后面还有一大长串啊，截图没截下来[/quote] 123456789后3位是789 987654321后4位是4321 现在你回答我 圆周率后100位是什么 你逗我呢 无限不循环小数有后100位?[/quote] 小数点后100位啊，还有我问的是小数点后第100位，没表达清楚我的错

引用 2 楼 weixin_44771162 的回复:[quote=引用 1 楼 lin5161678的回复:]那啥  PI没有后100位 逗我呢，圆周率没有100位？图里4/3后面还有一大长串啊，截图没截下来[/quote] 123456789后3位是789 987654321后4位是4321 现在你回答我 圆周率后100位是什么 你逗我呢 无限不循环小数有后100位?

引用 1 楼 lin5161678的回复:那啥  PI没有后100位 逗我呢，圆周率没有100位？图里4/3后面还有一大长串啊，截图没截下来

或者你用那个著名的无聊的几行代码求PI的, 就是这个  int a=10000,b,c=2800,d,e,f[2801],g;  main() { 	for(;b-c;) 		f[b++]=a/5;  	for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)  		for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); }

最简单的用  PI/4 = 4 atan(1/5) - atan(1/239) 微快点的用  高斯-勒让德算法,  superPI 好像用的这个,  不是很快, 算几千万位还是很快的.. 现在最快的  楚德诺夫斯基公式,  要算到上亿位最好用这个..

记录相邻两次计算结果 相减 结果绝对值小于 0.00[100个]01 就是精度达到小数点后100位了

引用 6 楼 niiiloc的回复:乘法不好逼近吧，应该找一个加法的展开来计算 愁的就是这个，是加法就不会在这找大佬求解了

那啥  PI没有后100位


Question: sort函数。

void sort(int *a, int b) { 	int i=0, j=0, v=0;  	for( i=0 ; i<b ; i++ ) 	{ 		for( j=0 ; j<b-i-1 ; j++ ) 		{ 			if( a[j]>a[j+1] ) 			{  				v	  = a[j]  ; 				a[j]  = a[j+1]; 				a[j+1]= v  ; 			} 		} 	} }

如果你要完整的代码的话，我也给你发一下哈，记得给好评哦。。。 #include<stdio.h> #include<stdlib.h>  #define N 5  void sort(int a[],int n);  int main (void) { 	int a[N]; 	int i,k; 	printf("请输入5个整数："); 	for(i=0;i<5;i++) 		scanf("%d",a+i); 	sort(a,N); 	for(k=0;k<N;k++) 		printf("%-4d",a[k]);  	system("pause"); 	return 0; } void sort(int a[],int n) { 	int i,j; 	int temp=0; 	for(i=0;i<n-1;i++) 		for(j=i+1;j<n;j++) 		{ 			if(a[i]>a[j]) 			{ 				temp=a[i]; 				a[i]=a[j]; 				a[j]=temp; 			} 		} }

v=a[j];       a[j]=a[j+1];       a[j+1]=v;

v=a[j]; a[j]=a[j+1]; a[j+1]=v;

对第一次有点紧张。。。


Question: 大一新生初学c，请教大佬解释一下答案，谢谢~

这画质打扰了！

指针p指向数组a，当指针名或者数组名后边没有[ ]的时候，指的就是数组头位置，也就是a[0],所以*p指的是a[0]=1，所以在f里循环加了五次，都加在a[0]上了，从1加到了6，其他都没变。

a是一个整形指针，传递进函数后，相当于a[0]+5，打印出来，也只有a[0]有变化


Question: 求各位大神帮忙我实在找不到错误，谢谢大神们

你的图 看不清 贴代码


Question: C 位字段变量占用的内存大小是怎么规定的？

1、局部对齐，按照字段的大小“凑”字节的整数倍 2、一个字段不能跨越相邻的两个字节，所以有“空洞” 3、全局对齐，所有字段的内存计算必须是2的次方值


Question: 帮帮忙，急求

引用 2 楼 weixin_42377720 的回复：完整代码如下： #include<stdlib.h> #include<stdio.h>  struct Student { 	int num; 	float score; 	struct Student *next; };  //定义一个全局变量 int n; //创建学生信息链表函数声明 struct Student *Creat(void); //打印学生信息函数声明 void Show_Student_MSG(struct Student *head); //修改学生信息函数声明 void Revise_Student_MSG(struct Student *head,int x);  int main(void) { 	struct Student *head;//头结点 	head=Creat();//创建链表函数 	Show_Student_MSG(head);//打印信息函数 	Revise_Student_MSG(head,77);//更正学生信息，参数1是头指针，参数2是休息要修改后的分数 	Show_Student_MSG(head);//打印信息函数  	system("pause"); 	return 0; }  struct Student *Creat(void) {//创建学生信息链表函数定义 	struct Student *head;//定义头结点指针 	struct Student *p1,*p2;//定义两个移动指针 	n=0; 	p1=p2=(struct Student *)malloc(sizeof(struct Student));//开辟一个新单元 	printf("请输入第一个学生的学号，分数："); 	scanf("%d,%f",&p1->num,&p1->score); 	head=NULL; 	while(p1->num!=0) 	{ 		n=n+1; 		if(n==1) 			head=p1; 		else 			p2->next=p1; 		p2=p1; 		p1=(struct Student *)malloc(sizeof(struct Student)); 		printf("请输入下一个学生的学号，分数(输入0结束)："); 		scanf("%d,%f",&p1->num,&p1->score); 	} 	p2->next=NULL;//链表最后要让链表尾为空 	return (head); }  void Show_Student_MSG(struct Student *head) {//打印学生信息函数定义 	struct Student *p;//定义一个移动指针 	printf("这是第%d个学生的信息\n",n); 	p=head; 	if(head!=NULL)//不是空链表 		do 		{ 			printf("%-4d%-4.1f\n",p->num,p->score); 			p=p->next; 		}while(p!=NULL);//没有到链表尾 }  void Revise_Student_MSG(struct Student *head,int x) {//修改学生信息函数定义，参数2是您要修改的分数 	float revise; 	struct Student *p;//定义一个移动指针 	p=head; 	printf("请输入您要更正学生的分数："); 	scanf("%f",&revise); 	while(p!=NULL) 	{ 		if(p->score==revise) 			p->score=x; 		p=p->next; 	} }楼主是没时间吗？发完问题没回来看看结果嘛

void Revise_Student_MSG(struct Student *head,int x) {//修改学生信息函数定义，参数2是您要修改的分数x 	float revise; 	struct Student *p;//定义一个移动指针 	p=head; 	printf("请输入您要更正学生的分数："); 	scanf("%f",&revise); 	while(p!=NULL) 	{ 		if(p->score==revise) 			p->score=x; 		p=p->next; 	} }


引用 1 楼 棉猴的回复:是MFC么？ 关注C语言，基本的内容

是MFC么？


Question: 第二个scanf用了第一个scanf已显示的数据

可scanf函数在读取回车后，电脑读取输入的数字后删除键盘中的数字，即1.1   1.2回车，键盘缓冲区只剩回车，下面的scanf不应该会输出已被删除的上面的数据1.2啊

在输入流中，数据项必须由空格、制表符和新行符分割。逗号和分号等不是分隔符，比如以下代码： scanf("%d%d",&r,&c); 将接受输入 10 20，但遇到 10,20 则失败。  scanf函数返回值为int型。 如果a和b都被成功读入，那么scanf的返回值就是2； 如果只有a被成功读入，返回值为1； 如果a和b都未被成功读入，返回值为0；  你读入的时候加了分号，导致scanf读入第二个数时失败，所以第二个数仍然是上次读入的值，scanf返回值为1，你可以输出一下看看。 https://baike.baidu.com/item/scanf/10773316?fr=aladdin

第一次scanf成功了啊，已经将1.2赋值到了j分配的内存里了，第二次scanf失败，j内存里的值没变还是1.2.不是输出的缓冲区的数字，而是j分配的内存里的数字。。。。。。。。。。

我用%d也是，上面输入1 空格2 下面3 分号4。结果也是3，2

%lf%lf这种格式本来就很难区分   中间用 空格或逗号等做分割 %lf %lf  %lf,%lf %lf;%lf等都可以


Question: 想知道第一行那里错了

emmmm……头文件stdio.h

stdio，std即standard，标准的，io即input和output，输入和输出，所以stdio意思是标准输入输出，也就是说，stdio.h这个头文件包含的函数是标准输入输出一类的。记住这个，以后应该就不会出错了。

头文件的名称打错了。

引用 2 楼 weixin_44770192 的回复:引用 1 楼 zgl7903 的回复：输出信息中提示的是什么错误？怎么看？ 点击一下  那个error 鼠标往上滚

头文件名字 #include<stdio.h>

引用 1 楼 zgl7903 的回复：输出信息中提示的是什么错误？怎么看？

输出信息中提示的是什么错误？


Question: 梦想总是要有的，万一实现了呢！

没有快速入门的方法，走的路多了，看的书多了，也就熟能生巧了。

“学习编程我也有我自己的计划，我会利用课余时间去看书和练习敲代码，将理论和实践结合，在反复的敲代码中学习知识，在学习编程上我打算每周花30个小时以上，通过不停地练习来提高自己。”  最近好几个这样的帖子。是你们学校老师留的作业吗？看起来怪怪的、像是传销的口号。。。除了我引用的这句、基本都是废话。

引用 2 楼 weixin_44769911 的回复:引用 1 楼 六道佩恩 的回复：既然你没啥想问的，那就结贴给分吧我想向您询问一下，对于初学者想快速成长有没有什么好的办法原来你能一句话说明白呀

既然你没啥想问的，那就结贴给分吧


Question: 纯新手求教

引用 5 楼 weixin_44770095 的回复:[quote=引用 4 楼 儿童节的回复:][quote=引用 3 楼 儿童节 的回复:]  正好前几天练习过，如下：   //  求给定范围内的质数（素数） //  定义：在大于1的自然数中，除了1和它本身以外不再有其他因数，这样的数叫质数或素数。  #include <stdio.h> #include <math.h>  int main() {         int i, n, m = 1;         printf("%8d", 2);  // 2 就不用去比较了。         //  从 3 开始，偶数也不用比较，只比较奇数         for (i = 3; i <= 999; i = i + 2)         {                 int k = sqrt(i);                 for (n = 2; n <= k; n++)                 {                         if (i % n == 0)  //  如果数字除以那些被除数，余数为0则表示能被整除，即有因数，于是跳过                                 break;                         else if (n == k) // 要把从2到k的数都除以一遍才能确定是不是质数（素数）                         {                                 printf("%8d", i);                                 m++;                                 if (0 == m % 10) //  每输出10个数字，换一行                                         printf("\n");                         }                 }         }         printf("\n");          return 0; }   运行截图：    希望能帮到你。  点了提交回复才发现缺了一个数字3，抱歉！  把                  int k = sqrt(i);   改成                  int k = sqrt(i) + 1 ;   就好了。[/quote] 但是如果只搜索小于x的质数并且直接存储到数组里的话不是更快吗，比如说91就只要检查3 5 7就可以跳出了，不用34567[/quote]  这就不清楚了，数学不好，不懂你说的是什么依据。实际上，我前几天练习的时候，只想到了被除数是每个数的一半+1，今天看了你发的平方根，试了一下也可以，才知道可以把被除数的上限定为 平方根+1。 数学理论方面的东西，一下子记不得那么多了。

引用 4 楼 儿童节的回复:[quote=引用 3 楼 儿童节 的回复:]  正好前几天练习过，如下：   //  求给定范围内的质数（素数） //  定义：在大于1的自然数中，除了1和它本身以外不再有其他因数，这样的数叫质数或素数。  #include <stdio.h> #include <math.h>  int main() {         int i, n, m = 1;         printf("%8d", 2);  // 2 就不用去比较了。         //  从 3 开始，偶数也不用比较，只比较奇数         for (i = 3; i <= 999; i = i + 2)         {                 int k = sqrt(i);                 for (n = 2; n <= k; n++)                 {                         if (i % n == 0)  //  如果数字除以那些被除数，余数为0则表示能被整除，即有因数，于是跳过                                 break;                         else if (n == k) // 要把从2到k的数都除以一遍才能确定是不是质数（素数）                         {                                 printf("%8d", i);                                 m++;                                 if (0 == m % 10) //  每输出10个数字，换一行                                         printf("\n");                         }                 }         }         printf("\n");          return 0; }   运行截图：    希望能帮到你。  点了提交回复才发现缺了一个数字3，抱歉！  把                  int k = sqrt(i);   改成                  int k = sqrt(i) + 1 ;   就好了。[/quote] 但是如果只搜索小于x的质数并且直接存储到数组里的话不是更快吗，比如说91就只要检查3 5 7就可以跳出了，不用34567

引用 3 楼 儿童节 的回复:正好前几天练习过，如下：   //  求给定范围内的质数（素数） //  定义：在大于1的自然数中，除了1和它本身以外不再有其他因数，这样的数叫质数或素数。  #include <stdio.h> #include <math.h>  int main() {         int i, n, m = 1;         printf("%8d", 2);  // 2 就不用去比较了。         //  从 3 开始，偶数也不用比较，只比较奇数         for (i = 3; i <= 999; i = i + 2)         {                 int k = sqrt(i);                 for (n = 2; n <= k; n++)                 {                         if (i % n == 0)  //  如果数字除以那些被除数，余数为0则表示能被整除，即有因数，于是跳过                                 break;                         else if (n == k) // 要把从2到k的数都除以一遍才能确定是不是质数（素数）                         {                                 printf("%8d", i);                                 m++;                                 if (0 == m % 10) //  每输出10个数字，换一行                                         printf("\n");                         }                 }         }         printf("\n");          return 0; }   运行截图：    希望能帮到你。  点了提交回复才发现缺了一个数字3，抱歉！  把                  int k = sqrt(i);   改成                  int k = sqrt(i) + 1 ;   就好了。

我的意思是只搜索全部小于x的平方根的质数，这样可以减少循环次数

for (int i=2;i<=1000;i++) 	{ 		if (i == 2) 		{ 			cout << i << endl; 		} 		for (int j = 2;j<i;j++) 		{ 			if (i%j == 0) 			{ 				break; 			} 			if (j == i -1) 			{ 				cout << i << endl; 			} 		} 	}  不太懂要怎么修改,但是我的思路是: 2,本身是质数,直接取. 大于2的,设立一个循环,在循环中能够被小于自己,大于1的数整数(也就是取余为0的),直接跳出循环. 没跳出循环的,就是质数. 设立j的数值判断一下是否到循环尾部了,输出即可.  当然也可以在for(j)的循环里把j<=i 然后把输出的判断改一下.


Question: 大一学生自学C，恳请大家帮助

引用 3 楼 qq_42307333的回复:[quote=引用 2 楼 qq_44762397 的回复:] [quote=引用 1 楼 @风轻云淡_的回复:]#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(void) { 	int height, length, width, volume, weight; 	printf("Enter height of box:"); 	scanf("%d", &height); 	printf("Enter length of box:"); 	scanf("%d", &length); 	printf("Enter width of box:"); 	scanf("%d", &width);//这里输入完之后，缓冲区保存了一个换行符，倒数第二个getchar()就是为了吃掉这个换行符的 	volume = height * length*width; 	weight = (volume + 165) / 166; 	printf("Volume(cubic inches):%d\n", weight); 	getchar(); 	getchar();//这个的作用才是为了不闪退 	return 0; } 前几个scanf在读取完键盘输入后，也会在缓冲区留一个换行符，但是scanf有处理一些缓冲区留有特殊符号（包括回车换行符）的机制，所以不会影响，从而能正常读取用户的输入。 感谢，可是为什么三个scanf的缓冲区一个getchar就可以清除了？[/quote] 前面的回车被后面的scanf吸收了，只有最后一个scanf需要用getchar来吸收[/quote] 感谢啦！现在懂了！继续努力

引用 2 楼 qq_44762397 的回复:[quote=引用 1 楼 @风轻云淡_的回复:]#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(void) { 	int height, length, width, volume, weight; 	printf("Enter height of box:"); 	scanf("%d", &height); 	printf("Enter length of box:"); 	scanf("%d", &length); 	printf("Enter width of box:"); 	scanf("%d", &width);//这里输入完之后，缓冲区保存了一个换行符，倒数第二个getchar()就是为了吃掉这个换行符的 	volume = height * length*width; 	weight = (volume + 165) / 166; 	printf("Volume(cubic inches):%d\n", weight); 	getchar(); 	getchar();//这个的作用才是为了不闪退 	return 0; } 前几个scanf在读取完键盘输入后，也会在缓冲区留一个换行符，但是scanf有处理一些缓冲区留有特殊符号（包括回车换行符）的机制，所以不会影响，从而能正常读取用户的输入。 感谢，可是为什么三个scanf的缓冲区一个getchar就可以清除了？[/quote] 前面的回车被后面的scanf吸收了，只有最后一个scanf需要用getchar来吸收

引用 1 楼 @风轻云淡_的回复:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(void) { 	int height, length, width, volume, weight; 	printf("Enter height of box:"); 	scanf("%d", &height); 	printf("Enter length of box:"); 	scanf("%d", &length); 	printf("Enter width of box:"); 	scanf("%d", &width);//这里输入完之后，缓冲区保存了一个换行符，倒数第二个getchar()就是为了吃掉这个换行符的 	volume = height * length*width; 	weight = (volume + 165) / 166; 	printf("Volume(cubic inches):%d\n", weight); 	getchar(); 	getchar();//这个的作用才是为了不闪退 	return 0; } 前几个scanf在读取完键盘输入后，也会在缓冲区留一个换行符，但是scanf有处理一些缓冲区留有特殊符号（包括回车换行符）的机制，所以不会影响，从而能正常读取用户的输入。 感谢，可是为什么三个scanf的缓冲区一个getchar就可以清除了？


Question: 求助

引用 1 楼 weixin_42377720 的回复：时间问题，我只弄了第一题，不好意思 #include <stdio.h> #include<stdlib.h>  #define N 3 // 学生数   struct Student	// 学生C语言成绩结构体类型  { 	long num; 	int score;  }stu[N];  // 定义input函数,从键盘向数组输入N个学生的学号、C语言成绩 void input_Stu_MSG(struct stuc stu[]);  //打印学生信息 void Show_Stu_MSG(struct Student stu[],int n);  // 定义print函数,输出数组中成绩最高学生的信息 void output_Max_Score(struct stuc stu[]);    int main()  { 	input_Stu_MSG(stu,N);  	Show_Stu_MSG(stu,N); 	putchar('\n');  	output_Max_Score(stu,N);   	system("pause"); 	return 0;  }  void input_Stu_MSG(struct Student stu[],int n) // 定义input函数,从键盘向输入N个学生的学号、C语言成绩 { 	int i; 	printf("请输入学生的学号和C语言成绩！\n"); 	for(i=0;i<n;i++) 	{ 		printf("请输入第%d个学生的学号，C语言成绩：",i+1); 		scanf("%ld,%d",&stu[i].num,&stu[i].score); 	} } void Show_Stu_MSG(struct Student stu[],int n) { 	int i; 	for(i=0;i<n;i++) 		printf("第%d个学生的学号：%ld		分数：%d\n",i,stu[i].num,stu[i].score); }  void output_Max_Score(struct Student stu[],int n) // 定义print函数,输出数组中成绩最高学生的信息 { 	int i; 	struct Student temp;  	temp=stu[0]; 	for(i=0;i<n;i++) 	{ 		if(stu[i].score>temp.score) 			temp=stu[i]; 	} 	printf("c语言最高分是：%d",temp.score); }楼主是没时间吗？怎么不回一下也不结个贴呢


Question: 新手求教

引用 3 楼 user-1的回复:'='是赋值，'=='是判断 https://zhidao.baidu.com/question/262642370944211285.html 嗯嗯懂了谢谢啊大哥

引用 1 楼 user-1的回复:1.首先你把代码放在代码块里面别人容易查看，而不是截图。 2.你的判断语句‘=’恐怕要改成‘==’ 我试了确实是因为这个，但为什么要改成==呢，不是很懂


Question: 求大神帮小弟看看，小弟是大一萌新

引用 7 楼 哲哲哲少 的回复:[quote=引用 6 楼 @风轻云淡_的回复:] [/code] c＋＋就是舒服啊，蟹蟹[/quote] sscanf不是C++才用的，C语言一直就可以用的，而且C++有升级更安全版：sscanf_s，上面我只是用C++写出来了。。 C语言版： #include <stdio.h>  int main() { 	char buff[64] = "12-张三-1344"; 	int age = 0; 	int other = 0; 	char name[32] = {0};  	sscanf(buff,"%d-%[^-]-%d",&age,name,&other); 	printf("age:%d\r\nname:%s\r\nother:%d\r\n",age,name,other);  	return 0; }

引用 6 楼 @风轻云淡_的回复:#include <iostream>  using namespace std;  int main() { 	char buff[64] = "12-张三-1344"; 	int age = 0; 	int other = 0; 	char name[32] = {0}; 	 	sscanf(buff,"%d-%[^-]-%d",&age,name,&other); 	cout << "age:" << age << endl; 	cout << "name:" << name << endl; 	cout << "other:" << other << endl;  	return 0; }  c＋＋就是舒服啊，蟹蟹

//demo 					char s[20] = "12-张三-5631"; 					int i = 0; 					int x = 0; 					int char_index = 0; 					char model[3][10] ; 					while (i < strlen(s) ) 					{ 						//-分割 						if (s[i]=='-') 						{ 							model[char_index][x] = '\0'; 							char_index++; 							x=0; 							i++; 							continue; 						} 						//分别赋值 						else 						{ 							model[char_index][x]=s[i]; 							x++; 						} 						i++; 					} 					//最后一位 					model[char_index][x] = '\0'; 					MessageBox(NULL,model[0],"",NULL); 					MessageBox(NULL, model[1], "", NULL); 					MessageBox(NULL, model[2], "", NULL); 					//转化 					int Number[2]; 					Number[0] = atoi(model[0]); 					Number[1] = atoi(model[2]);  最后是那个意思？

调用atoi函数，把字符串转成整形

引用 楼主 哲哲哲少的回复:char s[20]; s[20]内容是:12-张三-5631 把这个字符串中的20，张三，5631这三部分内容分别存入三个数组当中？ 我这个描述漏了些东西，我是希望把数字转化为整形，汉字保留字符型，然后再存入三个不同的数组中

引用 1 楼 user-3的回复:for example char *ptr; char res[3][10]; int i = 0; ptr = strtok(s, "-"); sprintf(res[i++], "%s", ptr); while(ptr != NULL) {     ptr = strtok(NULL, "-");     if(ptr != NULL) {         sprintf(res[i++], "%s", ptr);     } } 或者直接遍历字符串找“-”，然后用strncpy也可以 如果20和5631转化成整形之后再存入数组中，该怎么搞


Question: while和getchar组合清除剩余输入的问题

我的理解是这样，你先输入n，然后再按回车，这是两次输入，会被两个getchar分别获取，然后就回到最外层循环处等待输入

while(getchar() != '\n') continue; 这意思是只有读到回车才跳出循环


Question: c语言求助

这种情况要把你的全部代码贴上来。编译没有错误这是程序可以跑起来的前提，至于是不是按照你设定的轨迹运行就不知道了。

能详细的发一张代码吗？代码编译是可能没有出错，但是不代表代码没有错，我也是学生，不是很厉害，但也遇到不少这种情况

没错才怪啊啊 亲 ，，  这种错误很大可能是指针使用错误


Question: 新手入门C，

引用 1 楼 慢生活。 的回复:长一点那个是正确的，短的是我自己写的 pa,pb,pc都是指针，你这样交换，只是换了指针的指向，本身a,b,c的值是没有改变的，所以你输出*pa,*pb,*pc结果是交换过的，但是如果你输出a,b,c的话，结果应该是没有改变的。 因为你这里没有封装函数来交换，所以你直接用a，b，c来完成交换就可以了，如果一定要用指针，就用*pa,*pb,*pc

lz，第23行，pb=pc写反了。。。

长一点那个是正确的，短的是我自己写的


Question: 求教，关于malloc给结构体分配内存大小的不解

补充一篇自己写的总结： “C语言malloc(size)分配的可用空间，以及 free(*) 成功的根据”， https://blog.csdn.net/weixin_44732817/article/details/88566962

引用 9 楼 gs汗宝宝 的回复:我觉得你是在说内存对齐的问题，这个网上有一些介绍还不错。  嗯，从某种角度来说，跟内存对齐也有关联。 这次无意当中因为错误使用 malloc() 而反过来查证，基本上理清了 malloc() 的实际操作了，也对 free(pointer) 为什么能恰好释放合适的内存块而不会多释放也不会少释放有了更清楚的认识，也算是大有收获。 也谢谢您的建议！

我觉得你是在说内存对齐的问题，这个网上有一些介绍还不错。

引用 7 楼 火花20180731 的回复:我是不太明白啊，你这个head = (pnum)malloc(sizeof(pnum));是几个意思？  你的节点类型是struct NUM类型，你给它取了个别名叫num，那么你创建节点应该是sizeof(num)的长度。 里面有一个int成员，一个pnum成员，所占内存大小是这两个成员的长度之和。 但是你创建节点却分配的是一个pnum的长度的内存，也就是struct NUM *类型。  你这还pend->a = i; pend->next = NULL;  赋值赋得倒是不亦乐乎...... 程序没崩我也是见了鬼了！  帖子第一句就说了，原本的代码是之前另外一个帖子的提问者给的，他当时就是在创建链表的函数里写成这样的：   head = (pnum)malloc(sizeof(pnum));  而且他自己编译通过了，运行的时候可以创建链表、读取并输出链表信息（结构体成员的值），只是最后进行到 删除链表的函数的时候才报错了。而他的机器上，报错的原因 和 我的机器上 报错的原因 ，不一样。 而且，我把他原来的代码的逻辑错误改正之后，运行就没有出错了。甚至把申请内存空间的部分代码改成 malloc(0) 也没问题。 所以，才会有这篇延伸探究 malloc() 具体实现的帖子。 以前，我也只知道 malloc(size) 是申请 size 个字节的内存块，就想当然地以为获得的也仅仅是 size 个字节的内存块。 但是，上面的代码所运行表现出来的情况证明不是这样子的，所以才慢慢深入 malloc().c 这个源头，知道了 malloc(size) 分配出来的内存块的大小，并不简单地 等于 size 个字节。虽然，知道了这些实现的细节，在现在看来似乎没有什么用处，但是我觉得学编程，特别是C语言的编程，还是不能脱离底层的基础知识，不能太依赖于抽象的概念和接口，那样学到的东西比较像空中楼阁，基础不牢。 好吧，顺便多罗嗦了几句，觉得不合适的话就请忽略掉吧。

谢谢指导。上午的结论还是比较粗浅的，因为之前对malloc关心得不多。博客里当时有个结论也写错了，在64-bit、size_t为8个bytes的系统里，malloc()成功得到的内存块的大小不是32bytes的正整数倍，而应该是 32 + 2 * sizeof(size_t) * n 个bytes，其中n是大于等于 0 的正整数。我刚刚把文章里的相关内容修改过了。  关于您上面回复的2点，我之前是这样想的： （1）之所以在上面的帖子里下第1点结论，是因为当时想理清到底malloc(0)分配了多大的内存空间。而且除了结构体本身使用到的之外，两个连续地址之间多出来的16个字节到底是不是malloc()分配的呢？后来，了解到malloc()还有对齐、overhead这些东西，才推断应该是连续的，中间多出来的16个字节也是malloc()分配的。当然了，这只是为了解决头脑里的困惑，就算知道是分配到的内存块的一部分，也是不能去动的。 （2）访问或者查看额外的内存地址上的东西，主要是因为调试的时候看到了一些不是代码里能提现出来的数据，所以就想搞清楚那些是什么，主要还是为了调试的时候明白一点吧，不是真的想在代码里去访问越界的内存。  再次感谢！

你博客里的结论基本都对，但帖子里的疏漏太多了： 1. 连续使用malloc()给指针分配内存块的时候，分配的内存块确实是连续的 ——不应该有这种假定，这种假定既危险也无实际的意义。  2. 能访问内存不代表是合法的，比如你申请一个32字节的内存，你实际用了64字节。这就是典型的内存越界，内存越界不见得会立即出现异常，但是依然是非法访问内存。

引用 3 楼 niiiloc 的回复:混淆了很多概念，相邻申请内存块的偏移值不等于申请内存块的大小。  从malloc.c的描述来看，如果分配到的内存块确实是相邻的话，确实是地址的差。  因为，分配的内存块里，除了有用户或代码需要存放数据的空间之外，还有 “对齐操作”的空间 和 “overhead” 的空间。 所以，并不因为分配的相邻内存块的地址差大于申请的size字节数，就不相邻。 只不过是用户代码“应该”访问的内存地址是不相邻的。  下午把这篇帖子重新整理了一下，请指导： https://blog.csdn.net/weixin_44732817/article/details/88530993

混淆了很多概念，相邻申请内存块的偏移值不等于申请内存块的大小。

既然没有人回复，那还是我自己来回答吧。  刚刚查阅了glibc里的malloc.c文件，里面介绍了malloc()在64位系统、size_t为8字节的情况下，最小分配块的大小是32字节。  在线查看C/C++库文件的网页：https://code.woboq.org/userspace/glibc/malloc/malloc.c.html   //  glibc/malloc/malloc.c /* * Vital statistics:   Supported pointer representation:       4 or 8 bytes   Supported size_t  representation:       4 or 8 bytes        Note that size_t is allowed to be 4 bytes even if pointers are 8.        You can adjust this by defining INTERNAL_SIZE_T   Alignment:                              2 * sizeof(size_t) (default)        (i.e., 8 byte alignment with 4byte size_t). This suffices for        nearly all current machines and C compilers. However, you can        define MALLOC_ALIGNMENT to be wider than this if necessary.    Minimum overhead per allocated chunk:   4 or 8 bytes        Each malloced chunk has a hidden word of overhead holding size        and status information.    Minimum allocated size: 4-byte ptrs:  16 bytes    (including 4 overhead)                           8-byte ptrs:  24/32 bytes (including, 4/8 overhead)        When a chunk is freed, 12 (for 4byte ptrs) or 20 (for 8 byte        ptrs but 4 byte size) or 24 (for 8/8) additional bytes are        needed; 4 (8) for a trailing size field and 8 (16) bytes for        free list pointers. Thus, the minimum allocatable size is        16/24/32 bytes.         Even a request for zero bytes (i.e., malloc(0)) returns a        pointer to something of the minimum allocatable size.  */   简而言之，malloc()分配到的最小内存块的大小是8bytes的倍数，具体在64-bit系统、size_t的大小定义为8bytes（64-bit OS默认；此值可修改)时，分配到的最小内存块的大小是16bytes的倍数，实际再加上还有overhead占用的空间和Alignment（对齐）的要求，其实是32bytes的倍数。  下面用一段代码来验证：   // 测试最小分配到的内存空间大小，是否为32bytes // 测试环境OS为64bit，size_t为8bytes  #include <stdio.h> #include <malloc.h>  typedef struct mall_test {     int a;     struct mall_test *next; } MT, *PMT;  int main(int argc, char const *argv[]) {     char *test;  //  指针变量     printf("size of type : size_t is %ld\n", sizeof(size_t));     printf("size of type : int is %ld\n", sizeof(int));     printf("size of type : unsigned int is %ld\n", sizeof(unsigned int));     printf("size of type : * is %ld\n", sizeof(test));     printf("size of type : struct mall_test is %ld\n", sizeof(MT));      // 申请内存空间     PMT p[5] = {NULL};     for (int i = 0; i < 5; ++i)     {         p[i] = (PMT)malloc(0);         if (NULL == p[i])             printf("p[%d] malloc failed.\n", i);         else         {             p[i]->a = i + 1;             p[i]->next = NULL;             printf("p[%d] = (char*)malloc(0) returns hex address of p[%d] : %x\n", i, i, p[i]);         }     }      // 访问成员     for (int i = 0; i < 5; ++i)     {         printf("p[%d]->a is %d\n",i,p[i]->a);     }      // 释放内存空间     for (int i = 0; i < 5; ++i)     {         free(p[i]);         p[i] = NULL;     }      return 0; }   运行结果截图：    总结：  （1）64-bit操作系统、按 size_t 默认为8bytes的情况，malloc()分配到的最小内存块的大小是 32bytes。 （2）即使是 malloc(0) 也是。 （3）分配到的内存空间，可以按正常方式访问：比如 p[i]->a 访问结构体成员。 （4）也许不同的编译器对使用malloc(size)时，参数size 有不同的检查要求吧，看起来gcc没有要求太多，好像是非负整数就行。  暂时就想到这么多，应该算是解决了心里的一个小疑惑吧！

关于内存段访问错误的原因，已经通过gdb调试找到了，是删除函数的逻辑错误造成的。    但是，这又和那位提问者所反馈的修改了代码之后，仍然出现和之前一样的错误的情况想矛盾了。现在想来，可能是操作系统和编译器的原因。  但是malloc到底分配多大的内存这个问题，还是存在。再次恳请有了解这方面情况的专家不吝赐教！谢谢！


Question: c语言中的这个(1..S1(0))是什么意思

CString用法：https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa315043(v=vs.60) 引用 2 楼 wudidada4 的回复:[quote=引用 1 楼 user-2 的回复：]伪代码 实际语法不支持的那这个书里也没有写用法，就很烦了[/quote]

引用 3 楼 niiiloc 的回复：CString用法：https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa315043(v=vs.60) [quote=引用 2 楼 wudidada4 的回复:] [quote=引用 1 楼 user-2 的回复：]伪代码 实际语法不支持的那这个书里也没有写用法，就很烦了[/quote][/quote]谢谢🙏

引用 1 楼 user-2 的回复：伪代码 实际语法不支持的那这个书里也没有写用法，就很烦了

伪代码 实际语法不支持的


Question: c语言中的这个(1..S1(0))是什么意思

搜下Cstring用法吧

这是伪码，要你自己去实现的


Question: 大佬们帮个忙   才学完结构体 有点懵逼嘻嘻 谢谢

献丑了，我是新手  #include <iostream> #include <stdio.h> using namespace std;  struct elePeople {     string name;     float score;     elePeople(string p_name,float p_score)     {         name=p_name;         score=p_score;      } }; int main() {     elePeople ele[]={{"林黛玉",0},{"薛宝钗",0},{"秦可卿",0}};     string inputName;     cout<<"请输入一个名字..."<<endl;     cin>>inputName;     while(inputName!="exit")     {         for(int i=0;i<3;i++)         {             if(ele[i].name==inputName)             {                 ele[i].score++;                 break;              }         }          cout<<"请输入一个名字..."<<endl;         cin>>inputName;     }      for(int j=0;j<3;j++)     {         cout<<ele[j].name<<"---"<<ele[j].score<<endl;     }      getchar();     return 0; }  当输入exit时，退出循环 CodeBlocks测试通过

如果只是这样感觉没有用到结构体的特点 直接用数组就可以达到你的要求了


Question: 求助

for(i=0;i<n;i++) a[i]=0;


Question: 'cha' : function does not take 4 parameters  c++小白求解

cha()函数的声明是3个参数，而cha()函数的定义是4个参数。把cha()函数 的声明改为 void cha(struct goodtype thing[],int n, int k,goodtype x); 以下是运行效果

第三行声明错误，void cha(struct goodtype thing[],int k,goodtype x); 少了个参数，这么明显的错误，错误提示也那么清楚，英语不认识么？


Question: C#编程

移步https://bbs.csdn.net/forums/Csharp 还有，你这描述就算到了c#区也没人会回复你的


Question: 求助帖，怎么用两种方法处理一个char，而且输出所占字节的8位二进制

能不能分享一下，我只能想到一种方法，就是不断将该字符对应的ASCII码除以2，取得对应位的值，最后得到8位二进制表示。两种方法难道是说的除以2这个过程的两种方法吗。那应该就不止两种了，递归、各种循环等等。

我知道了..........


Question: 求各位大佬帮一下小弟困扰几天的问题！！

我找到问题原因了：scanf参数的缓冲区问题 而且在VS2015中不支持fflush(stdin); 用rewind(stdin);替换后解决问题 替换后代码：  void scf() { 	printf("请输入体重:"); 	while (scanf("%f", &weght)!=1) 	{ 		printf("输入错误，请重新输入！\n"); 		printf("请输入体重:"); 		rewind(stdin);//特别注意 VS2015不支持 fflush(stdin) 	} 	printf("请输入身高:"); 	while (scanf("%f", &height) != 1) 	{ 		printf("输入错误，请重新输入！\n"); 		printf("请输入身高:"); 		rewind(stdin);//特别注意 VS2015不支持 fflush(stdin) 	} }

引用 1 楼 user-1的回复:把循环里面的scanf去掉，循环条件里面有scanf了 去掉也不行 还是无限循环

把循环里面的scanf去掉，循环条件里面有scanf了


Question: 求代码

#include<stdio.h> float a; float b; int c; int main() { scanf("%f",&a);//输入数字 c=a; printf ("输出整数部分：%d",c); b=c-a; printf("输出小数部分:%f",b); return 0; }

要得到浮点数整数部分，一种简单地方法是，直接强制类型转换，将浮点数转换为整数。 比如： float a=1.234; 那么，(int)a，返回整数部分，且不改变a的值。  要得到小数部分，也可以这样做： a-(int)a


Question: 哪位大神帮我改一下

这代码厉害了，看的眼花缭乱


Question: 救救这个刚入门c语言的孩子吧

引用 1 楼 轻箬笠的回复:在最后加上getchar()或者system("pause"); 有时候一个getchar()不够，那就多来几个 刚刚试了，确实有用，多谢大佬

在最后加上getchar()或者system("pause");

system(“pause”) ;需要include<stdlib.h>的头文件

照楼上的整吧   应该就对了


引用 4 楼 @风轻云淡_的回复:最后面的不小心删了个return 0; 你自己加上就好。 很感谢啦！！我刚刚改了一下运行成功了！

引用 4 楼 @风轻云淡_的回复:最后面的不小心删了个return 0; 你自己加上就好。 好的！谢谢啦！笔芯！！！

你写的是死循环啊

最后面的不小心删了个return 0; 你自己加上就好。

你的递归终止条件写错了，应该是  if(1 == n)     return n;   可以参考对比下： #include <stdio.h>  long GetSum(long n) { 	if(1 == n) 		return n; 	return n*GetSum(n-1); }  int main() { 	printf("%ld\r\n",GetSum(5)); }

你的递归没有出口


Question: 关于unicode字符集

你搜一下 GBK unicode 对照表

引用 4 楼 qq_22919211 的回复:[quote=引用 3 楼 jiht594 的回复:] utf8、16、32都是unicode的实现。不知道为什么、很多时候说unicode、默认就是utf16. utf8、16都是变长的。 char c1='中'、这个换个汉字可能就不对了  网上说：Unicode和GBK之间没有算法和规则进行转换，只能通过一个大表将二者关联起来。 那么这张大表是啥？他们是怎么关联起来的？  比如“您”在gbk中的编码是：C4FA，那么怎么通过这个大表找到unicode编码中“您”对应的编码呢？ [/quote] 参考下这个连接、http://www.cnblogs.com/lxjshuju/p/6812387.html gbk尽量不要用了、utf8和utf16更常用。 我查了一下、好像gbk和unicode没有对应的规则。你说的大表好像是固定的映射关系、比如一个汉字GBK编码就是XXXX、对应道unicode就是YYYY，写死的。

只能说环境不同也不同。 linux c++有的是utf8编码  win32 c++ 可以ansi/unicode

引用 3 楼 jiht594 的回复:utf8、16、32都是unicode的实现。不知道为什么、很多时候说unicode、默认就是utf16. utf8、16都是变长的。 char c1='中'、这个换个汉字可能就不对了  网上说：Unicode和GBK之间没有算法和规则进行转换，只能通过一个大表将二者关联起来。 那么这张大表是啥？他们是怎么关联起来的？  比如“您”在gbk中的编码是：C4FA，那么怎么通过这个大表找到unicode编码中“您”对应的编码呢？


Question: c语言抽签程序

《C++中产生随机整数的方法》 希望能够帮到你


Question: C编译器怎么确认int数组的结尾？

准确来说，C编译器并没有确定数组的结尾，你可以反汇编查看一下，比如长度为10的int数组，C编译器将为其开辟10个sizeof（int）大小的内存空间，并取一个名字，紧接随后的空间就分配给别的内容，所以边界其实只是一个约定，你完全可以违反约定越界访问数组，但是后果自负

不需要确认，数组类型自带长度

编译器是不检查数据越界的，即需要我们自己保证数据的不越界操作。


Question: c语言程序设计

c语言就用链表做吧 其实我们学c语言的时候也做这些 什么图书馆管理系统 题库管理系统 都是大同小异的 链表+文件

引用 楼主 qq_44759475的回复:求求各位大佬  急求c语言程序设计班级管理系统（班级名称  班级编号  班级人数   班级成立时间） 搜了好多都是关于班级学生成绩的系统管理  急求急求！！！！！指点一下也行哈。。。 数据库或者链表都行啊


Question: 怎么才能在文件中添加信息？

同样表示不明白什么意思。

问题不是很明确，是用代码操作文件吗?


Question: 计数排序的空间复杂度是不是无法计算？

看了楼主几个问题，感觉基础还不扎实 一般排序的空间复杂度是非常好计算的

引用 10 楼 lin5161678 的回复:[quote=引用 9 楼 六道佩恩 的回复:] [quote=引用 7 楼 lin5161678 的回复:] [quote=引用 6 楼 六道佩恩 的回复:] [quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 六道佩恩 的回复:] [quote=引用 1 楼 lin5161678 的回复:] O(n) 我说的是空间复杂度[/quote]我说的是空间复杂度[/quote] 计数排序用数组中最大值作新数组长度，跟原数组长度n有关系？[/quote]输入数据规模增长和内存占用的增长映射的增长函数  你很清楚的说了 和 数组长度n 没关系 那么你为什么会认为  O(n) 这个n是指数组长度呢 这里的数据规模是什么 数组中最大值 这个数据规模怎么增长 内存占用就怎么增长 不是O(n)是什么[/quote] 原数据规模很明显就是指你将要排序的数据量，很明显也就是数组长度n，这是默认的，而这个最大值跟n无关，理应用n之外的方法表示，我目前找到一个O(m)的说法，但由于他写的基数排序也是O(m)，所以暂时没太信。[/quote] 你对取值范围 1-100的数组进行计数排序 需要空间 100 你对取值范围 1-1000的数组进行计数排序 需要空间 1000 空间按照什么东西进行增长 增长速率不是一目了然了么  谁告诉你只有排序的数据量才叫做输入规模 你只见过排序的数据量作为输入规模的算法  所以这个世界上就只有排序的数据量才叫做输入规模??[/quote] 好吧，大佬你赢了，，也就是说这个n的意义和另几种排序算法的n完全不一样咯？那除了数据量和数据范围这两种，还有其他的数据规模吗？

引用 9 楼 六道佩恩 的回复:[quote=引用 7 楼 lin5161678 的回复:] [quote=引用 6 楼 六道佩恩 的回复:] [quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 六道佩恩 的回复:] [quote=引用 1 楼 lin5161678 的回复:] O(n) 我说的是空间复杂度[/quote]我说的是空间复杂度[/quote] 计数排序用数组中最大值作新数组长度，跟原数组长度n有关系？[/quote]输入数据规模增长和内存占用的增长映射的增长函数  你很清楚的说了 和 数组长度n 没关系 那么你为什么会认为  O(n) 这个n是指数组长度呢 这里的数据规模是什么 数组中最大值 这个数据规模怎么增长 内存占用就怎么增长 不是O(n)是什么[/quote] 原数据规模很明显就是指你将要排序的数据量，很明显也就是数组长度n，这是默认的，而这个最大值跟n无关，理应用n之外的方法表示，我目前找到一个O(m)的说法，但由于他写的基数排序也是O(m)，所以暂时没太信。[/quote] 你对取值范围 1-100的数组进行计数排序 需要空间 100 你对取值范围 1-1000的数组进行计数排序 需要空间 1000 空间按照什么东西进行增长 增长速率不是一目了然了么  谁告诉你只有排序的数据量才叫做输入规模 你只见过排序的数据量作为输入规模的算法  所以这个世界上就只有排序的数据量才叫做输入规模??

引用 7 楼 lin5161678 的回复:[quote=引用 6 楼 六道佩恩 的回复:] [quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 六道佩恩 的回复:] [quote=引用 1 楼 lin5161678 的回复:] O(n) 我说的是空间复杂度[/quote]我说的是空间复杂度[/quote] 计数排序用数组中最大值作新数组长度，跟原数组长度n有关系？[/quote]输入数据规模增长和内存占用的增长映射的增长函数  你很清楚的说了 和 数组长度n 没关系 那么你为什么会认为  O(n) 这个n是指数组长度呢 这里的数据规模是什么 数组中最大值 这个数据规模怎么增长 内存占用就怎么增长 不是O(n)是什么[/quote] 原数据规模很明显就是指你将要排序的数据量，很明显也就是数组长度n，这是默认的，而这个最大值跟n无关，理应用n之外的方法表示，我目前找到一个O(m)的说法，但由于他写的基数排序也是O(m)，所以暂时没太信。

茴香豆的写法

引用 6 楼 六道佩恩 的回复:[quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 六道佩恩 的回复:] [quote=引用 1 楼 lin5161678 的回复:] O(n) 我说的是空间复杂度[/quote]我说的是空间复杂度[/quote] 计数排序用数组中最大值作新数组长度，跟原数组长度n有关系？[/quote]输入数据规模增长和内存占用的增长映射的增长函数  你很清楚的说了 和 数组长度n 没关系 那么你为什么会认为  O(n) 这个n是指数组长度呢 这里的数据规模是什么 数组中最大值 这个数据规模怎么增长 内存占用就怎么增长 不是O(n)是什么

引用 3 楼 lin5161678 的回复:[quote=引用 2 楼 六道佩恩 的回复:] [quote=引用 1 楼 lin5161678 的回复:] O(n) 我说的是空间复杂度[/quote]我说的是空间复杂度[/quote] 计数排序用数组中最大值作新数组长度，跟原数组长度n有关系？

引用 4 楼 niiiloc 的回复:看了楼主几个问题，感觉基础还不扎实 一般排序的空间复杂度是非常好计算的 计数排序、基数排序、冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序，这些排序除了希尔排序，时间复杂度我全计算过了，除了计数排序，空间复杂度我也全计算过了，不清楚的人是你吧。计数排序用数组中最大值作新数组长度，跟原数组长度n有关系？

引用 2 楼 六道佩恩 的回复:[quote=引用 1 楼 lin5161678 的回复:] O(n) 我说的是空间复杂度[/quote]我说的是空间复杂度

引用 1 楼 lin5161678 的回复:O(n) 我说的是空间复杂度

O(n)


Question: ball ball 我

就是测试用例都是正确的，但是杭电不给过，显示Wrong Answer

等差数列么？

你想要什么 ？？ 你的程序 输入 2  5   结果  00 05 10 15 20 ....

没看出问题，把错误贴出来

引用 5 楼 niiiloc 的回复：你的输出行末有空格的吧，题目要求是没有空格我输出的行末没有空格

引用 4 楼 weixin_44758733 的回复:就是测试用例都是正确的，但是杭电不给过，显示Wrong Answer 额  没过？ 那你试试 在printf("\n") 后面加个 break? 不成为死循环的这种

你的输出行末有空格的吧，题目要求是没有空格


Question: 寻找lol实力过检测开发者。

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

看到了私信回复一下

留个联系方式吧


Question: ++ 自增运算符问题

关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

引用 29 楼 laodanbj 的回复:楼上的楼上说的我说法，出这题就该枪毙。  这问题楼主应该自己想办法知道答案。现在的在线调试系统我不知道你用什么，我想大同小异，把你的代码放到调试系统里面，去跟踪它，看它怎么运行，看它的汇编代码是什么，这样你就能通过实践掌握知识，而不是这么死记硬背。而且通过调试系统熟练了代码的调试，不怕慢，这种点点滴滴的积累，有助于你很快成为一个程序员，合格的程序员。毫无意义 不同编译环境可以生成不同逻辑的汇编代码 指望看看汇编代码就弄清楚结果多少 是对C语言了解太肤浅

引用 31 楼 laodanbj 的回复:肤浅？你拿c语言准备写上天的，还是操作系统？一个还没入门的学生，他需要学的基本常识，牙牙学语不要犯低级错误，蹒跚学步他知道前方的目标。我看了两眼，这些刚学者是不知道还有很多方法可以实践，我们刚学的那些天不同样也不知道很多方法可以做吗？老师只需一个比划，胜似啰里啰唆多少口舌。你不要往沟里带。 那么你知不知道什么叫做未定义行为? 知不知道未定义行为应该怎么处理? 看看 #16楼的内容 再回复好么

引用 30 楼 lin5161678 的回复:[quote=引用 29 楼 laodanbj 的回复:] 楼上的楼上说的我说法，出这题就该枪毙。  这问题楼主应该自己想办法知道答案。现在的在线调试系统我不知道你用什么，我想大同小异，把你的代码放到调试系统里面，去跟踪它，看它怎么运行，看它的汇编代码是什么，这样你就能通过实践掌握知识，而不是这么死记硬背。而且通过调试系统熟练了代码的调试，不怕慢，这种点点滴滴的积累，有助于你很快成为一个程序员，合格的程序员。毫无意义 不同编译环境可以生成不同逻辑的汇编代码 指望看看汇编代码就弄清楚结果多少 是对C语言了解太肤浅[/quote]  肤浅？你拿c语言准备写上天的，还是操作系统？一个还没入门的学生，他需要学的基本常识，牙牙学语不要犯低级错误，蹒跚学步他知道前方的目标。我看了两眼，这些刚学者是不知道还有很多方法可以实践，我们刚学的那些天不同样也不知道很多方法可以做吗？老师只需一个比划，胜似啰里啰唆多少口舌。你不要往沟里带。

c++标准并没有规定表达式的求值顺序，所以没有确定答案。请参见：《C++ Primer中文版第五版》4.1.3表达式求值顺序。

都已经无数人告诉你了，不同编译器答案不一样，你告诉我这题有正确答案？算了，你继续自嗨吧。 引用 23 楼 不灭的追求 的回复:想必那些出题人的心里也是这么想的。 这都不懂，这都不会，这都能错。

++运算符 优先级高于+   全部递增后，即m为9，在+，  所以k为9+9+9

这种问题已经成为了月经题了 每个月都会有人去问 都跟你明确说了纠结下去没有意义 千万不要想当然 强行去理解啊  这就好比有人在那宣扬传销 你不解为什么他们传销的说的天花乱坠振振有词  于是你来论坛问为什么传销好 然后有人给你指出传销不是什么好东西你反问一句那什么是好的 那我觉得你应该在等一个经历过传销的大佬来给你指点迷津了

想必那些出题人的心里也是这么想的。 这都不懂，这都不会，这都能错。

引用 18 楼 不灭的追求 的回复:那[1] k=（++a）+（++a）*（++a）              A：k=9+7*8              B：k=7+8*9     [2]  k=（++a）-（++a）+（++a）              C：k=9+7+8              D：k=7-8+9 选项A,B,C,D哪个：  这种题不用做，然后心里默默骂一句出题人sb。

引用 20 楼 niiiloc的回复:这种结帖率0又执迷不悟的人，就让他继续研究这种无用的问题吧 恕我冒昧问一句，什么是有用的问题(O_O)？

这种结帖率0又执迷不悟的人，就让他继续研究这种无用的问题吧

引用 18 楼 不灭的追求 的回复:那[1] k=（++a）+（++a）*（++a）              A：k=9+7*8              B：k=7+8*9     [2]  k=（++a）-（++a）+（++a）              C：k=9+7+8              D：k=7-8+9 选项A,B,C,D哪个：  （++a）+（++a）*（++a）的msvc和gcc结果都是9 + 9 * 9 = 90。 gcc：乘法运算优先级高于加法，是先计算乘法再计算加法，但是基于表达式树状结构，加法的左操作数++a和（++a）*（++a）是同一层级的，从左到右计算操作数，即先计算左操作数++a，再计算 （++a）*（++a）。  （++a）-（++a）+（++a）的msvc(9-9+9)和gcc(8-8+9)结果都是9。  这种标准未定义行为自己在编译器上动手更好理解，别再这里猜测。

引用 16 楼 sdghchj的回复:https://en.cppreference.com/w/c/language/eval_order  Consider two functions f() and g(). In C and C++, the + operator is not associated with a sequence point, and therefore in the expression f()+g() it is possible that either f() or g() will be executed first.  加法的+符号并没有序列点，也就没规定计算顺序，自然其带来的副作用也就视实际编译器实现的计算顺序而定。  msvc是27，gcc结果是25， 不同编译器结果不一样，这就是未定义行为，所以并不建议实际开发中写这种代码。  gcc: 先计算第一个加法表达式，它是二元操作符，自然要更先计算完两边的操作数表达式，计算出两个操作数，然后得出加法结果，8 + 8 = 16；再计算第二个加法，第二个加法的左操作数16已经确定，先计算右操作数9，结果25.  msvc：略，结果27，你懂的。  如果按标准，21、24、25、27都是可能的结果，你可以自己写个编译器去实现结果24的那种。  https://blog.csdn.net/tsroad/article/details/49834261 那就是说，实际执行流程是顺序结构,如下：          k=(++a)+(++a)+(++a) [1]：k=(6+1=7)+(++a)+(++a) [2]：k=7+(7+1=8)+(++a) [3]：k=8+8+(++a) [4]：k=16+(8+1=9) [5]:   k=8+8+9 [6]:   k=25 结果不同原因：计算顺序问题。 原本以为你是个青铜，没想到你是个王者哈。 感谢大佬辛苦为我解惑。

出这种题的人都该送进监狱  写这种代码的人都该枪毙

自己看汇编去，不同编译器实现不一样 不要这么自以为是，要么你自己写个编译器解读为9+9+9 引用 10 楼 不灭的追求 的回复:[quote=引用 9 楼 niiiloc的回复:]日经序列点问题，未定义行为，有确切结果的都是错的 我们讨论的是这句话的问题。 自增运算符的计算。 其他定义什么的自己脑补，不做考虑。 不要想太多。 总结一下问题: 为什么是24（7+8+9）而不是27（9+9+9）？[/quote]

感觉书上的有问题，就是未定义行为吧


Question: C语言使用__FILE__只打印文件名

#include <string.h> //strrchr()函数所需头文件 //windows: #define filename(x) strrchr(x,'\\')?strrchr(x,'\\')+1:x //linux : #define filename(x) strrchr(x,'/')?strrchr(x,'/')+1:x printf( "filename:%s\n", filename( __FILE__ ) );

自己做字符串截取嘛 找到最后一个/或者\ 后面开始输出


Question: c语言学生成绩管理系统设计  要求实现录入功能用文件保存，浏览功能，查询功能，学生成绩信息的删除与修改

引用 楼主 宇越天穹的回复:初学c语言  有很多不懂的地方  有没有哪位可以帮我找一找错误   代码呢，哪里有问题，贴出来看看


Question: 字符串指针的一个小问题

小白表示看不懂，<<是表示什么

好好学习下，下午才知道的

怎么理解a指向a[0]，*a也指向a[0]，a是数组名，它的类型不是char**,而*a是char*

观望大神 同解

C语言中的指针，在内存中表现为什么呢？4个字节或8个字节的一个数据类型,这个里面存放的是地址，我个人认为这个指针是当初专门为了指向字符串设计的 char* a[] = {"hello","world","!!"};  //定义指针数组a，（也认为是a指向了一个连续存储的区域）存放3个指针，分别指向了3个字符串 char** p;//定义指向指针的指针p p = a;    //p与a指向同一块区域 cout << *p<<endl;//获取指针指向的内容，*p也就是*a，也就是a[0] cout << **p<<endl;//a[0][0]  指针可以转换为数组来思考，因为本身数组的首地址就是指针指向的位置

18楼最清楚，很直接的告诉了你各个指针的指向。其实你仔细想想也能像出来的，从最基础的开始想，比如char *a[]={};这个指针数组，你肯定能想到a[0],a[1],a[2]是什么吧，然后p又指向了数组a,你可以把a想象成普通数组，a代表数组的首地址，即a[0]，这个你肯定知道吧，所以p就指向的是a[0]。

a是存储字符串的首地址，*a不是指针而是a这个指针就是这个地址所指向的内容  就是内三个字符串

可以用输出语句把a，*a，p给输出出来，看看不就知道了

引用 29 楼 Alexander668 的回复：分两步去分析一下，先确定a是什么，再确定p是什么就好分析多了。首先a是一个字符串指针数组，*a指向字符串指针数组的第一个元素，&（*a）代表的则是数组首元素则p里面存放的是a的首元素，就是"Hello world"字符串指针地址。刚刚对于&(*a)的分析有问题，这个代表数组首元素地址，*p代表字符串指针，**p代表h

帮支持顶一下

用习惯，用多了就完全可以知道了

小生学习了。

如果是考题没得说了。若不是，又是C++何必又是char 又是指针的

个人理解： char *a[] = {"hello","world","!!"}; char **p; a里面存储的是a[0]的首地址，也就是RAM的地址(0x20000004) a[0]里面存储的是字符串"hello"的首地址 a[1]里面存储的是字符串"world"的首地址 a[2]里面存储的是字符串"!!"的首地址 *a相当于取a[0]里面的值，也就是"hello"的首地址 p = a; 所以*p里面的值与*a一样，是a[0]里面存储的地址（字符串“hello”的首地址） 如果用printf("*p = %s",*p);//因为%s要求输入的是地址，所以打印出来的就是 ：*p = hello **p就是在字符串"hello"的首地址进行取值操作。字符串首地址的第一个字符是'h' 如果用printf("**p = %c",**p);//那就是：**p = h 个人见解，不对的地方欢迎大家指正~

数组名也是数组的首地址，也就是这个数组名变量的内存存的是数组的首地址 a是个指针数组，按照上面数组名是数组的首地址，所以a的内存里存的是a[0]的地址 *a是个指针（char*指针），指针里存的也是地址，*a指向数组a的第一个元素的地址，也就是*a内存存的是a[0]的地址 a不是char**，是指针数组 (char*)[]，数组可以用指针来操作，所以(char*)*能操作(char*)[]

恩 对了 就是这样    其实 多用用就明白了

引用 10 楼 晴天mmei 的回复:好像有点明白了，我解释一遍，，你们看又没错。数组a其实就是一个字符串数组，a此时是数组名，就只指向了hello字符串的首地址(我们常常说指针指向一块内存，其实就是指向它的首地址，例如int i = 10; int* p =&i; p指向了i这个int变量的首地址)，a数组里面存的都是字符串指针。每个指针存的都是字符串的首地址。*a 就是取a所存地址对应的值，就是 “hello”了，p指向了a ，于是p也获取到了hello这个字符串的首地址，*p就是 “hello” 了。这样解释不知道有没有错，大神们，字有点多了 恩 对了 就是这样    其实 多用用就明白了


Question: 代码出错了

关于“加上逗号即使在输入时加逗号还是会出错”，几次测试后发现是我输入法的问题，我的输入法在不同环境下中英文切换是不同步的，导致我在写代码时用的是英文标点，运行输入时用的是中文标点，这才出了错。

排序问题，你可以试着去学一下sort()函数，会很有收获的

引用 1 楼 user-2 的回复：将scanf("%d,%d,%d",&a,&b,&c);  的格式改成 scanf("%d%d%d",&a,&b,&c);就行了，亲测是可以的我发现加上逗号即使在输入时加逗号还是会出错，而且此时回车不是换行输入而且输出结果，请问是哪里有问题？

引用 1 楼 user-2 的回复：将scanf("%d,%d,%d",&a,&b,&c);  的格式改成 scanf("%d%d%d",&a,&b,&c);就行了，亲测是可以的我刚才重新测试了一下发现两个格式都可以，好像是软件的问题，谢谢！


Question: 求解决

建议直接贴代码，图片不很清晰


Question: 求大神讲解，救救孩子吧！

如果m等于2或3，返回1；如果m小于2或是偶数，返回0；从3到m的奇数中，如果m能整除其中任何一个，返回0；以上情况之外的情况返回1。这个函数应该是判断m是否是质数的，返回1则为质数，返回0则不是质数。


Question: 很简单的关于链表的问题（求解答

在第一段代码中，请理解，当跳出while循环时，L的值为NULL，无法对其解引用操作。 第二段代码，怀疑有逻辑错误，第8行的作用是，将L的后继结点“删除”，也就说链表中将只剩下一个结点。


Question: C语言

一般自己写的用引号，不然用尖括号

要学会自己百度

你表面是看不出区别的，但是编译器在找头文件时如果你用<>它会默认先去系统库中找，而用“”编译器则会先到指定的文件找，找不到再回系统库找。简单说，就是用“”加在系统头文件上会增加编译器的工作量，而如果非系统头文件用<>则可能出现找不到头文件的错误

“”是代表目前正在编辑的文件路径下的头文件（和cpp文件一个目录下的头文件），一般用于自定义头文件  <> 是代表系统路径中的头文件，包括但不仅限于系统自带的头文件、添加到系统扫描路径中的第三方头文件，一般用于系统路径中的头文件  “”搜索顺序为：  当前文件所在路径--->系统路径  <> 搜索顺序为：  系统路径


Question: 逆序

谢谢老哥啊，懂了懂了

b=x/100    <===改成b=a/100，下同


Question: 期末考试题  不会-_-||跪求解答

这个是单片机吗？只需要电平改变的时候计数就好了嘛

用51就可以实现了。红外的原理应该是中间无阻挡，为高电平(或低电平)，此时计数，在显示喽


Question: 请问，时间复杂度为O(n!)和O(n^n)的算法是怎样的？

例如n张牌的洗牌：  算法一： for i:=1 to n  do swap(a[i], a[random(i,n)]) 时间复杂度是O(n!)  算法二： for i:=1 to n  do swap(a[i], a[random(1,n)]) 时间复杂度是O(n^n)


Question: 麻烦各位大佬帮我看看这段C代码，提示错误无法定位的外部函数，是怎么回事

第一次用，你看一下，应该是结了吧

引用 2 楼 weixin_44751917 的回复:[quote=引用 1 楼 儿童节的回复:]有问题的地方，标在图上了：   在你的基础上修改之后，代码如下：  #include <stdio.h> int main() {         int num, sd, td, hd;                           //定义三位数num,个位数sd,十位数td,百位数hd         for (num = 100; num < 1000; num++) //循环所有三位数         {                 hd = num / 100;                 //获取三位数字num百分位上的数字                 td = num / 10 % 10;            //获取三位数字num十分位上的数字                 sd = num % 10;            //获取三位数字num个位上的数字                 if (num == hd * hd * hd + td * td * td + sd * sd * sd) //水仙花数字的条件是什么                 {                         printf("水仙花数字:%d\n", num);                 }         }         return 0; }   Linux环境运行截图：   烦请及时结贴给分哈，谢谢！ 哈哈，这么尴尬的吗， 谢谢你[/quote]  不用谢！ 既然问题解决了，就请麻烦把帖子结了吧！ :)

引用 1 楼 儿童节的回复:有问题的地方，标在图上了：   在你的基础上修改之后，代码如下：  #include <stdio.h> int main() {         int num, sd, td, hd;                           //定义三位数num,个位数sd,十位数td,百位数hd         for (num = 100; num < 1000; num++) //循环所有三位数         {                 hd = num / 100;                 //获取三位数字num百分位上的数字                 td = num / 10 % 10;            //获取三位数字num十分位上的数字                 sd = num % 10;            //获取三位数字num个位上的数字                 if (num == hd * hd * hd + td * td * td + sd * sd * sd) //水仙花数字的条件是什么                 {                         printf("水仙花数字:%d\n", num);                 }         }         return 0; }   Linux环境运行截图：   烦请及时结贴给分哈，谢谢！ 哈哈，这么尴尬的吗， 谢谢你


Question: C++替换字符串的问题

自带的基础函数都是经过优化很多遍的，一般比你自己写的效率要高得多的多

无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

为什么replace1需要反复申请空间呢？string和vector的自动扩容都是有一定算法的，比如2倍策略，根据实际字符串长度，可能扩一次就够用了。 而replace2首先申请一个vector,进行各种拷贝最后返回时再调用operator=又一次申请内存加拷贝。两次申请内存妥妥的，代码量还多。


Question: C语言结构体变量算某天是一年的第几天找不到错误处

我现在用手机，没有结帖选项，明天用电脑试下

引用 10 楼 weixin_44751349 的回复:[quote=引用 9 楼 儿童节的回复:]额？ 为啥发了两张一样的问题帖呢？  刚刚在那个帖子里回复了，那这里也顺便回复一下吧。    欢迎结贴给分，谢谢。  ：） 谢谢你!好多错误啊，怎么结帖给分?[/quote]  不用客气，大家一起学习提高。 结贴是在底下，回复框的右上角那里，有「结贴」两个字。点了应该就可以吧？ 我也还没结过，只是看到过。

引用 9 楼 儿童节的回复:额？ 为啥发了两张一样的问题帖呢？  刚刚在那个帖子里回复了，那这里也顺便回复一下吧。    欢迎结贴给分，谢谢。  ：） 谢谢你!好多错误啊，怎么结帖给分?

(date1.month%4 == 0 & date1.month%100 != 0)  --->  (date1.month%4 == 0 && date1.month%100 != 0))  引用 6 楼 weixin_44751349 的回复:输入的时候格式没错呀

scanf输入格式控制中，尽量不要加分隔符，如果非要加，要在终端中输入一模一样的格式才能将对应数值准确赋予对应变量。默认为空格分割。

d,%d,%d表明输入的时候要有逗号，例如这样1,12,12

引用 1 楼 user-5的回复:if(sum=0)printf("ERROR!"); ==写成= 给sum赋值了 学会调试很重要 改了之后一直是第一天，为什么呢？

编译运行了下没有问题： #include<stdio.h> int main(){ int i,sum=0; int d[12]={31,29,31,30,31,30,31,31,30,31,30,31}; struct date{ int year; int month; int day;}date1; printf("Please input the date:\n"); scanf("%d,%d,%d",&date1.year,&date1.month,&date1.day); if(date1.month%400==0||(date1.month%4==0&date1.month%100!=0)) d[1]=28; for(i=0;i<date1.month-1;i++) sum=sum+d[i];     sum=sum+date1.day;     if(sum==0)printf("ERROR!");     else printf("It is %d day.\n",sum);     return 0; }

引用 3 楼 AlbertS的回复:d,%d,%d表明输入的时候要有逗号，例如这样1,12,12 输入的时候格式没错呀


Question: 读入句子程序，如何读入省略号？

再加个计数器，统计句号连续出现的次数？大于1就当作省略号处理


Question: 求教，从键盘中输入三个整数a,b,c,将他们按照降序输出，我打的哪里错了？为什么出不来结果？

交换没有问题    你检查一下你的输入和输出函数。标点什么的...

建议加一条打印信息，也叫调试信息，就是在scanf后面加一条把a, b, c的值都打出来，这样可以判定是不是输入的格式导致的出错～  后面的交换没什么问题，所以现在还是怀疑是输入的地方出了问题。～

建议scanf的%d和%d之间用空格隔开

谢谢各位的帮助！！！

scanf里，%d之间你是用英文逗号隔开的，因此你输入的时候整数之间也要用英文逗号隔开

输入的时候分隔符与scanf中的保持一致，用英文下的逗号

引用 1 楼 user-6的回复:自己跟踪调适下不全清楚了吗。。 调试过了还是不会改啊

自己跟踪调适下不全清楚了吗。。


Question: 菜鸟找大佬求解

引用 1 楼 niiiloc的回复:为什么要free(t) 你需要一次删除两个节点么？ 谢谢，原来如此呀，我以为只是将指针释放了

为什么要free(t) 你需要一次删除两个节点么？


Question: 有大佬帮我看看问题嘛，急

代码里面的waring太多了，出问题很正常。先把warning去了再编。

引用 2 楼 hanxb的回复:struct Student *next;  应该 放在 结构体的开头， 好处你以后会懂的。  struct Student *t = list, *in=t;  ?  为何不写成  *t= list, *in= list;   代码越明了越好.  printf( "%s,%s", ....) 没问题, 但你确认 scanf_s( "%s,%s", ... ) 没问题 ？ 逗号能分断，无需空格分断 ？ 能详细说一下scanf_s里面的问题吗


Question: 最小公约数

这样应该是为了少做几次循环，在逻辑层面没什么特殊意义

引用 4 楼 单眼皮的小健的回复:噢，不对，看错了，以为你是递归，你这个纯属是穷举，从最小那个数开始往下穷举，这是正常的逻辑，当然，你从最大那个数开始往下穷举依然可以，只是多此一举，比如2和1000000，如果我从2开始，就直接得出2，如果你从1000000开始，你浪费了多少时间 谢谢老哥，知道了，感谢。。。

引用 3 楼 user-2的回复:这样应该是为了少做几次循环，在逻辑层面没什么特殊意义 谢谢哥，我知道了。谢谢谢谢

那这个程序是谁写的你去问谁吧，谁知道他怎么想的

对的，不转换结果也是对的，因为当第一个数大于第二个数的时候，会自动进行一次转换，你可以自己手动执行一下这个函数，所以后面就理所当然是第一个数小于第二个数了，因此一开始并不需要转换，这是一个很奇妙的事情


Question: C++关于用数组进行大小排列的问题跪求大神解答

引用 5 楼 早起的鸟儿有砖搬 的回复：引用 3 楼 单眼皮的小健 的回复:你为什么要在select函数里面定义一个array数组，你现在只是在操作这个局部数组array，而不是你的函数参数里的arrray指针，在select函数中把array定义删除，把函数参数类型名arrray改成array（多打了一个r）谢谢谢谢老哥！结贴....大家一起赚积分

话说现在都流行把函数申明写在main函数里面了吗，在好多地方看到这么写

把你int array[5]去掉

引用 2 楼 user-2 的回复:话说现在都流行把函数申明写在main函数里面了吗，在好多地方看到这么写初学c++  我看谭浩强老师的红皮书里这么写的


Question: 对于双重循环以不同变量为次数，时间复杂度该怎么计算？

能解释一下为什么用乘法而不是(m+n)吗

O(m*n)，书写上比较正规

乘法法则，假设第一重循环n次，第二重循环m次，那么时间复杂度就是O（nm）

引用 2 楼 六道佩恩 的回复：[quote=引用 1 楼 单眼皮的小健 的回复:] 乘法法则，假设第一重循环n次，第二重循环m次，那么时间复杂度就是O（nm） 写作O(n*m)或O(n·m)可以吗？[/quote]这不是重点，乘号可以省略可以写，一般写上比较好

引用 1 楼 单眼皮的小健 的回复:乘法法则，假设第一重循环n次，第二重循环m次，那么时间复杂度就是O（nm） 写作O(n*m)或O(n·m)可以吗？


Question: C语言初学者求助


Question: 求助undefined reference to `usbInterruptIsReady'编译错误

包含了文件<usbdrv.h>

包含头文件了么？


Question: 分数阶小波变换

请问可以讨论一下分数阶小波变换吗？请问还在做吗？联系方式QQ1027984004谢谢

求分数阶小波变换源代码

算法存在一些问题


Question: C语言 输入一组数字，利用交换法将数字倒序

你想问什么？


Question: 有没有大佬解释一下

是CPU，你这段a=2；的代码最终会被翻译成一串二进制数并存入外存，当这段程序运行的时候，就把这串二进制数放入内存，CPU就执行a=2这个语句，随后会在内存中分配一个空间并取名为a，接下来CPU把这段内存填充为2

这种态度很好，多问问为什么，往往会有意外收获。其实我是这么理解的，并不是说谁把2赋给了a，而是说编程的人或者cpu告诉了a，你现在应该等于2，它就在自己的物理地址上写上了一些符号，于是，它就暂时的等于2了，等下一次你告诉它需要改变的时候，它在自己改变。

嗯，我知道这个 但是编程是不是也得从程序员的角度来思考问题 比如我看到一段代码a=1;  可不可以理解为是写这段代码的人把1赋给了a

从内存来看，变量a在内存上有几个字节的空间，a=2就是把2放进这几个字节空间。 从机器码来看，打个比方，a=2被翻译成了010111011011000000010（随便举例的，不要去和实际的机器码对应），0101表示把一个数放进某个内存空间，110110110就是a的内存空间，00000010就是整数2，CPU翻译这个机器码的时候，就会把整数2送进110110110这个地址空间。 如果是a=b这种，就是在内存空间取值去赋给另一块空间。


Question: 等大佬解答！！！

引用 2 楼 六道佩恩的回复:是rand()%51，rand( )是在调用一个叫rand的函数，这个函数会得出一个随机的整数，%就是求余，rand()%51就是“随机整数%51”,最后能得出一个51以内的随机正整数 大佬大佬👏👏感谢感谢

给随机数圈定范围吧。。。


Question: 麻烦看看是什么问题

打字打错了呗，倒数第三行的printf打成了pritnf


Question: fwrite写int数组里面包含26，然后读到这里被当成eof

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

读二进制文件用feof替代


Question: 【求助】C语言为什么给char类型变量赋值中文输出乱码

谢谢各位的解答

char a[10]; strcpy(a, "你好");

赋值对象不一样哦


Question: 大佬求解 运行出来无限循环而且结果不对

引用 10 楼 儿童节 的回复:说这么多，就想证明我的回答全是靠猜呗？  扣上这顶帽子，然后再把我批判一番？呵呵，耐衣服！ 我的回答到底对不对，任何人都可以试一试就知道了。 倒是你针对代码问题，不分析代码，反而跑来给别人的回答挑刺、给别人扣帽子，这种操作也是匪夷所思。 说实话，要不是到周末了，还真没这么多闲功夫陪你尬聊！ Talk is Cheap. Show me your code. 诚不我欺！那么题主的错误是什么

引用 9 楼 lin5161678 的回复:[quote=引用 8 楼 儿童节 的回复:] 进入死循环的bug难道不存在么？ 其实我想说，绕了一大圈了，指出拼写错误为什么就多余了呢？ 而且我回答的是它的等号是中文等号，没说什么逗号哟！ 所以 说了半天你连答主遇到什么错误都没搞清楚么? 你这回答才是全靠猜吧[/quote] 说这么多，就想证明我的回答全是靠猜呗？  扣上这顶帽子，然后再把我批判一番？呵呵，耐衣服！ 我的回答到底对不对，任何人都可以试一试就知道了。 倒是你针对代码问题，不分析代码，反而跑来给别人的回答挑刺、给别人扣帽子，这种操作也是匪夷所思。 说实话，要不是到周末了，还真没这么多闲功夫陪你尬聊！ Talk is Cheap. Show me your code. 诚不我欺！

引用 8 楼 儿童节 的回复:进入死循环的bug难道不存在么？ 其实我想说，绕了一大圈了，指出拼写错误为什么就多余了呢？ 而且我回答的是它的等号是中文等号，没说什么逗号哟！ 所以 说了半天你连答主遇到什么错误都没搞清楚么? 你这回答才是全靠猜吧

引用 7 楼 lin5161678 的回复:[quote=引用 6 楼 儿童节 的回复:]  是的，刚刚直接复制、粘贴提问的代码，在编译的时候就是通不过。所以，提问者的描述是不是完全真实、准确，恐怕要打问号。 但是要回答这个提问，还是得针对它的原始代码来，所以才无视了它说能运行的情况，而把原始代码的所有错误都列出来了。 回答这个提问 应该是针对答主IDE里面的原始代码  至于答主写在帖子里面的代码 觉得不舒服就提一下 觉得无所谓无视也行 当成一个错误提出来就多余了 答主会看到他的代码的确是英文逗号 对你的解答一头雾水[/quote] 这就难说了。 提问者贴出了代码，可没有把IDE放上来啊！这去哪儿看它的IDE？靠脑补么？ 有些偶然的情况下，有些编译器无视拼写错误，进入死循环的bug难道不存在么？ 其实我想说，绕了一大圈了，指出拼写错误为什么就多余了呢？ 而且我回答的是它的等号是中文等号，没说什么逗号哟！

引用 6 楼 儿童节 的回复:是的，刚刚直接复制、粘贴提问的代码，在编译的时候就是通不过。所以，提问者的描述是不是完全真实、准确，恐怕要打问号。 但是要回答这个提问，还是得针对它的原始代码来，所以才无视了它说能运行的情况，而把原始代码的所有错误都列出来了。 回答这个提问 应该是针对答主IDE里面的原始代码  至于答主写在帖子里面的代码 觉得不舒服就提一下 觉得无所谓无视也行 当成一个错误提出来就多余了 答主会看到他的代码的确是英文逗号 对你的解答一头雾水

引用 5 楼 lin5161678 的回复:[quote=引用 4 楼 儿童节 的回复:] [quote=引用 3 楼 lin5161678 的回复:] [quote=引用 1 楼 儿童节 的回复:] （1）两个等号都是中文的等号，应该改为英文半角的等号。 （2）while里面的条件表达式，改为「scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2) == 4」。已经在运行了就不用谈语法错误的情况了[/quote] 运行出来的死循环的原因总要找出来吧。拼写错误、语法错误没有高低贵贱之分。[/quote]出现拼写错误 语法错误 直接死在编译阶段 exe都出不来 根本无法到达运行阶段 [/quote] 是的，刚刚直接复制、粘贴提问的代码，在编译的时候就是通不过。所以，提问者的描述是不是完全真实、准确，恐怕要打问号。 但是要回答这个提问，还是得针对它的原始代码来，所以才无视了它说能运行的情况，而把原始代码的所有错误都列出来了。

引用 4 楼 儿童节 的回复:[quote=引用 3 楼 lin5161678 的回复:] [quote=引用 1 楼 儿童节 的回复:] （1）两个等号都是中文的等号，应该改为英文半角的等号。 （2）while里面的条件表达式，改为「scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2) == 4」。已经在运行了就不用谈语法错误的情况了[/quote] 运行出来的死循环的原因总要找出来吧。拼写错误、语法错误没有高低贵贱之分。[/quote]出现拼写错误 语法错误 直接死在编译阶段 exe都出不来 根本无法到达运行阶段

引用 3 楼 lin5161678 的回复:[quote=引用 1 楼 儿童节 的回复:] （1）两个等号都是中文的等号，应该改为英文半角的等号。 （2）while里面的条件表达式，改为「scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2) == 4」。已经在运行了就不用谈语法错误的情况了[/quote] 运行出来的死循环的原因总要找出来吧。拼写错误、语法错误没有高低贵贱之分。

引用 1 楼 儿童节 的回复:（1）两个等号都是中文的等号，应该改为英文半角的等号。 （2）while里面的条件表达式，改为「scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2) == 4」。已经在运行了就不用谈语法错误的情况了

你输入了什么


Question: scanf语句为什么会跳过啊，希望大佬能给解释下！！！

找到了，只需加上freopen("CON","r",stdin)回到控制台输入就行

如果想再次输入关键字进行查找并应该咋办啊

scanf("%lf%lf",&x,&y); --> scanf("%lf,%lf",&x,&y);

你都freopen 还需要什么输入 in.txt 就是全部输入了


Question: 【紧急求助】C语言-给结构数组分配动态空间

引用 7 楼 weixin_44741435 的回复:引用 6 楼 niiiloc 的回复：那就说明你的定位方向有偏差，确定10000个单词够存储了么？确定是足够的 但是可能是程序本身的问题，电脑完全跑不动了哭 还是谢谢各位大佬了

引用 6 楼 niiiloc 的回复：那就说明你的定位方向有偏差，确定10000个单词够存储了么？重新做了尝试！发现的确是10000不够这个问题！真的很感谢各位大佬！

那就说明你的定位方向有偏差，确定10000个单词够存储了么？

引用 3 楼 weixin_44741435 的回复:[quote=引用 1 楼 niiiloc 的回复：]wordnum *work = malloc(sizeof(wordnum) * 10000); 用法上和栈内存没啥区别请问一下：主程序内比如word[k].num=a是不是要改成&word[k].num=a呢？之后程序末尾是不是要free word呢？谢谢！[/quote]不用&，程序结束之前，或者你不用了，free就可以了

引用 1 楼 niiiloc 的回复：wordnum *work = malloc(sizeof(wordnum) * 10000); 用法上和栈内存没啥区别请问一下：主程序内比如word[k].num=a是不是要改成&word[k].num=a呢？之后程序末尾是不是要free word呢？谢谢！

1.数组不大的情况下，可以放在栈上， 通常单个进程，栈也就1M~4M。 如果数据量比较大，就需要在堆上进行动态申请  2.栈上的变量不需要释放 堆上分配的空间使用完成后需要自行free， 否则会出现内存泄露

引用 4 楼 qq_42307333 的回复:[quote=引用 3 楼 weixin_44741435 的回复:] [quote=引用 1 楼 niiiloc 的回复：]wordnum *work = malloc(sizeof(wordnum) * 10000); 用法上和栈内存没啥区别请问一下：主程序内比如word[k].num=a是不是要改成&word[k].num=a呢？之后程序末尾是不是要free word呢？谢谢！[/quote]不用&，程序结束之前，或者你不用了，free就可以了[/quote]  改了之后还是报错退出了哭！ 哪位大佬可以帮忙看一下代码吗？紧急求救！！  #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <malloc.h> #define INWORD 1 /*正在单词中*/ #define OUTWORD 0 /*不在单词中*/  FILE *fp; FILE *fo;  struct wordCount { 	char str[40]; /*单词*/ 	int num; /*个数*/  }; /*使用结构类型定义单词出现的频率*/  int main() { 	char str1; /*str1用以从txt中取得字符*/  	int n=0, i=-1; /*n用来对单词计数，i用来对单词内的字母计数*/ 	int state; /*使用INWORD与OUTWORD表示攫取的字符是否在单词内的状态*/  	int a;  	int c,d; /*定义c、d用于冒泡排序*/ 	wordCount *word;  	word=(wordCount*)malloc(sizeof(wordCount*)*10000);  	if ((fp=fopen("input.txt","r"))==NULL) 	{ 		printf("无法打开文件！\n"); 		return 0; 	 }   	while ((str1=fgetc(fp))!=EOF) 	{ 		if (isalpha(str1)) 		{ 			str1=tolower(str1); 			word[n].str[++i]=str1; 			word[n].num=1; 			state=INWORD;                                        		} /*若检测为英文字母，则状态=在单词内，并进行单词的计数和攫取*/  		else if (state==INWORD) 		{ 			if (str1!=39) 			{ 				word[n].str[i+1]='\0'; 				n++; 				i=-1; 				state=OUTWORD;  				for (a=0;a<n-1;a++) 				{ 					if(!strcmp(word[a].str,word[n-1].str)) 					{ 						word[a].num+=1; 						n-=1; 					} 				} 			} 		} /*若非英文字母，则状态=在单词外，计数器i归到初始值-1*/  	} 	fclose(fp);  	wordCount temp; 	for (c=0; c<n-1; c++) 	{ 		for (d=n-1; d>c; d--) 		{ 			if (word[d].num<word[d-1].num) 			{ 				temp=word[d]; 				word[d]=word[d-1]; 				word[d-1]=temp; 			} 		} 	} /*进行单词个数由少到多的排序（书P72）*/  	if ((fo=fopen("output.txt","w")) == NULL)  	{         printf("无法打开文件！\n");     }  	else  	{         for (a=0; a<n;a++) 		{ 			fprintf(fo,"%-10s%10d\n",word[a].str,word[a].num); 		} 		printf("\n");     }     fclose(fo);  	return 0; }