Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 编程记不住函数怎么办

回复:
user: user-1
content: 找一个好的编辑器，有渐进提示的那种。我用的VS就很好用。

user: user-2
content: 在吗，请问之前象棋棋谱的那个问题解决了吗

user: user-3
content: 无他，但手熟尔

user: user-0
content: 那么当你遇到明确需求，不是产品层面的需求，而是代码层面要解决很具体的问题。 举个简单的例子。就是从元素是字符串的二维矩阵中找出匹配的字符串，并返回他在矩阵的坐标。你肯定知道答案。我们假设你不知道答案。你怎么知道是否存在一个函数可以一行代码解决问题？如果存在，怎么找到这样的函数？ 如果你用的是一个比较冷门的语言呢？？？？？？？？？？？？

user: user-3
content: 所以需要熟，基础语言特性和常用库函数都记住了，你自然就知道要用那个

user: user-4
content: 动脑，走心。不要老想着走捷径。难道做厨子就容易了？同样有很多菜谱摆在那需要记住，同样是从点个火都手忙脚乱的状态学起。考驾照也是啊。同样要背科目一啊。

user: user-0
content: 所以你是怎么记住的？

user: user-5
content: 记不住有啥，不是有书，有网络吗。

user: user-0
content: 你用搜索引擎搜索，每次都能立刻找到需要的函数及其使用方法？

user: user-5
content: 不是吗，搜着搜着，就记住了。

user: user-0
content: 要是搜索不到呢？

user: user-6
content: 会百度就行

user: user-0
content: 无论是百度还是404搜索引擎。有时你想要实现的功能不一定容易用简短的语言描述。或者搜出的结果与你想要实现的功能并不匹配

user: user-6
content: 如果很容易就搜出任何问题的确切答案，那人活着还有什么意义？
user-0 提问: 正在打人生中的第一个C语言代码，求大佬告知哪里错了，为什么vs code显示出红色字体

回复:
user: user-1
content: 这个代码每本书上都有，对照一下就是。

user: user-2
content: #include <stdio.h> int main() {     printf("hellow world.\n");     return 0; }

user: user-0
content: 感谢

user: user-3
content: printf 和 return 两条语句后面忘写 ; 分号了

user: user-0
content: 感谢大佬，我去改一下

user: user-0
content: 大佬，我再问一下，我改完之后，他还是失败了，最后，显示：生成已完成，但出现错误，终端进程启动失败（退出代码：-1）    请问这个怎末解决？

user: user-3
content: return 0;
user-0 提问: 求助大佬，思路好像不对，但是又找不出问题

回复:
user: user-1
content: 如果有相同的，记录输出第一次出现的子序列,供参考： #include<stdio.h> #include<string.h>  void findGC(char str[],int n) {     int i,j,a=0,len,max_radio=0,count_radio;     len=strlen(str);     //max_radio=0;     for(i=0;i<len;i+=n)     {         count_radio=0;         for(j=i;j<i+n;j++)         {             if(str[j]=='G'||str[j]=='C')                count_radio++;         }         if(count_radio>max_radio)         {             max_radio=count_radio;             a=i;         }     }     for(i=a;i<a+n;i++)        printf("%c",str[i]); } int main() {     char dna[100]={0};     int n;     printf("请输入子序列长度：\n");     scanf("%d",&n);     printf("请输入序列：\n");     getchar();     fgets(dna,sizeof(dna),stdin);     findGC(dna,n);     return 0; }

user: user-0
content: 正确了，大佬，请问在fgets前面加个getchar(），是什么含义呢？作用是什么？

user: user-1
content: 吸收输入缓冲区中残留的字符，和赵老师的rewind (stdin); 类似的作用。

user: user-2
content: //一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例（定义为GC-Ratio）是序列中G和C两个字母的总的出现次数除以总的字母数目（也就是序列长度）。 //在基因工程中，这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。 //给定一个很长的DNA序列，以及要求的最小子序列长度，研究人员经常会需要在其中找出GC-Ratio最高的子序列。 #include<stdio.h> #include<string.h> #define MAXLEN 100 void findGC(char str[],int n) {     int i,j,a,len,max_radio,count_radio;      len=strlen(str);     max_radio=0;     for (i=0;i<len-n;i++) {         count_radio=0;         for (j=i;j<i+n;j++) {             if (str[j]=='G'||str[j]=='C')                count_radio++;         }         if (count_radio>max_radio) {             max_radio=count_radio;         }     }     printf("GC-Ratio最高的子序列：\n");     for (i=0;i<len-n;i++) {         count_radio=0;         for (j=i;j<i+n;j++) {             if (str[j]=='G'||str[j]=='C')                count_radio++;         }         if (count_radio==max_radio) {             for (j=0;j<i;j++) printf(" ");             for (j=i;j<i+n;j++) printf("%c",str[j]);             printf("\n");         }     } } int main() {     char dna[MAXLEN];     int n;      printf("请输入子序列长度：\n");     scanf("%d",&n);     printf("请输入序列：\n");     rewind(stdin);     fgets(dna,MAXLEN-1,stdin);     if ('\n'==dna[strlen(dna)-1]) dna[strlen(dna)-1]=0;     findGC(dna,n);     return 0; } //请输入子序列长度： //4 //请输入序列： //ACGTACGTACGTACGTACGTACGT //GC-Ratio最高的子序列： //ACGT // CGTA //  GTAC //   TACG //    ACGT //     CGTA //      GTAC //       TACG //        ACGT //         CGTA //          GTAC //           TACG //            ACGT //             CGTA //              GTAC //               TACG //                ACGT //                 CGTA //                  GTAC //                   TACG //

user: user-0
content: 大佬，我运行后还是输入n的值，程序就直接结束了

user: user-2
content: 要么你的回车键坏了，要么你运行的不是我这段代码生成的exe
user-0 提问: 请问怎么隐藏命令行窗口？

回复:
user: user-1
content: WinExec("xxx.exe",SW_HIDE);

user: user-0
content: WinExec该函数只提供对16位机子的兼容，这个兼容性太差了吧？

user: user-1
content: 反正我用这个函数从winxp到win10都能用

user: user-0
content: 这个只能在Windows平台用。如果是跨平台的，比如Linux、MacOS，那该如何处理呢？
user-0 提问: 在开发HTTP服务器时，文件读取重复，且有乱码

回复:
user: user-1
content: 不要把fopen("...","...");fscanf,fprintf,fgets,fgetc,fputc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待和fopen("...","...b");fseek,ftell,fread,fwrite,fscanf,fprintf,fgets,fgetc,fputc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待弄混了
user-0 提问: 用宏定义出现符号错误如何解决？

回复:
user: user-1
content: 能给我个软件吗，我想学C 我的邮箱1225514766qq

user: user-1
content: 能给我个软件吗，我想学c

user: user-2
content: Visual C++ 2010 Express简体中文版 http://pan.baidu.com/s/1bnwRVLt

user: user-3
content: #define ROW 3#define COL 3最后没有 ';'号

user: user-0
content: 嗯嗯，解决了，谢谢。
user-0 提问: 64字节大小的二进制文件在16进制下打开显示2行，怎么显示4行？

回复:
user: user-0
content: 【已解决】将十六进制字符串直接转为uint8_t数组，再写入文件

user: user-1
content: 能给我个软件吗，我想学C 我的邮箱1225514766qq

user: user-0
content: 可以使用Clion，下载地址：https://www.jetbrains.com/clion/

user: user-2
content: typedef unsigned char uint8_t;//确保uint8_t的定义是一个字节 for(...) {   line.data[i] = ret; //请确保i在for循环中每次加1   }

user: user-2
content: 仅供参考： #include <string.h> FILE *f; char buffer[4096]; int r,a; void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } } int main(int argc,char **argv) {     if (argc<2) {         fprintf(stderr,"Usage: %s filename.ext\n",argv[0]);         return 2;     }     f=fopen(argv[1],"rb");     if (NULL==f) {         fprintf(stderr,"Can not open file [%s]!\n",argv[1]);         return 1;     }     a=0;     while (1) {         r=fread(buffer,1,4096,f);         HexDump(buffer,r,a);         a+=r;         if (r<4096) break;     }     fclose(f);     return 0; }

user: user-0
content: 赵老师，我现在的问题是写入文件格式错误，格式应该是 01 02 03 04..., 但实际写入是 01 00 02 00 03 00 04 00...  ，这该如何解决呢？  写入的核心代码是： strncpy(binarys, line+i, 2);//读取十六进制  binarys[2] = '\0';   uint8_t  ret = convert(binarys);//十六进制转uint8_t  dataLine1.data[i] = ret;  难道是这行代码：  binarys[2] = '\0';  造成的吗？

user: user-3
content: 二进制文件本身没有行的概念。二进制文件是个字节流，您喜欢怎么显示就写代码把它摆成什么姿势好了。

user: user-0
content: 我现在遇到的问题是：同样大小的文件（64字节），使用编辑器在十六进制下，别人的显示是4行，我的显示是两行，导致我保存的文件，别人无法解析。我想知道的是这个该怎么解决呢？写入文件时，该怎么转换？

user: user-3
content: 我对猜测其实没有兴趣。 话又说回来了，我首先猜测的是因为您的显示器比别人的大。

user: user-0
content: 我使用WinHex打开，应该是01 02 03 04....这种格式的，但是实际结果是01 00 02 00 03 00 04 00...
user-0 提问: 为什么定义了一个指针，printf就不输出了？？

回复:
user: user-1
content: p = new Node;   指针只有在new()之后才向系统申请内存，在内存中这时才存在struct Node结构体的东西，因为你没new()指针，这时指针（32位或64位)指向的是一个随机的野地址。

user: user-2
content: Node* p = new Node;.....这种才是王道

user: user-2
content: Node p;p.date = 3;printf("%d\n",p.date);是date还是data？

user: user-3
content: p没有申请内存，其初值是内存中栈区原来的垃圾随机值，然后你给其date字段赋值3，就会往这个垃圾随机值对应的地址处写3，操作系统发现了这种非法行为，中断当前程序的执行。
user-0 提问: [Error] ld returned 1 exit status和undefined reference to `sa(int)'出现怎么错了？怎么解决的？求哥哥姐姐们指教

回复:
user: user-1
content: 修改完善如下，供参考对照： #include<stdio.h> #define N 2 #define M 5  float o[N];  int main() {     void  sa(int [][M]);     void  ia(int [][M]);     void  find(int [][M]);//float find(float);     void  fun();          //float fun();     int   a[N][M],i,j;      printf("请输入所有学生各门课程分数：\n");     for(i=0;i<N;i++)     {         printf("输入学号%d学生的成绩：\n",i+1);         for(j=0;j<M;j++)         {             scanf("%d",&a[i][j]);         }     }     sa(a);  //sa(a[N][M]);     ia(a);  //ia(a[N][M]);     find(a);//find(a[N][M]);     fun();        return 0; }  void sa(int a[][M]) {     int i,j,s;     printf("每个学生的平均成绩依次为：\n");     for(i=0;i<N;i++)     {         for(j=0,s=0;j<M;j++)         {             s+=a[i][j];         }         o[i]=s/M;         printf("%f    ",o[i]);     }     printf("\n"); }  void ia(int a[][M]) {     int i,j;     float s;     printf("每门课的平均成绩为：\n");     for(j=0;j<M;j++)     {         for(i=0,s=0;i<N;i++)         {             s+=a[i][j];         }         printf("%f    ",s/N);     }     printf("\n"); }  void  find(int a[][M]) {     int i,j,m,n;     for(i=0;i<N;i++)     {         for(j=0;j<M-1;j++)         {             if(a[i][j]>a[i][j+1])             {                 m=i;                 n=j;             }             else             {                 m=i;                 n=j+1;             }         }         printf("所有分数中最高的学生为%d，相应的课程为课程%d。\n",m,n);     } }  void fun() {     int i;     float f=0,s=0;     for(i=0;i<N;i++)     {         f+=o[i]*o[i];     }     s=f/N-(f*f)/(N*N);     printf("平均方差为：%f\n",s); }

user: user-0
content: 谢谢哥

user: user-2
content: 把main函数中的     sa(a[N][M]);     ia(a[N][M]);     find(a[N][M]);  改为     sa(a);     ia(a);     find(a);  引用的时候用a[M][N]变成引用a数组的第M行第N列元素了，而sa、ia、find需要的是数组，并非数组元素，所以编译器说你没定义sa(int)、ia(int)、find（int)。

user: user-0
content: 欧克，谢谢您
user-0 提问: 谭浩强老师第四版学习中遇到了一个问题（chap11链表）

回复:
user: user-1
content: 能给我个软件吗，我想学C 我的邮箱1225514766qq

user: user-2
content: if(i=0)  有了这句，不会只自行一次，而是执行第一次就可能出现段错误了，pf是一个野指针；没有初始化

user: user-3
content: 第21行：if(i=0) 错误，应该是：if(i==0)

user: user-0
content: 感谢感谢，matlab用多了，总是不注意这些
user-0 提问: 请问谁有VS2010版的，求发，谢谢！

回复:
user: user-0
content: 谢谢

user: user-1
content: 我正在下vs2019。

user: user-2
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-3
content: https://msdn.itellyou.cn/开发人员工具
user-0 提问: 求软件，我是新来的请大家多多指教！

回复:
user: user-1
content: 能给我个软件吗，我想学C 我的邮箱1225514766qq

user: user-2
content: Eclipse CDT

user: user-3
content: linux + vim+gcc/g++

user: user-4
content: vs2017 vs2019 vscode

user: user-5
content: vs2017vim+gcc

user: user-0
content: 谢谢

user: user-6
content: VScode

user: user-0
content: 谢谢
user-0 提问: C语言中如何处理0x00?

回复:
user: user-1
content: 仅供参考： #include <string.h> FILE *f; char buffer[4096]; int r,a; void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } } int main(int argc,char **argv) {     if (argc<2) {         fprintf(stderr,"Usage: %s filename.ext\n",argv[0]);         return 2;     }     f=fopen(argv[1],"rb");     if (NULL==f) {         fprintf(stderr,"Can not open file [%s]!\n",argv[1]);         return 1;     }     a=0;     while (1) {         r=fread(buffer,1,4096,f);         HexDump(buffer,r,a);         a+=r;         if (r<4096) break;     }     fclose(f);     return 0; }

user: user-0
content: 非常感谢赵老师的解答^_^

user: user-2
content: fscanf %x，使用长度再做一个循环；

user: user-3
content: 按二进制读取，而不是按文本读取
user-0 提问: 用户态和内核态的通讯，ioctrl和copy_from_user,什么场景使用

回复:
user: user-1
content: 看看ioctrl的定义和实现，有的只需要少量的参数，有的需要多个参数。一般来说，需要多个参数，而且参数数据较大时，很有可能需要copy_from_user。

user: user-2
content: 要看对应的调用要不要求读写的内存必须是内核内存管理模块管理下的内存。我猜
user-0 提问: 将其中连续的多个空格用一个空格代替 ,用while遍历空格，最后只输出一个空格，如下代码为何不可？

回复:
user: user-1
content: putchar->printf

user: user-0
content: 对，无法输出空格，并且应该赋值号，不应该为等号

user: user-2
content: 你putchar(c);只有在c != ' '的情况下才执行，这样就一次也不输出空格了。
user-0 提问: 求求各位大神指点错误，如何改错？（Dev c++软件）

回复:
user: user-1
content: 第136行，文件保存：ofstream outfile(cust[i].name+".txt",ios::out);      修改为：               ofstream outfile((cust[i].name+".txt").c_str(),ios::out);
user-0 提问: 关于C语言全局变量问题

回复:
user: user-1
content: 你不是说第二个（项目4）makefile可以执行吗。你的makefile中没有a.c和b.c的编译规则，最后链接也没有包含a.o和b.o。

user: user-2
content: 不太懂makefile ,b.o应该不用写，另外b.o依赖的是b.h，而不是b.c
user-0 提问: 这个程序输入时只能输入两串数据，之后就会直接结束，现在知道错误在调用write()函数中，但是不知道具体错误，也不知道怎么改。

回复:
user: user-1
content: 修改如下，供参考：  #include<stdio.h> #include<stdlib.h> #include<string.h>  struct Signal {     char   Name[10];     int    KB;     float  Pos;     int    Type;     struct Signal *next,*front; }; int n=0,i=0; char ch=0;  void write(struct Signal*head);  int main() {         struct Signal *head=NULL;         struct Signal *p1,*p2;         while(1)         {               p1=(struct Signal*)malloc(sizeof(struct Signal));               if(!p1)  return 1;               p1->next=NULL;               printf("请输入第%d架信号机的信息\n",++i);               scanf("%s",p1->Name);               if(strcmp(p1->Name,"#")==0)  break; //"#"结束输入               scanf("%d %f %d",&p1->KB,&p1->Pos,&p1->Type);               n++;               if(n==1){                        head=p1;               }else{                        p2->next=p1;               }               p2=p1;               //write(head);         }         free(p1);         write(head);                  return 0;//return (head); }  void write(struct Signal*head) {         struct Signal*p;         FILE *fp;         int  i=0 ;         p=head;         if((fp=fopen("ABC.txt","w+"))==NULL)         {                printf("不能打开文件\n");                return;         }         while(p!=NULL)         {                fprintf(fp,"%5s\t%15d\t%15g\t%15d\n",p->Name,p->KB,p->Pos,p->Type);                p=p->next;                i++;         }         fprintf(fp,"-------------------------------------------------------------------------\n");         fprintf(fp,"*****共有%d个信号机*****\n",i);         fclose(fp);                  //关闭文件         printf("保存成功!\n"); }

user: user-0
content: 谢谢
user-0 提问: ReadDirectoryChangesW 监听目录 丢失消息的问题

回复:
user: user-0
content: 问题已解决：https://bbs.csdn.net/topics/600348125

user: user-1
content: "d:/zhouhui/c", 这里的写法错误了： #include <stdio.h> #include <windows.h> #include <string.h>  int main() {     HANDLE handle = CreateFile(         "d:\\zhouhui",   //这里的目录字段格式错误         GENERIC_READ,         FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE,         NULL,         OPEN_EXISTING,         FILE_FLAG_BACKUP_SEMANTICS,         NULL     );     FILE_NOTIFY_INFORMATION pNotify[1024] = {0};     LPDWORD lpBytesReturned;     int i = 0;     while(1)     {         ReadDirectoryChangesW(             handle,             pNotify,             1024, //The size of the buffer             TRUE,//bWatchSubtree,             FILE_NOTIFY_CHANGE_FILE_NAME,//FILE_NOTIFY_CHANGE_DIR_NAME             (LPDWORD)& lpBytesReturned,   //lpBytesReturned             NULL,      //lpOverlapped             NULL         );         i++;         printf("%d\n",i);         } }

user: user-0
content: 这跟目录格式没关系的呀，都能监听到的

user: user-1
content: 有关系，"d:/zhouhui/c"这个形式，我的电脑上就死循环了。

user: user-0
content: 好吧，那你改成那样子后，多试几次，会有遗漏消息吗？

user: user-0
content: while(1)     {             ReadDirectoryChangesW(             handle,              pNotify,             5000, //The size of the buffer             TRUE,//bWatchSubtree,             FILE_NOTIFY_CHANGE_FILE_NAME,//FILE_NOTIFY_CHANGE_DIR_NAME             (LPDWORD)& lpBytesReturned,   //lpBytesReturned             NULL,      //lpOverlapped             NULL         );                  DWORD dw = 0;             FILE_NOTIFY_INFORMATION* p;                  do {             p = &pNotify[dw];                          i++;                      printf("%d\n",i);                          dw += p->NextEntryOffset;         }         while(p->NextEntryOffset !=0);     }   网上有说要循环  FILE_NOTIFY_INFORMATION 链表的，我也照着做了，可还是会丢呢（如下图，添加时是10个，删除时，却只出来3个）。

user: user-0
content: 这是我刚刚又测试的，往里面放10张图片，然后又删除这个文件夹，结果只输出几次。。。
user-0 提问: 求助 老师给出的题

回复:
user: user-1
content: 这代码逻辑混乱不堪，问题多多，这个能当题目也是醉了fission函数返回应该是个指针，因此int s[10]需要定义为static的，或者直接定义为全局变量，s里的内容没初始化。。。。
user-0 提问: 急求解

回复:
user: user-1
content: 用排序的方法是可以的，但是效率不是最优，可以用这个比较好的方法，遍历一次就可以了。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> int main(void) {     int score[100], i, cnt = 0;     int max[3]; for (i = 0; i < 100; i++) {     if (scanf("%d", &score[i]) && score[i] >= 0) {         cnt++;         continue;     }     break; }  max[0] = max[1] = max[2] = -1; for (i = 0; i < cnt; i++) {     if (score[i] > max[0]) {         max[2] = max[1];         max[1] = max[0];         max[0] = score[i];     } else if (score[i] > max[1]){         max[2] = max[1];         max[1] = score[i];     } else if (score[i] > max[2]) {         max[2] = score[i];     } }  printf("%d,%d,%d\n", max[0], max[1], max[2]);  return 0;  }  ```#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h>  int main(void) {     int score[100], i, cnt = 0;     int max[3];      for (i = 0; i < 100; i++) {         if (scanf("%d", &score[i]) && score[i] >= 0) {             cnt++;             continue;         }         break;     }      max[0] = max[1] = max[2] = -1;     for (i = 0; i < cnt; i++) {         if (score[i] > max[0]) {             max[2] = max[1];             max[1] = max[0];             max[0] = score[i];         } else if (score[i] > max[1]){             max[2] = max[1];             max[1] = score[i];         } else if (score[i] > max[2]) {             max[2] = score[i];         }     }      printf("%d,%d,%d\n", max[0], max[1], max[2]);      return 0; }

user: user-2
content: 录入的时候就可以找前三大了，可以优化不用两个循环

user: user-3
content: 这个就是排序吧，很简答的吧。你是想知道思路还是代码
user-0 提问: 急求解！！

回复:
user: user-1
content: 供参考： #include<stdio.h>  int main() {     double S=1.0,eps,tmp=1.0;     int    N=1;     scanf("%lf",&eps);     while(tmp >= eps){           tmp *= 1.0/N;           S += tmp;           N ++;     }     printf("e=%.3f,count=%d\n",S,N);         return 0; }
user-0 提问: 输出上三角数字阵列.求解急

回复:
user: user-1
content: 供参考： #include<stdio.h> int main() {     int i,j,n,m;     scanf("%d%d",&n,&m);     for(i=n-1;i>=0;i--)     {         for(j=0;j<=i;j++)         {             printf("%-4d",m++);         }         printf("\n");     }          return 0; }
user-0 提问: 这个错误怎么改

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> int option; void AddNew() {     //TODO } void FindMenu() {     //TODO } void ModifyData() {     //TODO } void Delete() {     //TODO } void MainMenu() {     system("cls");     printf("主菜单：\n");     printf("1,  添加信号机：    \n");     printf("2,  查看信号机：    \n");     printf("3,  修改信号机信息：\n");     printf("4,  删除信号机：    \n");     printf("5,  退出程序：      \n");     printf("请选择：            \n");     scanf("%d",&option);     getchar(); } int main() {     MainMenu();     switch (option)     {     case 1:AddNew()        ;break;     case 2:FindMenu()    ;break;     case 3:ModifyData()    ;break;     case 4:Delete()        ;break;     case 5:exit(0);     }     return 0; }

user: user-0
content: 嗯，谢谢“赵4老师”。
user-0 提问: 小白求一段字符串截取方法。

回复:
user: user-1
content: #include <stdio.h> #include <string.h> int main() {     char p[]="/data/detect/20210630/OPIA2021063099459/f93fb93a70ee4f048f3e35445d10fd57.jpg";     char *q;     q=strrchr(p,'/');     if (q) {         q[1]=0;         printf("%s\n",p);// "/data/detect/20210630/OPIA2021063099459/"     } else {         printf("Can not find / in %s\n",p);     }     return 0; }

user: user-0
content: 赵老师武威

user: user-2
content: 要是可修改，就从后往前查找 / 字符，然后把它后面一个位置赋值为'\0'。
user-0 提问: 求助一道strout strerr问题

回复:
user: user-1
content: 因为stout和stderr是两个不同的输出管道，且输出字符串没有以'\n'结尾且没有fflush,输出都被缓存在各自管道的内部缓冲区中，直到程序退出前，输出缓冲区中的信息才会被flush而一起显示。

user: user-0
content: 感谢！
user-0 提问: 浙江大学PTA练习4-11

回复:
user: user-1
content: 只需遍历2 ~ sqrt(n)之间的整数去除就可以了

user: user-2
content: 供参考：  #include<stdio.h>  int f(int);   int main() {     int a,b,count,s,c,i;     scanf("%d %d",&a,&b);     count=0;     s=0;     for(i=a;i<=b;i++){         if(f(i)!=0){             count++;             s += i;         }     }     printf("%d %d\n",count,s);          return 0; }   int f(int n) {     int i;     if(n <= 3) return n>1;     for(i=2;i*i <= n;i++)        if(n%i == 0) return 0;     return 1; }

user: user-3
content: 大概不是错了，而是慢了吧？
user-0 提问: 为什么保存到文件的数据不是十进制的

回复:
user: user-1
content: 两次打开文件； 写文件时那些变量取地址干嘛； 第四个格式符也不对，那是浮点的。

user: user-2
content: 你所指的十进制可能是想保存的文本文件看起来和输入的一样吧，是这样的话，保存时必须把数据转换成字符或字符串再按字符串保存，正常情况保存，都是二进制的，比如 字母 '1'  保存时值是49，十六进制为31，虽然你保存的文件指定后缀名为.txt,但值不会自动为你变成文本. 数字123 ,保存时就是31 32 33 ，保存到文本文件看起来要是123，那就要转换成字符串再保存，读取回来时也要将字符串“123” 转换成数字123

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

回复:
user: user-1
content: 把代码贴上来，才可以帮到你。

user: user-1
content: 给学生排名时，如何让每个人各科的成绩与他们的总成绩相对应，（每次我把总成绩排出来了，但是每个人的成绩没有变),设置一个结构体变量 struct student temp;  ，然后整体搬迁。

user: user-2
content: 指针指向同一个实体。

user: user-3
content: 不知道你问的是啥意思。
user-0 提问: 为什么我这个代码会缓冲区溢出想两天了

回复:
user: user-1
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-1
content: #include <stdio.h> #include <string.h> #define LEN 8 char * mystrncat(char*,char*,int); int main(void) {     char s1[LEN],s2[LEN];      while (fgets(s1,LEN,stdin)!=NULL&&(s1[0]!='\n')) {         fgets(s2,LEN,stdin);         printf("\n%s",mystrncat(s1,s2,LEN));     }     printf("Bye.\n");     return 0; } char * mystrncat(char*s1,char*s2,int n) {     char* ps=s1;      for (;*ps!='\n'&&*ps!='\0';ps++)         continue;      for(int i=0;i<=(n-1);i++,ps++)         *ps=s2[i];      *ps='\0';      return s1; } //1234 //abcde // //1234abcde // //Bye. //  显然结果超出了LEN个字符，即缓冲区溢出。

user: user-2
content: 你从一个总长度80的数组中间某个位置开始写入80字节，溢出难道不是应该的么？
user-0 提问: 动态链表，有两个问题，能正常跑起来

回复:
user: user-0
content: 经过大半天的调试，总算发现了问题，最大的问题在于creat()函数在初始化链表的时候，多了一个节点没有加入到链表的末尾，导致链表丢失NULL没法正常结束，从而导致输出最后一个数据的时候会卡顿0.5s左右。同时也导致了，输出函数末尾或者主函数输出函数后的换行符失效(可能是链表没有NULL，没能正常过结束)。调试后的代码就能正常了，也不会卡顿 #include<stdio.h> #include<stdlib.h>  //定义结构体 struct Joseph {     int People;     int Jundge;     struct Joseph *next; }; #define Len sizeof(struct Joseph) typedef struct Joseph SCJP; int n = 1; //建立动态链表。 struct Joseph *creat(void) {     struct Joseph *head = NULL;     struct Joseph *p1, *p2;     p1 = p2 = NULL;     printf("请输入总计有多少个人：");     int NumPeople = 0;     scanf_s("%d", &NumPeople);     rewind(stdin);     while (1)                //输入人数优化     {         if (NumPeople == 0 || NumPeople == 1)         {             printf("请重新输入：");             scanf_s("%d", &NumPeople);         }         else break;     }     p2 = p1 = (struct Joseph*)malloc(Len);     p1->People = n;     while (1)                    //循环优化     {         if (n == 1)head = p1;         else         {             p2->next = p1;         }         if (n == NumPeople)break;       //位置修改，原导致链表丢失NULL的判断语句，         p2 = p1;         p1 = (struct Joseph*)malloc(Len);         n++;         p1->People = n;     }     p1->next = NULL;     return(head); } int main(void) {     struct Joseph *p_head = NULL;     p_head = creat();     void Print_Link(struct Joseph *p);     Print_Link(p_head);     printf("\n");                        //原换行符无效的地方     free(p_head);     return 0; } //输出函数，检测输入人员编号是否有问题。 void Print_Link(struct Joseph *p) {     SCJP *Print_Temp = p;     int count = 1;     if (Print_Temp != NULL)     do{         printf(" %5d", Print_Temp->People);    //换行符在此有效，         if ((count++) % 15 == 0)             printf("\n");                             //原换行符无效的地方         //fflush(stdout);         Print_Temp = Print_Temp->next;     } while (Print_Temp != NULL);     fflush(stdout);     printf("\n");                                    //原换行符无效的地方     return; }     //fflush(stdout);     //printf("\n");                                    //原换行符无效的地方     return; }

user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。 do语句也一样！

user: user-0
content: 好的，我再试试。

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

user: user-0
content: 4老师牛逼。

user: user-0
content: 去查了一下一下fflush和rewind的用法，然后加上去好像还是没法控制换行。
user-0 提问: 最后一位数据后面的逗号怎么消除

回复:
user: user-1
content: 1、楼主你的代码不输出逗号啊？ 2、如果要以眼睛为标准，可以最后printf("\b\n"); 3、转换一下思路，你以为是每个数后面带逗号，能不能想象第一个数专门输出为啥也不带，然后循环输出每个数前面带逗号呢？

user: user-2
content: 正解。

user: user-3
content: #include <stdio.h> int main() {     int n,i;     scanf("%d", &n);     int a[n];     for(i=0;i<n;i++) {         scanf("%d",&a[i]);     }     for(i=0;i<n;i++) {         if( i % 2 != 0) {              printf("%d",a[i]);             if (i != n-1 && i != n-2)                  printf(",");         }     }     printf("\n");     return 0; }
user-0 提问: 堆区内存释放的疑问!

回复:
user: user-1
content: 可以，注意在主函数异常处理时，该释放的时候也要释放。

user: user-2
content: 可以，只要在一个模块里面就行。 不能跨DLL，释放。 跨函数释放是没有问题的。

user: user-3
content: 参考【算法分享】基于WinSocket的TCP分包组包传输算法_yiyefangzhou24的专栏-CSDN博客

user: user-3
content: 这和是否主函数无关，如果是dll内部函数malloc的内存，只能在dll内部free，如果都在同一个空间，你说的可以。 malloc原则上谁申请谁释放原则，实在不行可以使用c++的string或者内存池

user: user-4
content: 可以
user-0 提问: 怎么让之前输入的内容不影响到后面的输入

回复:
user: user-1
content: fflush(stdin) 清空输入缓冲区。

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 [size=24px][code=c]//请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。[/code][/size]
user-0 提问: 大学c语言考纲，运用c语言统计字符数组(“字符串”)中某个单词出现的次数

回复:
user: user-1
content: 供参考：  #include<stdio.h>  int main() {     int i=0;     char str[512],substr[32],*s=str,*p,*q;     gets(str);     getchar();     gets(substr);     while(*s){             p=s;             q=substr;             while(*q){                    if(*q==*p)                       {q++;p++;}                    else                       break;                    if(*q=='\0')i++;           }           s++;     }     printf("%d\n",i);          return 0; }
user-0 提问: 为什么我按行读取txt是这样的呢？

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

user: user-0
content: 就是还会多一行

user: user-2
content: 那句格式读取文件改这样试试：fscanf(fp,"%s %s %d %f %c %s %s",L.elem[i].id,L.elem[i].name,&L.elem[i].inventory,&L.elem[i].price....)

user: user-0
content: 可以哎！

user: user-2
content: 多一行这样改：while(1){},这里循环里改成1，文件读取那句改成：if（fscanf(fp,"%s %s %d %f %c %s %s",L.elem[i].id,L.elem[i].name,&L.elem[i].inventory,&L.elem[i].price....)!=7) break;

user: user-0
content: OK啦，谢谢！
user-0 提问: 在keil芯片仿真遇到单步调试与实际不符的情况

回复:
user: user-0
content: 最终确认是因为没做好措施，因为静电原因导致的电路板某处短路，造成了一系列不正常的状况

user: user-0
content: 经检查可能是某个引脚初始化的时候漏电了，，，，，，注释掉相关部分运行就没有问题了，但是这个初始化的部分和显示完全不沾边，，，，，等待后续检测

user: user-1
content: 速度太快？
user-0 提问: Vc++6.0清屏！！小白求带：（

回复:
user: user-1
content: system("cls");不会退出程序吧，是你程序自己结束了？

user: user-2
content: system("cls");还有这功能?

user: user-3
content: 请证明您的描述确有其事，然后再继续哭。
user-0 提问: 为什么用float配合%f会溢出用double配合%lf不会？？？

回复:
user: user-1
content: 对于double的变量,scanf要用%lf，printf也建议用%lf

user: user-2
content: 图文不一致，南辕北辙了。

user: user-3
content: 1.C语言中printf输出float和double都可以用%f,而double型数据还可以用%lf。 2.scanf当中若是对双精度的变量赋值是必须是%后跟lf,而printf当中可以用%f也可以用%lf没有限制
user-0 提问: 一个关于结构指针的疑问

回复:
user: user-0

user: user-0

user: user-1
content: 注释的三行大约是p和t一起抄了第一名同学的作业，然后p撕掉了自己的作业本。 然而， 下面四行是说第一名同学小名叫做p，t童鞋抄了他的作业，然后p撕掉了自己的作业本。

user: user-0
content: 我的问题是为什么运行注释掉的三行后hashtab[0]!=NULL, 而运行它下面的四行后, hashtab[0]==NULL?

user: user-1
content: 我说的正是这个事儿啊。 上面的第一名同学的作业还在，自然就不是NULL了； 下面的第一名同学作业被撕了，自然就NULL了。

user: user-1
content: 不打比方的说法是，四行版里面*p就是hashtab[0]本身，你修改了人家的值。
user-0 提问: vscode'cmd' 不是内部或外部命令，也不是可运行的程序或批处理文件。如何解决

回复:
user: user-1
content: “终端”就是控制台 cmd.exe ，你所谓的“黑窗口”。 你或许需要呼吸点新鲜空气了。
user-0 提问: 求助帖

回复:
user: user-1
content: 新改的论坛乱码了？？#include &lt;stdio.h&gt; 好像行了，显然不行，那是你的编译器放了你一马。多换几个编译器，早晚出错。 1. 用动态分配，楼上提到的malloc。 2. 定义一个足够大的数组。int Num[100]，假设输入的n小于100。

user: user-0
content: 好的，多谢，鄙人纯新手，感谢指教

user: user-0
content: #include <stdio.h> int main()  {     int n,i=0;     scanf("%d",&n);     int Num[n];     while (i<=n)     {         if(i>=0&i<n)         {             scanf("%d",&Num[i]);             i=i+1;         }              else         break;     } } 修改了一下，好像可以？

user: user-2
content: int Num[n];这个C语言不清楚应该给这个数组Num定义多大，因为这个n是需要我们输入才会知道。所以，不建议这么写（C++可以）

user: user-0
content: 好的好的，谢谢

user: user-2
content: 数组需要是一个定值（确定的）；如果要这么做也是可以，使用malloc吧；  #include <stdio.h> #include <stdlib.h> //Windows下用<malloc.h> int main()  {     int n,i=0;     scanf("%d",&n);     int *N = (int *)malloc(sizeof(int) * n);//[n];     while (1)     {         for(i=0;i<n;i++)         scanf("%d",&N[i]);     }     free(N);     return 0; } 供参考～

user: user-0
content: int *N = (int *)malloc(sizeof(int) * n);  这一语句的意思是不是定义一个个数为n的整型数组啊？ 另 #include &lt;stdio.h&gt; int main()  {     int n,i=0;     scanf("%d",&n);     int Num[n];     while (i&lt;=n)     {         if(i&gt;=0&i&lt;n)         {             scanf("%d",&Num[i]);             i=i+1;         }         else         break;     } } 这个好像可以实现读入一个个数已知的数组？

user: user-3
content: 数组n不能是变量

user: user-0
content: 好的，感谢

user: user-0
content: #include &lt;stdio.h&gt; int main()  {     int n,i=0;     scanf("%d",&n);     int Num[n];     while (i&lt;=n)     {         if(i&gt;=0&i&lt;n)         {         	scanf("%d",&Num[i]);         	i=i+1; 		} 	         else         break;     } } 这样好像就行了，不知道有没有问题？

user: user-4
content: int N[n] 在编译的时候需要在栈上预分配n个int类型的空间, 但是你的n是一个变量, 一个不确定的变量. 这是错误的根本原因. 对照规则有2中修复方式: 1. n 定义为一个常量, 这个时候可以预分配成功. 2. 数组N 在堆上动态分配, 使用new操作符.

user: user-0
content: 好的，感谢

user: user-0
content: #include &lt;stdio.h&gt; int main()  {     int n,i=0;     scanf("%d",&n);     int Num[n];     while (i&lt;=n)     {         if(i&gt;=0&i&lt;n)         {         	scanf("%d",&Num[i]);         	i=i+1; 		} 	         else         break;     } } 这样好像就行了，不知道有没有问题？
user-0 提问: C语言-求助

回复:
user: user-1
content: typedef struct Student {     double num;     //struct Studnet *next;     struct Student *next; }stu; 单词拼写错误，比较低级的错误～

user: user-2
content: #include <stdio.h> #include <stdlib.h> typedef struct Student { 	double num; 	struct Student* next; } *stu;  int main() { 	stu student(int),  head; 	void sum(stu  head,double *,double *,double *); 	int n; 	double sums,max,min;  	scanf_s("%d", &n); 	head = student(n); 	sums = max = 0.0; 	sum(head,&sums,&max,&min); 	printf("average = %.1f\nmax = %.1f\nmin = %.1f", sums / n, max, min); 	return 0; } stu student(int n) { 	stu head,  p;  	head = NULL; 	while (n > 0) { 		p = (stu)(malloc(sizeof(struct Student))); 		if (p == NULL) 			return NULL; 		scanf_s("%lf", &p->num); 		p->next = head; 		head = p; 		n--; 	} 	return head; } void sum(stu head,double* sums,double *max,double *min) { 	stu p; 	p = head; 	*min = p->num; 	while (p != NULL) { 		*sums +=  p->num; 		if (p->num > *max) { 			*max = p->num; 		} else if (p->num < *min) { 			*min = p->num; 		} 		p = p->next; 	}  }

user: user-3
content: typedef struct Student { 	double num; 	struct Studnet *next; }stu;  结构体重的 struct Studnet *next；中的Studnet拼写错误，应该是struct Student *next
user-0 提问: 请问这个语句怎么改写，提示 将 NULL 转换到非指针类型‘char’ 

回复:
user: user-0
content: 谢谢了

user: user-1
content: 全局变量（或静态变量）不手动初始化，系统会默认给初始化的。即static CMDS commands;这样定义，系统会给初始化的，默认是0和NULL，字符串是'\0'
user-0 提问: 请问 关于读 TXT文件到 结构体 关于typedef void (*handler)(void) 这样的如何赋值

回复:
user: user-0
content: 谢谢了

user: user-1
content: 既然是格式化的数据内容，可以用fscanf读取； on / off这些可以直接赋值，函数指针就不能用字符串直接赋值了。可以比较字符串比如strcmp(str, "Cmd_on");然后xxx.cmd_operate = Cmd_on;    cmd_operate
user-0 提问: 请教诸位大佬，关于一定范围内隔数随机数的问题

回复:
user: user-1
content: 提供一种思路   #include <stdio.h> #include <stdlib.h> #include <time.h>  /*生成随机数 6，10，14，18，22 */  int GenerateSpecifyRandomNumber(int baseNumber) {     return baseNumber + rand() % 5 * 4; }  int main() {     srand((unsigned int)time(NULL));     int randomNumber;     for (int i = 0; i < 10; i++)     {         randomNumber = GenerateSpecifyRandomNumber(6);         printf("%d\n", randomNumber);     }     return 0; }

user: user-0
content: 好的 我再仔细看看  万分感谢

user: user-2
content: 将这四个数放到数组里，然后随机产生两个数（数组下表），只要随机产生的这两个数（5个数，对5取余）相差1，那么这两个数作为下表对应的数就是相差4的～

user: user-0
content: 原来是这样 因为还没有学到数组 所以没想到这里   感谢大佬
user-0 提问: Mips 怎么读取 cache 命中率

回复:
user: user-1
content: 查对应的芯片手册，找到对应的cache章节的寄存器，看有没有你需要的寄存器。 顺便说一句，性能的提升一般来通过算法来解决，代码级的优化把常用的结构体尽量cache line对齐。
user-0 提问: 为啥会是b=0.000000

回复:
user: user-1
content: printf("b=%f",&b); 去掉b前面的&就好了。

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-3
content: //printf("b=%f",&b);     printf("b=%f",b); &b是地址，类型是unsigned long类型，用%f输出unsigned long，得到是是0.00000正常的，建议看一下浮点型和整型变量在内存里的表示方法，它们是有区别的。

user: user-4
content: 输出变量的值: printf("b=%f",b); 输出存放变量值的地址:printf("%p",&b);
user-0 提问: 关于Visual Studio 2015下载后不能使用的问题

回复:
user: user-1
content: 安装的时候不能直接选择下一步，要手动选择所需要的功能，默认不安装c++环境的。

user: user-2
content: 显然安装错了工作负荷, 应安装"使用C++的桌面开发"; 可以运行"Visual studio Installer"修改.
user-0 提问: 求助帖

回复:
user: user-1
content: 这个函数返回值是   int * 指针，这个指针指向  int* ret = malloc(sizeof(int) * 2);   ret[2]数组。

user: user-0
content: 奥奥，感谢

user: user-2
content: 返回整形的指针

user: user-0
content: 好的好的，感谢
user-0 提问: C初学者的求助

回复:
user: user-1
content: 试试这样：  #include <stdio.h> #include <windows.h> #include <math.h> #include <string.h> int main() { 	int i = 0; 	const char *s = "你好，我的朋友。\n"; 	int size = strlen(s);          printf("%c",s[0]);         printf("%c",s[1]);         printf("\n");  	printf("size = %d", size); 	 }

user: user-0
content: 我大概知道了。char类型1个字节装不下中文，中文应该是多个字节储存的，所以size才会为17。只输出s[0]，屏幕上不会显示中文，但是在后面接上s[1]时，s[0]和s[1]组成了中文符号“你”。 但让我疑惑的时s[0]和s[1]进行了什么运算或者过程，最终才会显示为中文。 我还是什么都不知道。

user: user-1
content: 去了解下汉字的编码方式。
user-0 提问: 有人可以帮我分析一下每条语句的作用是什么吗

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

回复:
user: user-1
content: 浮点数格式 [url=http://bbs.csdn.net/topics/390676437][/url]

user: user-2

user: user-3
content: 整数转除2取余，小数部分乘2，取积的整数部分。
user-0 提问: 那位大佬帮我看一下这个程序 非常简单

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  int format(char* str, int* cnt) {   if (!str || !cnt) return -1;    if (strlen(str) == 0) {     printf("###\n");     return 0;   }    *cnt = 0;   int len = strlen(str);   char* tmp = (char*)malloc(strlen(str) * sizeof(char));   memset(tmp, 0, strlen(str) * sizeof(char));   for (int i = 0; i < strlen(str); i++) {     if (str[i] == '#') {       *cnt += 1;       if (i) *(tmp + i) = ' ';     } else       *(tmp + i) = *(str + i);   }   if (strlen(tmp) == 0) {     printf("###\n");   } else if (str[0] == '#' && str[strlen(str) - 1] == '#') {     printf("%d %d %s\n", *cnt - 1, *cnt, tmp);   } else if (str[0] != '#' && str[strlen(str) - 1] != '#') {     printf("%d %d %s\n", *cnt + 1, *cnt, tmp);   } else {     printf("%d %d %s\n", *cnt, *cnt, tmp);   }   if (!tmp) free(tmp);   return 0; }  int main() {   int line = 0;   scanf("%d", &line);   while (line--) {     char input[128] = {0};     scanf("%s", input);     int cnt = 0;     int len = strlen(input);     if (format(input, &cnt)) return -1;   }   return 0; }
user-0 提问: 请教一个函数指针的问题。

回复:
user: user-0
content: 自问自答了！直接汇编调试时可以发现，ptr 指针里 的值里的地址存放的是一条 jmp 跳转指令，直接跳转到了 Add 函数的首地址，不是我之前想象中的把 add 的地址直接赋值给 ptr....

user: user-0

user: user-1
content: // ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //  #include <iostream>   int(*ptr)(int, int);  int Add(int c1, int c2) { 	return c1 + c2; } int main(int, char**) { 	int a = 10; 	int b = 20; 	int c = 0;  	c = a;  	ptr = &Add; 	using namespace std; 	cout << Add << endl; 	cout << ptr << endl;  	return 0; }   00791195 00791195 C:\Users\Administrator\source\repos\ConsoleApplication2\Debug\ConsoleApplication2.exe (进程 5736)已退出，返回代码为: 0。 按任意键关闭此窗口...

user: user-0
content: 麻烦您再帮我看看。我的问题在哪儿。

user: user-0
content: 调试栏的地址为啥不一样咧？

user: user-1
content: 你的cmd显示是正确的。

user: user-2
content: ptr=&Add  ptr是一个函数指针类型变量，它指向了Add这地址，他就是Add这个函数啊
user-0 提问: 【C语言】纯char实现超大数运算

回复:
user: user-1
content: 仅供参考：  #include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110
user-0 提问: 新人请教一下关于三重for嵌套循环的疑问

回复:
user: user-0
content: 感谢各位大佬的帮助  万分感谢！！!

user: user-0
content: 引用 1 楼 真的小白啊 的回复:感觉你写的有点复杂啊  好的 感谢各位大佬的帮助 我再仔细看看

user: user-1
content: 后面两个图案不对  纠正

user: user-1
content: 不难 就是有点琐碎

user: user-2
content: 按照你这个第2，3个for语句控制输出每行s*（i+1）个空格，第一个for语句控制输出每行一个*号；s每次自减1，i每次自增1；第一次执行i=0，输出s的初值，也就是9个空格，第二次i=1，s=8，输出16个空格；所以，代码就用二楼的

user: user-3
content: 其实两个循环就可以啦，在第二个循环里面判断一下位置是否超过规定，超过则打星，不超则打空格。 你的肯定错了，for(j) 应该是具体打印每个行中的数据，而你打印*的语句并不包含在内，而且你包含在内也不对。语言不好描述，直接上代码吧.  	for (i = 0; i < 10; i++) { 		for (k = s; k > 0; k--) { 			printf(" "); 		} 		for(j=i;j>=0;j--) 			printf("*"); 		s--; 		printf("\n");  	}

user: user-4
content: 感觉你写的有点复杂啊
user-0 提问: 新人求助

回复:
user: user-1
content: windows下cls在linux和mac下是clear。 也可以编辑.bashrc文件，添加一行 alias cls='clear';

user: user-2
content: 引用 2 楼 H-M-A-L 的回复:[quote=引用 1 楼 自信男孩的回复:]建议使用system("clear"); MAC系统是unix（源）因此，和windows还是有区别的。 LINUX下可以用clear来清屏～ 我就是用clear，然后显示TERM environment variable not set[/quote] 再试试reset命令

user: user-0
content: 引用 1 楼 自信男孩的回复:建议使用system("clear"); MAC系统是unix（源）因此，和windows还是有区别的。 LINUX下可以用clear来清屏～ 我就是用clear，然后显示TERM environment variable not set

user: user-2
content: 建议使用system("clear"); MAC系统是unix（源）因此，和windows还是有区别的。 LINUX下可以用clear来清屏～
user-0 提问: 如果用switch语句怎么做。

回复:
user: user-1
content: 这个没办法用switch做，只能用if else if做，如果用switch，需要枚举每个分数，写起来不是一点的冗繁。

user: user-2
content: 可以先用if ---else写一下，然后改成switch ... case形式；
user-0 提问: 完全不晓得咋做啊啊啊

回复:
user: user-1
content: 百度背包问题

user: user-2
content: 先遍历所有可能，得到一个或一组≤N的最大值， 然后再在上一步的结果中遍历得到总体评分最高的一个即可。
user-0 提问: 为什么int变量一下子 变成29972，应该一直加1才对

回复:
user: user-1
content: 仅供参考：#include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-2
content: 数组最好用memset初始化一下0，这样能保证后面的数值都是空的，否则可能会出现你现在这个情况

user: user-3
content: #define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<cstring> #include<stdlib.h>  struct str {     //char a[];     char a[1024]; };   int main() {     //FILE *p;     FILE *fp;     char myfile[] = "C:\\Users\\hmc\\Desktop\\mynum.txt";      str aa;     printf("请输入字符串：");     if ((fp = fopen(myfile, "w")) == NULL)     {         printf("未找到%s", myfile);         return 0;     }     int mycout = 0;//字符串个数     scanf("%s", &aa.a);     while (strncmp(aa.a,"#", 1) != 0)     {         for (int i = 0; i < strlen(aa.a)+1; i++)         {             if (aa.a[i] >= 65 && aa.a[i] <=90)             {                 aa.a[i] += 32;             }         }         fwrite(&aa.a, strlen(aa.a)+1, 1, fp);         mycout++;         printf("mycout实时值%d ", mycout);         //printf("加32了");         scanf("%s", &aa.a);     }     fclose(fp);     printf("mycount最终值%d",mycout);      return 0; } 供参考～  数组长度需要确定的。要么定义为char a[1024];/*举例，长度可以根据需要而定*/，定义成char a[];等价定义了一个char *a;这个a是一个野指针，需要给其分配空间；两种方式选其一吧。

user: user-4
content: 修改，供参考：#include<cstdio> #include<cstring> #include<stdlib.h>  struct str {        char a[256]; }; int main() {     FILE *p;     char myfile[] = "C:\\Users\\hmc\\Desktop\\mynum.txt";     str aa;     if ((p = fopen(myfile, "w")) == NULL)     {          printf("未找到%s", myfile);          return 0;     }     printf("请输入字符串：");     int mycout = 0;       //字符串个数     scanf("%s", aa.a);    //scanf("%s", &aa.a);     while (strcmp(aa.a,"#")!=0) //while (strcmp(aa.a,"#")==1)     {         for (int i = 0; i < strlen(aa.a)+1; i++)         {               if (aa.a[i] >= 65 && aa.a[i] <=90)               {                   aa.a[i] += 32;               }         }         fwrite(&aa.a, strlen(aa.a)+1, 1, p);         mycout++;         printf("mycout实时值%d ", mycout);         //printf("加32了");         scanf("%s", aa.a);//scanf("%s", &aa.a);     }     fclose(p);     printf("mycount最终值%d",mycout);          return 0; }   //请输入字符串：C:\\Users\\hmc\\Desktop\\mynum.txt # //mycout实时值1 mycount最终值1请按任意键继续. . .  //mynum.txt: //c:\\users\\hmc\\desktop\\mynum.txt

user: user-5
content: struct str { char a[]; }; 这个用法是错误的 1. 柔性数组要求 第一个元素是完整类型 并且空数组是最后一个元素 2. 柔性数组的使用方式是 用malloc等函数分配内存的时候 指定柔性数组大小 没有使用malloc等函数 无法应用柔性数组  然后 没有不固定长度的数组  哪怕是std::string 也是固定长度  遇到长度不足的情况手动重新分配内存

user: user-0
content: 换了个编译器就没问题，这是为什么？
user-0 提问: 求助！C语言malloc与结构体调用导致读取字符串的字符时出错

回复:
user: user-0
content: 引用 7 楼 自信男孩的回复:[quote=引用 6 楼 weixin_45710571 的回复:][quote=引用 3 楼 狐帝的回复:]代码不完整，所以只能从你现有代码来琢磨。fileData是个全局变量吧？在ReadInputFile函数里，读完文件之后，fileData.data = data，本意是想通过fileData将读入的数据带回？但是ReadInputFile的后面有free(data)，data（以及fileData.data）指向的存储区就被释放掉了，那么fileData.data就指向了无效的存储区。所以其他代码再访问fileData.data时就会出错。 原来是这样的，感谢指导！再请教一下如果不释放malloc申请过的空间，那如何才能保证程序复用时内存不泄露，代码循环时不出错呢，或者在何处释放才是正确的呢[/quote]  不在使用的时候要释放。内存泄露是因为程序在运行的时候malloc之后没有free才会出现，如果free了就不会泄露，如果程序退出了，即使不free，系统也会给予释放（系统回收）；所以，一般说内存泄露是指程序一直运行，不退出，而程序不停的申请空间，而不free；  注意释放的地址应该是malloc的地址，这个应该是相同的地址，否则会出现释放错误； malloc的空间是可以反复使用的，注意保存好malloc的地址值就好了，等不用的时候记着释放即可；[/quote] 嗯嗯，懂了，谢谢你！

user: user-1
content: 引用 6 楼 weixin_45710571 的回复:[quote=引用 3 楼 狐帝的回复:]代码不完整，所以只能从你现有代码来琢磨。fileData是个全局变量吧？在ReadInputFile函数里，读完文件之后，fileData.data = data，本意是想通过fileData将读入的数据带回？但是ReadInputFile的后面有free(data)，data（以及fileData.data）指向的存储区就被释放掉了，那么fileData.data就指向了无效的存储区。所以其他代码再访问fileData.data时就会出错。 原来是这样的，感谢指导！再请教一下如果不释放malloc申请过的空间，那如何才能保证程序复用时内存不泄露，代码循环时不出错呢，或者在何处释放才是正确的呢[/quote]  不在使用的时候要释放。内存泄露是因为程序在运行的时候malloc之后没有free才会出现，如果free了就不会泄露，如果程序退出了，即使不free，系统也会给予释放（系统回收）；所以，一般说内存泄露是指程序一直运行，不退出，而程序不停的申请空间，而不free；  注意释放的地址应该是malloc的地址，这个应该是相同的地址，否则会出现释放错误； malloc的空间是可以反复使用的，注意保存好malloc的地址值就好了，等不用的时候记着释放即可；

user: user-0
content: 引用 3 楼 狐帝的回复:代码不完整，所以只能从你现有代码来琢磨。fileData是个全局变量吧？在ReadInputFile函数里，读完文件之后，fileData.data = data，本意是想通过fileData将读入的数据带回？但是ReadInputFile的后面有free(data)，data（以及fileData.data）指向的存储区就被释放掉了，那么fileData.data就指向了无效的存储区。所以其他代码再访问fileData.data时就会出错。 原来是这样的，感谢指导！再请教一下如果不释放malloc申请过的空间，那如何才能保证程序复用时内存不泄露，代码循环时不出错呢，或者在何处释放才是正确的呢

user: user-2
content: 调试代码的必要知识：到啥时候说啥话。 不要指望刚执行一句的时候就看见结果。

user: user-3
content: unsigned char* data;  这个也要分配内存才能存放数据的

user: user-4
content: Filep = data = NULL; 这句得分开写： Filep = NULL;  data  = NULL;

user: user-5
content: 代码不完整，所以只能从你现有代码来琢磨。fileData是个全局变量吧？在ReadInputFile函数里，读完文件之后，fileData.data = data，本意是想通过fileData将读入的数据带回？但是ReadInputFile的后面有free(data)，data（以及fileData.data）指向的存储区就被释放掉了，那么fileData.data就指向了无效的存储区。所以其他代码再访问fileData.data时就会出错。
user-0 提问: 用c语言读取文本，一直都出错，到文件路径应该没问题的

回复:
user: user-1
content: 或者加一句#pragma warning(disable:4996)

user: user-0
content: 引用 1 楼 user-4的回复:第2行应该放在第1行的上面吧。 谢谢，可以了。

user: user-0
content: 引用 4 楼 forever74的回复:[quote=引用 2 楼 qq_52473673 的回复:][quote=引用 1 楼 user-4的回复:]第2行应该放在第1行的上面吧。 貌似没区别吧，我在dev上试了一下，是可以打开的，但在visual中，就是打不开[/quote]  你得这么想：要是没区别，那你这趟就白来了。 既然来都来了，为什么不试一试再说呢？[/quote] 非常感谢大家的帮助，正如一楼所说，可以，没来的看消息，所以回复晚了，还是谢谢大家，嘻嘻

user: user-2
content: 引用 2 楼 qq_52473673 的回复:[quote=引用 1 楼 user-4的回复:]第2行应该放在第1行的上面吧。 貌似没区别吧，我在dev上试了一下，是可以打开的，但在visual中，就是打不开[/quote]  你得这么想：要是没区别，那你这趟就白来了。 既然来都来了，为什么不试一试再说呢？

user: user-3
content: 编译就没能成功，没能生成可执行文件，所以没有课运行的程序。如楼上所言，把第1、2行互换一下就行。

user: user-0
content: 引用 1 楼 user-4的回复:第2行应该放在第1行的上面吧。 貌似没区别吧，我在dev上试了一下，是可以打开的，但在visual中，就是打不开

user: user-4
content: 第2行应该放在第1行的上面吧。
user-0 提问: 求助！！！有大牛能用c语言帮帮我这个苦逼的大学生吗  上学期才学完的c 

回复:
user: user-1
content: 供参考：#include<stdio.h>  int fun(int n) {     if(n%2==0 || n%3==0 || n%5==0)           return 1;     else  return 0; }  int main() {     int i,cnt,n;     while(scanf("%d",&n)!=EOF && n>=1 && n<=10000){           cnt=0;           for(i=1;cnt < n;i++)               if(i==1 || fun(i)) cnt++;           printf("%d\n",i-1);     }          return 0; }