Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 给定用户输入的N个不大于这个数的所有素数，并求和输出。:定义一个函数int isprime(int n)用于判断n是否为素数

回复:
user: user-0
content: 大佬，能不能给我看看这个 match *Amend(match *head)//输入比赛信息  {  	system("cls"); 	system("color 72"); 	match *p1=head,*p2=head; 	char name1[15],name2[15]; 	int goal1,goal2; 	printf("输入主队:"); 	scanf("%s",name1); 	printf("输入客队:"); 	scanf("%s",name2); 	printf("输入主队得分:"); 	scanf("%d",&goal1); 	printf("输入客队得分:"); 	scanf("%d",&goal2);     while(p1!=NULL&&strcmp(p2->name,name1)!=0) 	{ 		p1=p1->next;  		 		if(p1!=NULL) 		{ 			p1->goal=p1->goal+goal1; 			p1->lose=p1->lose+goal2; 			if(goal1>goal2){ 			p1->num[1]++; 			} 			else if(goal1==goal2){ 				p1->num[2]++; 			} 			else{ 				p1->num[3]++; 			} 			p1->pure=p1->goal-p1->lose; 	        p1->integral=p1->num[1]*3+p1->num[2]; 	        p1->num[0]=p1->num[1]+p1->num[2]+p1->num[3]; 		} 	} 	   	     	while(p2!=NULL&&strcmp(p2->name,name2)!=0) 	{ 		p2=p2->next;  		 		if(p2!=NULL) 		{ 			p2->goal=p2->goal+goal2; 			p2->lose=p2->lose+goal1; 			if(goal2>goal1){ 			p2->num[1]++; 			} 			else if(goal1==goal2){ 				p2->num[2]++; 			} 			else{ 				p2->num[3]++; 			} 			p2->pure=p2->goal-p2->lose; 	        p2->integral=p2->num[1]*3+p2->num[2]; 	        p2->num[0]=p2->num[1]+p2->num[2]+p2->num[3]; 		} 	} 	    	return head; }

user: user-0
content: 对偶٩(๑^o^๑)۶，谢谢谢谢

user: user-1
content: 后面的printf也是同样的，使用了n做控制循环的变量

user: user-1
content: while(n--){   //n在读取输入的时候逐渐减少到0 scanf("%d",&m);  for(j=1;j<=n;j++){//这时候n等于0，直接循环结束了 ==========》用一个临时变量保存，来进行循环控制  int readn = n; while(readn--){   //n在读取输入的时候逐渐减少到0 scanf("%d",&m);  for(j=1;j<=n;j++){//这时候n等于0，直接循环结束了
user-0 提问: 这两处地方有什么区别

回复:
user: user-0
content: 引用 3 楼 自信男孩的回复:[quote=引用 2 楼 weixin_45974777 的回复:] [quote=引用 1 楼 user-2的回复:]上面是按指定的格式读取文本文件，下面是按固定的大小（字节）读取二进制文件 可以吧上面那个for循环换成while循环吗[/quote] 可以的 [/quote] 好的，谢谢哥

user: user-1
content: 引用 2 楼 weixin_45974777 的回复:[quote=引用 1 楼 user-2的回复:]上面是按指定的格式读取文本文件，下面是按固定的大小（字节）读取二进制文件 可以吧上面那个for循环换成while循环吗[/quote] 可以的

user: user-0
content: 引用 1 楼 user-2的回复:上面是按指定的格式读取文本文件，下面是按固定的大小（字节）读取二进制文件 可以吧上面那个for循环换成while循环吗

user: user-2
content: 上面是按指定的格式读取文本文件，下面是按固定的大小（字节）读取二进制文件
user-0 提问: C语言设计计算

回复:
user: user-1
content: 不好意思看到的有点晚，希望能帮到你。 #include <stdio.h> #include <stdlib.h>  /* run this program using the console pauser or add your own getch, system("pause") or input loop */  #include <stdio.h>  double fun(int n, int a)  { 	double sum = 0.0; 	int Fm = 0; 	for(int i = 1;i <= n;i++) 	{		 			Fm = Fm*10+a; 			printf("Fm=%d,%d\n", Fm,a); 			if(i%2 == 0)sum =sum + (-1)*((float)i/(float)Fm); 			else sum = sum + ((float)i/(float)Fm);	 			printf("Fm=%lf\n", sum); 	} 	return sum; }   int main() {  	int a, n; 	double s = 0.01;  	printf("Enter n and a: "); 	scanf("%d%d", &n, &a); 	s = fun(n,a);  // 函数调用  	printf("n=%d, a=%d, s=%lf\n", n, a, s); 	return 0; }

user: user-0
content: 是想学习学习各位的方法，如有冒犯还请见谅

user: user-0
content: 兄台，对不起呀，自己一直在底下试，没有拿出来分享而已，因为9点前这个要提交了，放出这个题目是想看看大神们是怎么想的，没有大神回答的话，9点前我可能就提交自己的答案了，自己的尝试也是不够完善的

user: user-2
content: 引用 2 楼 shanyumanlou 的回复:晚上9点前截止求问 为啥不自己想想，试着写写，完全拿出来问不应该是很理直气壮的事情

user: user-0
content: 晚上9点前截止求问

user: user-0
content: 在线等急问！！！！！
user-0 提问: C语言设计计算

回复:
user: user-1
content: #include <stdio.h> #include <math.h>  double fun(int n);  // 函数声明  int main() {      int n;      double s;      scanf("%d", &n);      s = fun(n);  // 函数调用      printf("n=%d, s=%lf\n", n, s);        return 0;  }  static int is_prime(int n) {     int i;      if (n < 2)         return 0;     for (i = 2; i <= (int)sqrt(n); i++)         if (n % i == 0)             return 0;      return 1; }  static int get_prime(int from, int end) {     int i;      for (i = from; i <= end; i++)         if (is_prime(i))             return i;      return -1; }  // 函数定义  // 补全函数的代码实现  double fun(int n) {     double sum = 0;      int i, j, k = 0;     int flag = -1, ret;      i = 1, j = 2;      while (k < n) {         ret = get_prime(j, n);         if (ret < 0) {             k++;             continue;         }          j = ret;         printf("%c%d/%d + ", flag < 0 ? '-':' ', i, j);          sum += (flag * i*1.0/j);         i++;         j++;         flag *= -1;         k++;     }      return sum; } 供参考～
user-0 提问: 为什么排序算法输入的数据超过1000，程序就无法运行啊..

回复:
user: user-0
content: 引用 2 楼 自信男孩 的回复:楼主的程序没发现什么问题我确实编译了，小数据量也运行成功了，但是在程序里面跑的时候，输入的数据超过1100个左右的时候，程序的就不运行了.. 会这样一直闪光标

user: user-1
content: 楼主的程序没发现什么问题

user: user-1
content: #include "stdio.h" #include "stdlib.h" #include "time.h"  typedef struct Node {     int data;     struct Node *next; }LNode, *LinkList;   /* //单链表插入排序算法 */ void insert_sort_list(LinkList L);    void insert_sort_list(LinkList *L) {     LinkList first;     LinkList t;     LinkList p;     LinkList q;     LinkList head;      /*        将链表拆为有序元素组成的链表和无序元素组成的链表        */     head= (*L)->next;     first = head->next;     head->next = NULL;      while (first != NULL) {         for (t = first, q = head; ((q != NULL) && (q->data < t->data)); p = q, q = q->next);          first = first->next;          if (q == head)         {             (*L)->next = t;             t->next = head;             head = (*L)->next;         }         else         {             p->next = t;             t->next = q;         }     }//; }  void traverse_list(LinkList L) {     LinkList p = L->next;      while(NULL != p) {         printf("%d ", p->data);         p = p->next;     }     printf("\n");     return; }  void create_list(LinkList *L) {     int i;     int n;     int val;      *L = (LinkList)malloc(sizeof(LNode));     LinkList pTail = *L;      pTail->data = 0;     pTail->next = NULL;      printf("请输入您需要生成的结点个数：");     scanf("%d", &n);      printf("输入数据\n");     srand(time(0));     for(i = 0; i < n; i++) {         //scanf("%d", &val);         val = rand() % 1000;         LinkList pNew = (LinkList)malloc(sizeof(LNode));         pNew->data = val;         pNew->next = NULL;         pTail->next = pNew;         pTail = pNew;     }  }  //main() { int main() {     LinkList La = NULL;     clock_t start, finish;     double  duration;      create_list(&La);     printf("排序前元素：");     traverse_list(La);      start=clock();      insert_sort_list(&La);      finish=clock();      printf("排序后元素：");     traverse_list(La);      duration = (double)(finish - start) / CLOCKS_PER_SEC;     printf( "%f seconds\n", duration );     return 0; }  亲测没问题
user-0 提问: 求助！！！在CodeBlocks里查看内存,Memory dump窗口总是一闪而过

回复:
user: user-0
content: 不管哪个代码都这样…memory不能实时监控

user: user-1
content: 可以发一下代码

user: user-0
content: 菜鸟求助
user-0 提问: 求助，急！！！C语言初级

回复:
user: user-1
content: 楼上正解而且比较简洁，如果你要好理解的话可以循环每次加一 for(i=1;i<=n;i++){     if(i%7==0){  //被7整除         if(i%3!=0){  //不被3整除             if(1%2==0){  //是偶数                  printf("%5d ", i);                  sum += i;             }         }     } } printf("\nsum=%d\n", sum);

user: user-2
content: for example int main(int argc, const char * argv[]) {     int n, sum=0, i;     printf("请输入n（n不大能大于%d）:", 0x0000FFFF);     scanf("%d", &n);     for (i=14; i<=n; i+=7) {         if (i%3!=0 && i%2==0) {             printf("%5d", i);             sum += i;         }     }     printf("\nsum=%d\n", sum);     return 0; }
user-0 提问: 用随机函数rand

回复:
user: user-1
content: 多用几个判断不就好了？这个不难哦，自己看看。头文件time。srand(time(NULL));main先加句这个，作用跟随系统时间获取随机数，确保是不一样的。然后输入人的输入，判断（）判断完的执行语句里再判断后台控制的是啥 大概就是if（strcmp(str,'R')==0){if 后台控制1{x=rand()%100;...}if(2){x=rand()%100;...}};

user: user-2
content: 请参考《C++中产生随机整数的方法（srand()函数与rand()函数）》 希望能够帮到你！
user-0 提问: gdb调试C程序的一个问题

回复:
user: user-0
content: 嗯，这个地方主要是对bt命令的理解不到位。

user: user-1
content: 当你的程序调用了一个函数，函数的地址，函数参数，函数内的局部变量都会被压入“栈”（Stack）中,bt命令是用来打印当前的函数调用栈的所有信息，如果你要打印变量就应该用 “p 变量”
user-0 提问: 新手求教新手求教

回复:
user: user-1
content: #include <stdio.h>  int main() {     int a[10]={-11,2,3,4,15,56,77,88,99,100};     int i,b,c;     printf("请输入要查找的数：\n");     scanf("%d", &b);     for(i=0;i<=9;i++)     {         if(a[i]==b)         {             c=i;             printf("这个数的下标为：%d",c);             break;         }         //else             //printf("没有这个数！");         //break;     }     if (i > 9)printf("没有这个数！");     return 0; } 供参考～  注意break的位置和判断没有这个数的位置
user-0 提问: ean13码校验码的计算(C语言)

回复:
user: user-0
content: 引用 1 楼 user-1的回复:https://wenku.baidu.com/view/043b7f2b69eae009581beca1.html 谢谢大佬，可这个怎么用c语言代码运行出来呀

user: user-1
content: https://wenku.baidu.com/view/043b7f2b69eae009581beca1.html
user-0 提问: c语言文件操作，出现Runtime Error:Segmentation fault

回复:
user: user-1
content: 引用 8 楼 joeblack1314 的回复:[quote=引用 7 楼 自信男孩 的回复:] 你在自己的电脑上跑跑是不是可以的？ 是可以的，但在学校网上提交就不对，结果老显示-7632，估计是内置的输入的数太大了，但是把k设置成long long int 也不行，就很气[/quote] 你看网上输出的是多个，而你自己电脑上输出的是几个，看一下是否把所有的情况都考虑进去了

user: user-0
content: 引用 7 楼 自信男孩 的回复:你在自己的电脑上跑跑是不是可以的？ 是可以的，但在学校网上提交就不对，结果老显示-7632，估计是内置的输入的数太大了，但是把k设置成long long int 也不行，就很气

user: user-1
content: 你在自己的电脑上跑跑是不是可以的？

user: user-0
content: 引用 3 楼 自信男孩 的回复:[quote=引用 2 楼 joeblack1314 的回复:] [quote=引用 1 楼 自信男孩 的回复:] #include<stdio.h> #include<math.h>  int main() {      int n,e1,m,a[1000],i,b[1000],k;     FILE *fp;     fp=fopen("encryp.dic","r");     if (!fp)         exit(0);     //scanf("%d %d\n%d",&n,&e1,&m);     scanf("%d %d %d",&n,&e1,&m);     if (m >= 1000)         m = 1000-1;     for(i=1;i<=m;i++)     {           fscanf(fp,"%d",&a[i]);         k=(int)pow(a[i],e1);         b[i]=k%n;         printf("%d ",b[i]);     }      fclose(fp);     return 0;   } 供参考～ 还是不行啊兄弟[/quote] 我测试的没问题呢，结果输出和你的预计输出结果是一样的 你说的不行，是哪里不行。  [/quote]

user: user-2
content: 你把k定义成long long试下吧，应该是溢出了

user: user-1
content: #include<stdio.h> #include<math.h>  int main() {      int n,e1,m,a[1000],i,b[1000],k;     FILE *fp;     fp=fopen("encryp.dic","r");     if (!fp)         exit(0);     //scanf("%d %d\n%d",&n,&e1,&m);     scanf("%d %d %d",&n,&e1,&m);     if (m >= 1000)         m = 1000-1;     for(i=1;i<=m;i++)     {           if (fscanf(fp,"%d",&a[i]) == EOF)             break;         k=(int)pow(a[i],e1);         printf("%d ", k % n);         //b[i]=k%n;         //printf("%d ",b[i]);     }      fclose(fp);     return 0;   } 供参考～

user: user-1
content: 引用 2 楼 joeblack1314 的回复:[quote=引用 1 楼 自信男孩 的回复:] #include<stdio.h> #include<math.h>  int main() {      int n,e1,m,a[1000],i,b[1000],k;     FILE *fp;     fp=fopen("encryp.dic","r");     if (!fp)         exit(0);     //scanf("%d %d\n%d",&n,&e1,&m);     scanf("%d %d %d",&n,&e1,&m);     if (m >= 1000)         m = 1000-1;     for(i=1;i<=m;i++)     {           fscanf(fp,"%d",&a[i]);         k=(int)pow(a[i],e1);         b[i]=k%n;         printf("%d ",b[i]);     }      fclose(fp);     return 0;   } 供参考～ 还是不行啊兄弟[/quote] 我测试的没问题呢，结果输出和你的预计输出结果是一样的 你说的不行，是哪里不行。

user: user-0
content: 引用 1 楼 自信男孩 的回复:#include<stdio.h> #include<math.h>  int main() {      int n,e1,m,a[1000],i,b[1000],k;     FILE *fp;     fp=fopen("encryp.dic","r");     if (!fp)         exit(0);     //scanf("%d %d\n%d",&n,&e1,&m);     scanf("%d %d %d",&n,&e1,&m);     if (m >= 1000)         m = 1000-1;     for(i=1;i<=m;i++)     {           fscanf(fp,"%d",&a[i]);         k=(int)pow(a[i],e1);         b[i]=k%n;         printf("%d ",b[i]);     }      fclose(fp);     return 0;   } 供参考～ 还是不行啊兄弟

user: user-1
content: #include<stdio.h> #include<math.h>  int main() {      int n,e1,m,a[1000],i,b[1000],k;     FILE *fp;     fp=fopen("encryp.dic","r");     if (!fp)         exit(0);     //scanf("%d %d\n%d",&n,&e1,&m);     scanf("%d %d %d",&n,&e1,&m);     if (m >= 1000)         m = 1000-1;     for(i=1;i<=m;i++)     {           fscanf(fp,"%d",&a[i]);         k=(int)pow(a[i],e1);         b[i]=k%n;         printf("%d ",b[i]);     }      fclose(fp);     return 0;   } 供参考～
user-0 提问: c语言程序停止工作,求教！

回复:
user: user-0
content: 谢谢兄弟，已经懂了

user: user-1
content: #include<stdio.h> #include<stdlib.h>  int main() {     FILE *fp;     char s[100],a[100];      if( ( fp=fopen("a.txt","w+")) == NULL )     {         printf("can't open file!\n");         exit(-1);     }      //scanf("%s",&s);     scanf("%s",s);     fprintf(fp,"%s",s);   //文件写成功后fp会指向后面未被写的位置     rewind(fp);    //让fp指针重置，重新指向文件开头。     //fscanf(fp,"%s",&a);     fscanf(fp,"%s", a);     printf("%s",a);     fclose(fp);     return 0;   } 供参考～

user: user-0
content: 明白了，感谢大佬

user: user-2
content: 在fscanf(fp,"%s",&a);之前加一句 fseek(fp, 0L, SEEK_SET); ~~~~~~~~~~ 因为你在前面写文件，这时候文件指针位置是跟随着写的，已经到文件末尾 你读文件末尾是读不到东西的
user-0 提问: 关于C的几个问题

回复:
user: user-1
content: 大小端是针对不同机器而言的，本机上不用担心这个问题

user: user-2
content: int *b = &a; *b=&a; 上面代码的两个*意义不同 第一个*，是代表类型，也就是定义了一个名字为b，类型为int*的变量 下面这个*，用来取内容，也叫解引用，也就是取出b这个int*指针的内容，它的内容是一个int类型，而你&a得到的是一个int*类型，int=int*，这样赋值，肯定会出错 你要想不报错 直接 b=&a就好了

user: user-3
content: 定义的时候，int *b * 是类型说明符  定义之后 * 是地址访问符

user: user-4
content: int *b = NULL, *b=&a 这里b已经定义，因此*b就是对b指向内存的引用。 int *b = &a;是定义并初始化； 第二个问题，楼主最好能写个程序自己验证一下。
user-0 提问: 想知道问题出在哪里

回复:
user: user-1
content: #include<stdio.h> #include <stdlib.h>  int substract (int **a,int m,int n); int i,j,M,N,m,n,r; int main() {     //int  substract (int a[10][10],int m,int n);     printf("请输入矩阵的行与列：");     scanf("%d %d",&M,&N);     //int A[M][N];     int **A = (int **)malloc(sizeof(int *) * M);     if (!A)         exit(0);     for (i = 0; i < M; i++) {         A[i] = (int *)malloc(sizeof(int) *N);         if (!A[i])             exit(0);     }     for (i=0;i<M;i++)         for(j=0;j<N;j++)             scanf("%d",&A[i][j]);     r=substract(A,M,N);     printf("\n");     return 0; } int substract (int **a,int m,int n) {     int max,min;     for(j=0;j<n;j++)     {         max=a[0][j];         min=a[0][j];         for(i=1;i<m;i++)         {if(a[i][j]>max) max=a[i][j];             if(a[i][j]<min) min=a[i][j];}         printf("%d\n",max-min);     } } C语言不支持不定数组长度，因此如果行和列都不确定，可以考虑用动态申请空间的方法，建议楼主把释放内存的操作加上～

user: user-0
content: 求助 谢谢！
user-0 提问: 小白求助

回复:
user: user-1
content: cpoy_string(a,b);   //不是cpoy是copy 单词拼写错误：

user: user-2
content: #include <stdio.h> #include <stdlib.h>  int main() {     void copy_string(char from[],char to[]);     char a[]="I am a teacher.";     char b[]="You are a student.";     printf("string a=%s\nstring b=%s\n", a, b);     printf("copy string a to string b:\n");     copy_string(a, b);      //注意是copy_string     printf("\nstring a=%s\nstring b=%s\n", a, b);     return 0;  } void copy_string(char from[],char to[])  {  	int i = 0;  	while(from [i] != '\0')  	{         to[i] = from[i];         i++;     }     to[i] = '\0';  }

user: user-0
content: 引用 1 楼 自信男孩的回复:cpoy_string(a,b);   //不是cpoy是copy 单词拼写错误： 啊，发现了，谢谢谢谢
user-0 提问: 关于*(p--) = *(p-1)的拆分

回复:
user: user-0
content: 引用 1 楼 真相重于对错 的回复:你是要从后往前计算吗？请贴出全部代码？  代码不是我写的，不要骂我，我也不知道他想干啥。 只是我打断点跟进到*(p--) = *(p-1)这一行的时候， 发现结果跟自己想像的不太一样，有点不明白。  #include <stdio.h>  void fun(char* p, char value) { 	while (*p != '\0') 	{ 		p++; 	} 	p--; 	while (*(p + 1) < value) 	{ 		*(p--) = *(p - 1); 		*(p--) = value; 	}  	printf("%s", p); }  int main() { 	char p[] = "54679", value = '3'; 	fun(p, value); 	return 0; }

user: user-0
content: 引用 2 楼 qybao 的回复:这个要看编译器的，因为语句本身语义有歧义 如果是=左边先运算，那就是你说的后者的情况，即先=左边p--，再把=右边的*(p-1)赋给*p。 如果是=右边先运算，就是先=右边的*(p-1)赋给*p，再=左边p-- 好像c++15以后统一等号右边优先运算  是的，我试了一下， 使用GNU gcc编译器编译的情况是:   先=左边p--，再把=右边的*(p-1)赋给*p； 而使用MSVC++ 15.0（VS2017）编译器的情况是:  先=右边的*(p-1)赋给*p，再=左边p--

user: user-1
content: 或许可以用逗号表达式测试一下编译器对 表达式=表达式 处理的优先级 int main() {     int a[]={1,2,3};     int *p = &a[2];     printf("%p\n", p);     (printf("左:%p,%d\n", p, *p), *(p--)) = (printf("右:%p,%d\n", (p-1), *(p-1)), *(p-1));     printf("%p,%d,%d\n", p, *p, *(p+1));     return 0; }

user: user-1
content: 这个要看编译器的，因为语句本身语义有歧义 如果是=左边先运算，那就是你说的后者的情况，即先=左边p--，再把=右边的*(p-1)赋给*p。 如果是=右边先运算，就是先=右边的*(p-1)赋给*p，再=左边p-- 好像c++15以后统一等号右边优先运算

user: user-2
content: 你是要从后往前计算吗？请贴出全部代码？

user: user-3
content: 引用 7 楼 docker_007 的回复:[quote=引用 6 楼 自信男孩 的回复:] p--; *pt = *(p-1); 你没发现p-1的p已经是p--之后的p了吗？  我当然知道啊，这段代码本来就是我拿来举例说明问题的。我晕[/quote] 知道，为啥还要提问呢？没明白你要提什么问题。

user: user-0
content: 引用 6 楼 自信男孩 的回复:p--; *pt = *(p-1); 你没发现p-1的p已经是p--之后的p了吗？  我当然知道啊，这段代码本来就是我拿来举例说明问题的。我晕

user: user-3
content: p--; *pt = *(p-1); 你没发现p-1的p已经是p--之后的p了吗？
user-0 提问: C语言求答案

回复:
user: user-1
content: 11,p取a的地址，*p就是a原来的值，再加上b后结果赋值给a，等价于a=a+b

user: user-0
content: 引用 1 楼 自信男孩的回复:a=*p + b;等价a = a+b;即11 非常感谢大佬

user: user-2
content: a=*p + b;等价a = a+b;即11

user: user-3
content: #include <stdio.h> #include <stdlib.h> int main() {     int a = 10, b = 1;     int * p = &a;     a = *p + b;     printf("%d", a); }  运行结果：a = 11
user-0 提问: 判断线性表为满为什么需要maxsize-1

回复:
user: user-1
content: 所以为啥要减一啊  我感觉L->last>=maxsize就可以了

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

user: user-3
content: 她讲错了，就是你想的那样，因为我的老师讲的就是L.length=MAXSIZE，（加上>当然更稳妥了）毕竟L.length代表的就是数组的元素个数，线性表中记录的个数。至于评论区的数组下标减一从0开始计数，我觉得和那些没有关系，length代表的是个数，和位序有什么关系

user: user-0
content: 引用 1 楼 真相重于对错 的回复：从 0开始计数maxsize=数组长度=length    会吗？

user: user-0
content: 引用 4 楼 bug10086 的回复：从0开始，线性表最后一位下标是maxsize-1，当等于时表示已经装满了，大于就更不用说了它这里的maxsize-1不是下标啊，是个数，maxsize代表的数字不等于length吗

user: user-0
content: 引用 3 楼 yiyefangzhou24 的回复：int a[3]，实际上是a[0],a[1],a[2]但是长度还是3啊

user: user-4
content: 从0开始，线性表最后一位下标是maxsize-1，当等于时表示已经装满了，大于就更不用说了

user: user-5
content: int a[3]，实际上是a[0],a[1],a[2]

user: user-6
content: 因为L->length是要做数组下表的，若下表是maxsize，那么数组越界了～

user: user-7
content: 从 0开始计数

user: user-7
content: “不-1也可以”什么意思？？？？？ 我看不懂你在说什么？如果不明白，把代码贴出来，我可以告诉你。

user: user-0
content: 引用 12 楼 真相重于对错 的回复：length 是要求大于等于maxsize-1，或者大于等于maxsize，差别不大，不过是后面代码加一，减一的问题。 具体你还有看其他的代码。就是说，不-1也可以？

user: user-7
content: length 是要求大于等于maxsize-1，或者大于等于maxsize，差别不大，不过是后面代码加一，减一的问题。 具体你还有看其他的代码。

user: user-0
content: 引用 10 楼 真相重于对错 的回复：我觉得我已经说的相当清楚了。因为我没看到你的全部代码，我猜测那么length应该代表的是下标。。 否则，如果允许length等于2的话 L->elem[2+1]=L->elem[2]，不成立。。。这是前面的定义 #define Elem type int; typedef struct { 	Elem type lelm[maxsize]; 	int length; }seqlist;

user: user-7
content: 我觉得我已经说的相当清楚了。因为我没看到你的全部代码，我猜测那么length应该代表的是下标。。 否则，如果允许length等于2的话 L->elem[2+1]=L->elem[2]，不成立。。。

user: user-0
content: 引用 8 楼 真相重于对错 的回复：引用 6 楼 xiaojiaxi_ 的回复:[quote=引用 4 楼 bug10086 的回复：]从0开始，线性表最后一位下标是maxsize-1，当等于时表示已经装满了，大于就更不用说了它这里的maxsize-1不是下标啊，是个数，maxsize代表的数字不等于length吗 看你下边那句代码 for(k=L->length;k>=i;i--) L->elem[k+1]=L->elem[k] 如果L->length == maxsize-1; 那么  L->elem[maxsize-1+1]=L->elem[maxsize-1]; 也就是 L->elem[maxsize]=L->elem[maxsize-1]; 又因为elem应该是个数组，长度为maxsize,下标最大为maxsize-1；所以上述语句超过了elem的长度，越界了[/quote]elem确实是数组elem[maxsize]，如果这个maxsize取3，那length取maxsize-1也就是2时，顺序表还没满啊，还是可以插入啊

user: user-7
content: 引用 6 楼 xiaojiaxi_ 的回复:引用 4 楼 bug10086 的回复：从0开始，线性表最后一位下标是maxsize-1，当等于时表示已经装满了，大于就更不用说了它这里的maxsize-1不是下标啊，是个数，maxsize代表的数字不等于length吗 看你下边那句代码 for(k=L->length;k>=i;i--) L->elem[k+1]=L->elem[k] 如果L->length == maxsize-1; 那么  L->elem[maxsize-1+1]=L->elem[maxsize-1]; 也就是 L->elem[maxsize]=L->elem[maxsize-1]; 又因为elem应该是个数组，长度为maxsize,下标最大为maxsize-1；所以上述语句超过了elem的长度，越界了
user-0 提问: 这个sprintf为啥没问题？

回复:
user: user-1
content: 你对不可预知的理解有问题  不可预知是 无法确定有没有问题 不是保证会有问题

user: user-2
content: sprintf影响了第17个字节，但对于下一行的printf来讲没有任何的影响，因为printf函数对于内存是读的操作，但由于你的sprintf越界访问，1、就像你说的，第17年字节被其它变量使用的话，会导致其它变量的值不确定。2、如果第17字节是系统所使用的，操作系统的保护功能可能会中止程序的运行，也有可能直接让系统崩溃，在win98是测试过类似的情况，当字越界的很厉害，就死机了。3、这种越界如果精心构造，利用操作系统的漏洞获取目标计算机的shell,让其它执行某个程序。

user: user-3
content: VS2015调试，是越界添加了'\0'，最终能输出，但是程序再输出后会报错。

user: user-4
content: 数组越界是未定义行为，因此可能成功，可能失败。  建议用snprintf

user: user-5
content: 为什么要有问题(O_O)?
user-0 提问: 数据结构链表问题

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:[quote=引用 2 楼 Excel_lent 的回复:] [quote=引用 1 楼 自信男孩 的回复:] 楼主用C编译器编译吧，&作为形参，是C++支持的语法～  可以传二重指针~  我用的是浙江大学PTA的平台，我学的纯c语言，那是不是我就不能写（&L）这类语句？用devc编写的时候好像能通过[/quote] &是C++的语法～如果编译不通过，那就用二重指针吧[/quote] LinkList Read()是表示这个函数类型是LinkList 型，结构指针型吗？我们没有学C语言较高级的知识，看起数据结构有点吃力

user: user-1
content: 引用 2 楼 Excel_lent 的回复:[quote=引用 1 楼 自信男孩 的回复:] 楼主用C编译器编译吧，&作为形参，是C++支持的语法～  可以传二重指针~  我用的是浙江大学PTA的平台，我学的纯c语言，那是不是我就不能写（&L）这类语句？用devc编写的时候好像能通过[/quote] &是C++的语法～如果编译不通过，那就用二重指针吧

user: user-0
content: 引用 1 楼 自信男孩 的回复:楼主用C编译器编译吧，&作为形参，是C++支持的语法～  可以传二重指针~  我用的是浙江大学PTA的平台，我学的纯c语言，那是不是我就不能写（&L）这类语句？用devc编写的时候好像能通过

user: user-1
content: 楼主用C编译器编译吧，&作为形参，是C++支持的语法～  可以传二重指针~
user-0 提问: 跪求大神指点！

回复:
user: user-1
content: #include <stdio.h> /*发现是奇数，补1，  */ void add_odd(int a[], int num) {     int i = 1;     for (; i < num; i++)     {         if (a[i] % 2 != 0)         {             a[i]++;         }      } } /*相等返回1， 不相等返回0,表示还要继续分*/ int check(int a[], int num) {     int equal = 1;     int i = 1;     for (; i < num; i++)     { 		if(a[i] != a[1]) 			return 0;	      } 	return equal; }  void main() {      int i, count = 0, a[11] = {0, 10, 2, 8, 22, 16, 4, 10, 6, 14, 20};      /***********SPACE***********/      while (1)     {         if(1 == check(a, 11)){             printf("count=%d number=%d\n", count, a[1]);             break;         }  		add_odd(a, 11);		//补奇数, 有可能补完就相等了,         if(1 == check(a, 11)){             printf("count=%d number=%d\n", count, a[1]);             break;         } 		/*************/         a[0] = 0;   //因为a[0]总是用来保存a[1]的一半         for(i = 1; i < 11; i++){             a[i-1] = a[i -1] /2 + a[i] /2;         }         a[10] = a[10] /2 + a[0];         count++;     } }
user-0 提问: 求解怎么可以反推出公式里的值

回复:
user: user-1
content: // elf_hash_chain = 0x0d00a9e9 	size_t v15 = 0x985B8C3D; 	size_t* elf_hash_chain = 0; 	size_t v16; 	do  	{ 		v16 = (((unsigned int)&elf_hash_chain[56102] & (v15 << 7) ^ v15) << 15) & 0xEFC60000 ^ (unsigned int)&elf_hash_chain[56102] & (v15 << 7) ^ v15; 	} while (elf_hash_chain = (size_t*)((size_t)(elf_hash_chain)+1) , v16 != 0x58199ABD && elf_hash_chain); 	 	v16 = (((unsigned int)&elf_hash_chain[56102] & (v15 << 7) ^ v15) << 15) & 0xEFC60000 ^ (unsigned int)&elf_hash_chain[56102] & (v15 << 7) ^ v15; 	printf("%p, %p, %p", v15, v16, elf_hash_chain);

user: user-0
content: 引用 2 楼 user-1 的回复:&elf_hash_chain[56102]  表取地址而已（== elf_hash_chain+56102），与内部值无关  公式应该怎么改？当 v15 = 0x985B8C3D 时 v16 = 0x58199ABD

user: user-1
content: &elf_hash_chain[56102]  表取地址而已（== elf_hash_chain+56102），与内部值无关
user-0 提问: c需要关于数值转换为hex的问题

回复:
user: user-1
content: 直接对数组进行赋值就行啦，在内存中就是以16进制的方式保存的。 	unsigned char buff[4] = { 0 }; 	buff[2] = 3; 	buff[3] = 52;

user: user-2
content: 引用 5 楼 自信男孩 的回复:可以用强转，比如 int a = 0x352; unsigned char buf[4]; memcpy(buf, &a, 4); 这样就放到buf里了。 其实也不用用buf这个变量，也可以 ((unsigned char *)&a)[0], ((unsigned char *)&a)[1], ((unsigned char *)&a)[2], ((unsigned char *)&a)[3], 需要注意下大小端的情况，先在一个小程序里试一下，然后了解大端和小端的情况再考虑发过去

user: user-2
content: 可以用强转，比如 int a = 0x352; unsigned char buf[4]; memcpy(buf, &a, 4); 这样就放到buf里了。 其实也不用用buf这个变量，也可以 ((unsigned char *)&a)[0], ((unsigned char *)&a)[1], ((unsigned char *)&a)[2], ((unsigned char *)&a)[3],

user: user-3
content: 引用 3 楼 不解释、 的回复:因为现在是这种情况，就是352这个数据可能是这种组合形式（xxxxxxxx），收到设备的指令hex为 00 00 03 34，然后这些数据转为10进制是 0  0  3  52，按上面那种组合形式就是00352，去掉前面的0，就是352（就是说这个352可能是组合的值），所以现在就是要反过来，将352转为 00 00 03 34，该怎么实现，大佬指点一下 不用这么麻烦吧，直接全部转网络字节序，不分设备，大端小端的，接收方再转回来。

user: user-0
content: 因为现在是这种情况，就是352这个数据可能是这种组合形式（xxxxxxxx），收到设备的指令hex为 00 00 03 34，然后这些数据转为10进制是 0  0  3  52，按上面那种组合形式就是00352，去掉前面的0，就是352（就是说这个352可能是组合的值），所以现在就是要反过来，将352转为 00 00 03 34，该怎么实现，大佬指点一下

user: user-0
content: 引用 1 楼 user-4的回复:字节不是这个意思  你描述得太乱 无法理解  352  4个字节的内容是 0x00 0x00 0x01 0x60 不是03一个字节 52一个字节 我意思是能否把352分成3和52，然后再以这种转为16进制！！就是原数据两个两个的拆分开，再把拆分后的转为16进制

user: user-4
content: 字节不是这个意思  你描述得太乱 无法理解  352  4个字节的内容是 0x00 0x00 0x01 0x60 不是03一个字节 52一个字节
user-0 提问: c语言gets函数不起作用

回复:
user: user-1
content: 在控制台中通过键盘输入数据时，以回车键作为结束标志。当输入结束后，键盘输入的数据连同回车键一起被输入到输入缓冲区中。在程序中第一次调用getchar()函数从输入缓冲区中读取一个字节的数据。需要注意的是，如果此时在程序中第二次调用getchar()函数，因为此时输入缓冲区中还有回车键的数据没有被读出，第二个getchar()函数读出的是回车符。 以上节选自《C++中getchar()的使用方法》 希望能够帮到你！ 另外你的两段代码中，n和N都没有指定值，for怎么能循环起来呢？

user: user-2
content: 引用 1 楼 自信男孩 的回复:gets是遇到换行符返回，因此第一个如果不加getchar，那么输入n之后输入的'\n'就会被gets（第一个）接收，直接返回。要有getchar，我也有这个问题，受教了

user: user-3
content: gets是遇到换行符返回，因此第一个如果不加getchar，那么输入n之后输入的'\n'就会被gets（第一个）接收，直接返回。
user-0 提问: 【新手求助】C语言sscanf从字符串中提取指定的几个字符串并打印

回复:
user: user-0
content: 引用 4 楼 自信男孩 的回复:#include <stdio.h> #include <string.h>  int main(void) {     char str[] = "04-06 00:04:15.667 24906 24906 E AndroidRuntime: FATAL EXCEPTION: main";     char substr[32], tmpstr[64], *pstr;     int len;       pstr = str;     len = strlen(str);     while (pstr < str+len && sscanf(pstr, "%s", substr)) {         puts(substr);         pstr += strlen(substr);     }      return 0; }  运行一下这个程序，你就可以了解到格式化的输入是怎么样的～   虽然不是我想要的，但是还是结贴吧，谢谢大佬的回答  以下是我的想法： 我想用C/C++实现一个通过过滤adb日志的闪退关键字并且截图功能，速度要很快的，因为闪退瞬间还要执行截图的adb命令能抓到闪退前的页面，哪个语言效率快就用哪个实现 首先是通过 popen执行"adb logcat -c && adb logcat"命令，然后在日志中找是否存在“FATAL EXCEPTION”的关键字（闪退时会有），能尽量快，能不循环遍历就不循环，缩减时间。 目前还差过滤关键字符集还未实现,以下是我的代码：   #include <stdio.h> #include <stdlib.h> #include <string.h> #include<regex> #include <iostream>  using std::cout; using std::endl; int _System(const char * cmd, char *pRetMsg, int msg_len, char *key) { 	FILE * fp; 	char * p = NULL; 	int res = -1; 	char s1[1024] ;  	if (cmd == NULL || pRetMsg == NULL || msg_len < 0) 	{ 		printf("命令输入不能为空/内存不足\n"); 		return -1; 	} 	 	if ((fp = _popen(cmd, "r")) == NULL) 	{ 		printf("Popen Error!\n"); 		return -2; 	} 	else 	{ 			while (!feof(fp)) { 			//还差过滤关键字未实现 				if(fscanf(fp,"%s", s1)){ 					//如果读取的字符中存在“FATAL EXCEPTION”或“FATAL”关键字就执行adb截图命令 					system("adb -s HFKGK19921000041 shell \" LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 720x1440@720x1440/0 -s > /sdcard/ExceptionScrenn/200.png\""); 				} 				  			} 	} }  int main() { 	char *key = ".*FATAL EXCEPTION.*"; 	char *cmd = "adb logcat -c && adb logcat"; 	char a8Result[125] = { 0 }; 	 	_System(cmd, a8Result, sizeof(a8Result), key);  	return 0; }

user: user-1
content: #include <stdio.h> #include <string.h>  int main(void) {     char str[] = "04-06 00:04:15.667 24906 24906 E AndroidRuntime: FATAL EXCEPTION: main";     char substr[32], tmpstr[64], *pstr;     int len;       pstr = str;     len = strlen(str);     while (pstr < str+len && sscanf(pstr, "%s", substr)) {         puts(substr);         pstr += strlen(substr);     }      return 0; }  运行一下这个程序，你就可以了解到格式化的输入是怎么样的～

user: user-0
content: 引用 1 楼 自信男孩 的回复:sscanf格式化，以空格或回车作为分隔符。  建议楼主用写个程序自己验证一下～   大佬快来帮解答啊，又分拿

user: user-0
content: 就是不知道规则才格式化匹配不对咯    意思参考这个帖子 https://bbs.csdn.net/topics/390810095 知道的大佬帮忙解答下

user: user-1
content: sscanf格式化，以空格或回车作为分隔符。  建议楼主用写个程序自己验证一下～
user-0 提问: 数据结构疑问

回复:
user: user-1
content: 题主说的应该是&运算符吧，这个表示返回，也就是每执行一次这个函数，都需要返回（return)这个L，这是这个函数运行所特殊需要的。

user: user-2
content: 那个是引用！

user: user-3
content: 类似于 **L 的作用吧。
user-0 提问: 输入一个二进制数，输出它的16位二进制数。

回复:
user: user-1
content: 引用 3 楼 chxchxkkk 的回复:并没有越界，他的循环是从1到16。 循环次数没错，但数组下标错，数组下标是从0开始算的，所以是0到15

user: user-2
content: 数组越界～数据越界是未定义行为，所以可能运行没问题，也可能出错～

user: user-3
content: for(i=1;i<=16;i++) i 最大值 16  a[16] 就越界了

user: user-4
content: 引用 2 楼 qybao 的回复:你先弄清楚数组a[16]的下标是从什么开始到什么结束吧，应该从0到15，但是你用了16，数组越界了 并没有越界，他的循环是从1到16。

user: user-1
content: 你先弄清楚数组a[16]的下标是从什么开始到什么结束吧，应该从0到15，但是你用了16，数组越界了

user: user-5
content: 什么意思？ 输入一个二进制数，输出一个二进制数？？？？
user-0 提问: c语言

回复:
user: user-1
content: Description 输入10个学生，每个学生的数据包括学号、姓名、3门课的成绩。定义结构体类型表示学生类型，输入10个学生的数据， 计算每个学生的平均成绩。按平均成绩由高到低输出所有学生信息，成绩相同时按学号从小到大输出。  { 输入格式 10个学生信息，每行一个学生  输入样例 1 aaa 50 60 70 2 bbb 50 50 50 3 ccc 60 70 80 4 ddd 40 40 40 5 eee 70 80 90 6 fff 30 30 30 7 ggg 80 90 100 8 hhh 20 20 20 9 iii 100 100 100 10 jjj 10 10 10  输出样例 9 iii 100 100 100 7 ggg 80 90 100 5 eee 70 80 90 3 ccc 60 70 80 1 aaa 50 60 70 2 bbb 50 50 50 4 ddd 40 40 40 6 fff 30 30 30 8 hhh 20 20 20 10 jjj 10 10 10 } #include <stdio.h>  struct data {     int num;     char name[100];     float score[3];     float avg, sum; };  int main() {     int i,j;     struct data stu[10],tmp;     for(i=0; i<10; i++)     {         printf("请输入学生的学号：");         scanf("%d", &stu[i].num);          printf("请输入学生的姓名：");         scanf("%s", stu[i].name);          stu[i].sum = 0;         for(j = 0; j < 3; j++)         {             printf("请输入学生的第%d门成绩：",j+1);             scanf("%f", &stu[i].score[j]);             stu[i].sum += stu[i].score[j];         }          stu[i].avg = stu[i].sum / 3;         printf("该名学生的平均成绩为：%.2f", stu[i].avg);         printf("\n\n");     }      for(i=0; i<9; i++)         for(j=0; j<9-i; j++)         {             if (stu[j].avg < stu[j+1].avg)             {                 tmp = stu[j];                 stu[j] = stu[j+1];                 stu[j+1] = tmp;             }             else if (stu[j].avg == stu[j+1].avg)             {                 if (stu[j].num > stu[j+1].num)                 {                     tmp = stu[j];                     stu[j] = stu[j+1];                     stu[j+1] = tmp;                 }             }         }      for(i=0; i<10; i++)     {         printf("%d %s %.0lf %.0lf %.0lf\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2]);     }     return 0; }  涉及结构体的使用，题目类似，仅供参考
user-0 提问: C语言

回复:
user: user-1
content: 还有你第三行应该是： int i,sum=0;  要加逗号和分号的。

user: user-1
content: 自己看一下。 a=1,b=100 sum=5050   #include <stdio.h>  void main() {     int a,b,sum=0,i;     scanf("%d%d",&a,&b);     for(i=a; i<=b; i++) sum+=i;     printf("sum=%d",sum); }   你的代码： i如果是表示起始位置，那就是对的。 i如果是表示终止位置，那就是错的。  正确的在1楼回复了。

user: user-0
content: 引用 1 楼 user-1的回复:我想知道你i是用来记录什么的。  如果i是起始位置，那么i=1，输出就是5050，答案是对的。   #include <stdio.h>  void main() {     int i,sum=0;     printf("请输入一个i的值");     scanf("%d",&i);     while(i<=100) {         sum=i+sum;         i++;     }     printf("sum=%d",sum); }    如果i是终止位置，那么i=100时，答案时5050.  #include <stdio.h>  void main() {     int i,sum=0;     printf("请输入一个i的值");     scanf("%d",&i);     while(i) {         sum+=i;         i--;     }     printf("sum=%d",sum); }  你能告诉错误之处吗，然后把正确的写给我看看吗

user: user-1
content: 我想知道你i是用来记录什么的。  如果i是起始位置，那么i=1，输出就是5050，答案是对的。   #include <stdio.h>  void main() {     int i,sum=0;     printf("请输入一个i的值");     scanf("%d",&i);     while(i<=100) {         sum=i+sum;         i++;     }     printf("sum=%d",sum); }    如果i是终止位置，那么i=100时，答案时5050.  #include <stdio.h>  void main() {     int i,sum=0;     printf("请输入一个i的值");     scanf("%d",&i);     while(i) {         sum+=i;         i--;     }     printf("sum=%d",sum); }
user-0 提问: c小胖在线求答案，请各路大神指点迷津～

回复:
user: user-0
content: 引用 2 楼 Jacob Cai的回复:  #include <stdio.h> #include <stdlib.h> int main() {     int m, n;     int i;     printf("请输入两个数字：");     scanf("%d", &m);     scanf("%d", &n);     for(i = 1;; i++)     {         if(i % n == 0 && i % m == 0)         {             break;         }     }     printf("%d", i); }   谢谢大佬

user: user-0
content: 引用 1 楼 simple 小白的回复:你可以在里面加一个比较，比较出m,n的大小 然后i=大的这个数，从输入最大的数开始找 例如： #include<stdio.h> int main() {     int m, n, temp, i;     printf("Input m & n:");     scanf("%d%d", &m, &n);     if(m<n)      {         temp = m;         m = n;         n = temp;     }     for(i=m; i>0; i++)           if(i%m==0 && i%n==0)         {             printf("%d\n", i);             break;         }      return 0; } 谢谢大佬

user: user-1
content: #include <stdio.h> #include <stdlib.h> int main() {     int m, n;     int i;     printf("请输入两个数字：");     scanf("%d", &m);     scanf("%d", &n);     for(i = 1;; i++)     {         if(i % n == 0 && i % m == 0)         {             break;         }     }     printf("%d", i); }

user: user-2
content: 你可以在里面加一个比较，比较出m,n的大小 然后i=大的这个数，从输入最大的数开始找 例如： #include<stdio.h> int main() {     int m, n, temp, i;     printf("Input m & n:");     scanf("%d%d", &m, &n);     if(m<n)      {         temp = m;         m = n;         n = temp;     }     for(i=m; i>0; i++)           if(i%m==0 && i%n==0)         {             printf("%d\n", i);             break;         }      return 0; }
user-0 提问: 请问大佬windows上EOF必要性

回复:
user: user-1
content: 引用 楼主 ?Victor.?? 的回复:在windows系统下  ctrl+z好像在\n刷完之后才起作用  while( (c = getchar()) != EOF )  这种表达式想要ctrl+z起作用，必须之前有\n  while( (c = getchar()) != EOF && c != '\n')  这种表达式ctrl好像根本起不到作用，因为要先输一个\n，所以就把(c = getchar()) != EOF屏蔽掉了  那么不如直接用\n了，EOF必要性不大  我表达的好像不是很清楚  有没有大佬有类似经历呢 那还是有区别的，如果只要'\n'，那就不能多行输入了；但是加上EOF，就可以多行输入了，所以多行输入的时候EOF还是必要的。

user: user-2
content: Linux下我试了bash和zsh也都是这样的，可能是因为shell是行缓冲，只有敲下回车输入的东西才会发给程序

user: user-3
content: EOF最早应该是在UNIX上的一个概念，UNIX一切皆文件，但是在windows的定义下面，EOF没有那么重要，所以好像定义处理起来没有那么严格，也导致一些没有随时可响应EOF机制。个人理解，不对的勿喷
user-0 提问: 应该是比较老的标准

回复:
user: user-1
content: 引用 6 楼 ?Victor.?? 的回复:[quote=引用 5 楼 自信男孩 的回复:] 对于EOF, LINUX下输入ctrl+d Windows下输入ctrl+z  while( (c = getchar()) != EOF )     {          putchar( c );          sum += c;      } 这个循环，不应该是c每次读取一个字符然后和EOF比较  不相等就执行putchar()吗，也就是输入一个输出一个  但实际是输入一串，然后输出一串  请问是为什么呢 [/quote] 因为标准输入是行缓冲，需要输入回车才会将输入的内容刷到内存，否则是在输入缓存里。因此只有输入回车才会执行getchar()

user: user-0
content: 引用 5 楼 自信男孩 的回复:对于EOF, LINUX下输入ctrl+d Windows下输入ctrl+z  while( (c = getchar()) != EOF )     {          putchar( c );          sum += c;      } 这个循环，不应该是c每次读取一个字符然后和EOF比较  不相等就执行putchar()吗，也就是输入一个输出一个  但实际是输入一串，然后输出一串  请问是为什么呢

user: user-1
content: 对于EOF, LINUX下输入ctrl+d Windows下输入ctrl+z

user: user-0
content: 引用 3 楼 qybao 的回复:[quote=引用 2 楼 ?Victor.?? 的回复:] 嗯，谢谢大佬  我先输入字符串， 然后\n, 然后ctrl+z, 然后\n， 输出的sum值是不是还包括了一个\n的值 输入的sum应该只包含第一个\n ,第二个\n理论上应该是进不了while循环的[/quote]  比较神奇的是，必须\n才能EOF

user: user-2
content: 引用 2 楼 ?Victor.?? 的回复:嗯，谢谢大佬  我先输入字符串， 然后\n, 然后ctrl+z, 然后\n， 输出的sum值是不是还包括了一个\n的值 输入的sum应该只包含第一个\n ,第二个\n理论上应该是进不了while循环的

user: user-0
content: 引用 1 楼 user-3 的回复:键盘按Ctrl+Z输入EOF信号  嗯，谢谢大佬  我先输入字符串， 然后\n, 然后ctrl+z, 然后\n， 输出的sum值是不是还包括了一个\n的值

user: user-3
content: 键盘按Ctrl+Z输入EOF信号
user-0 提问: C语言问题

回复:
user: user-1
content: 百度，求二元一次方程的整数解。

user: user-2
content: #include <stdio.h>  int main(void) {     int i,j;      //for (i=1; i<=422; i++)     for (i=0; i<=422; i++)     {         //for (j=1; j<= 384; j++)         for (j = 0; j<= 384; j++)         {             if (50.8 * i + 55.8 * j == 21450) {                 printf("i = %d, j = %d\n", i, j);                 break;             }         }         if (j <= 384)             break;     }      printf("i = %d, j = %d\n", i, j);      return 0; } 供参考～

user: user-3
content: 这是要求 x, y的值吗，供参考  #include <stdio.h>  int main(void) { 	int i,j; 	double x, y; 	for (i=1; i<=422; i++) 	{ 		for (j=1; j<= 384; j++) 		{ 			if (50.8 * i + 55.8 * j == 21450) 			{ 				x = i; 				y = j; 			} 		} 	} 	 	printf("x = %.2lf, y = %.2lf\n", x, y); 	 	return 0; }
user-0 提问: 有没有高手帮忙解决读取二进制文件到二维vector，谢谢

回复:
user: user-1
content: 所谓的vector 这种类型，其实有个称呼叫做BMO(Big Memory Object) ,这种类型也很好理解，也就是所类里面包含一个或多个指针字段，这些指针指向了大的内存对象。 举个例子 class A{     T *ptr; public:    } 这种类型非常重要，因为这种类型的存在，才造成拷贝构造函数，移动构造，析构函数，赋值操作符等必须自定义，而不能用编译器自动提供的。 因此，把它写入文件，不能直接read,或 write,因为那样，你写入和读出只是个地址，而不是地址里面的内容。 你那样读对于一维，可能没有问题。但对于二维，就会出问题。

user: user-0
content: 我是指vector的数据结构是这样的

user: user-1
content: 不要把vector写入到文件中，而是把vector中的数据写入文件中

user: user-0
content: 两个一维的元素个数不同，但是已知

user: user-0
content: 这个二维数组是这样的：  vector<int>> V;  vector <vector<int>> VV;   V.push_back(33); V.push_back(13); V.push_back(71);    VV.push_back(V);V.clear();   V.push_back(24); V.push_back(35); V.push_back(63); V.push_back(26);  V.push_back(45);    VV.push_back(V);V.clear();  数据情况是上面这样的，也就是元素个数是已知的。是不是就知道了一维分隔，请指点。

user: user-2
content: 除非文件中有一维的分隔符，不然不能将各个一维数据分别开。
user-0 提问: 不理解下面指针的含义，求解。

回复:
user: user-1
content: 可以简单地把&理解为取地址的运算符，运行结果就是b的地址；*可以理解为取内容的运算符，可以取出指针指向的内容。为了便于理解，可以分别尝试printf("%d",p)和printf("%d",*p)，看一看输出的结果有什么区别。必然是一个输出地址码，一个输出值。

user: user-2
content: 你理解的都没错，只是你对这个语句的理解错了 int *p=&b;   // 相当于两个语句； int *p; p = &b; ============ 假设你来设计C语言语法，现在有个需求，需要在变量定义的时候进行初始化。 如果是个整型，你也许会想 int b = 5; 嗯，这样很直观，也很完美； 要是一个指针变量呢？  int *p = &b;?很直接。 还有其他办法吗？ int *p =???,, int *p是在做什么事情？这里的* 是解引用吗？ 在定义的时候，*是用来表明这个变量的与众不同，表明p是一个指针变量，然后*号使命结束。

user: user-3
content: int *p 定义一个 int 类型的指针 p,  int *p = &b, &在这里是取地址的意思， 把指针p指向变量 b 的地址。 *p 是取出 指针 p 指向的变量 b 的值，这里就是 5 了。

user: user-4
content: 你这个 2 怎么回事， 5 吧
user-0 提问: C语言关于float和double的指定精度问题（非格式化打印）

回复:
user: user-1

user: user-2
content: 感谢分享！！1

user: user-3
content: 过来学习一下

user: user-4
content: 学习一下技术

user: user-5
content: wahahahah

user: user-6
content: 你为什么要减少保留的位数

user: user-1

user: user-7
content: 过来学习学习。

user: user-8
content: 学习了，谢谢大佬激烈的讨论

user: user-9
content: 学习了，谢谢。

user: user-10
content: 学习了，谢谢

user: user-0
content: 引用 21 楼 user-11的回复:[quote=引用 20 楼 不解释、 的回复:] [quote=引用 19 楼 user-11的回复:]sprintf格式化是有四舍五入处理的。 我知道，这操作相当于是先把数据格式化为自己想要精度的字符串，然后再字符串转成浮点型数据，最后将这个转换后的数据发送，    前面都正常，就是在发送的时候，这个数据就变成了好多位小数;这个json函数得参数类型就是double类型的，跟这个有没有关系？ 还有这个转换后的浮点型数据在做为参数传递的时候，会不会后面已经补0了？[/quote] 这个应该是你用的json库的时候转换的问题，你还是详细查一下使用[/quote] 嗯好的，谢谢！

user: user-11
content: 引用 20 楼 不解释、 的回复:[quote=引用 19 楼 user-11的回复:]sprintf格式化是有四舍五入处理的。 我知道，这操作相当于是先把数据格式化为自己想要精度的字符串，然后再字符串转成浮点型数据，最后将这个转换后的数据发送，    前面都正常，就是在发送的时候，这个数据就变成了好多位小数;这个json函数得参数类型就是double类型的，跟这个有没有关系？ 还有这个转换后的浮点型数据在做为参数传递的时候，会不会后面已经补0了？[/quote] 这个应该是你用的json库的时候转换的问题，你还是详细查一下使用

user: user-0
content: 引用 19 楼 user-11的回复:sprintf格式化是有四舍五入处理的。 我知道，这操作相当于是先把数据格式化为自己想要精度的字符串，然后再字符串转成浮点型数据，最后将这个转换后的数据发送，    前面都正常，就是在发送的时候，这个数据就变成了好多位小数;这个json函数得参数类型就是double类型的，跟这个有没有关系？ 还有这个转换后的浮点型数据在做为参数传递的时候，会不会后面已经补0了？

user: user-11
content: sprintf格式化是有四舍五入处理的。

user: user-0
content: 引用 16 楼 user-11的回复:[quote=引用 15 楼 user-11 的回复:] [quote=引用 14 楼 不解释、 的回复:] [quote=引用 12 楼 Behard的回复:]如果要这样，*100 传递整数，告诉对方单位为 0.01 即可，最简单的应用是电子体温计测量就是这样的 36.0 °C给出的值为 360，单位 0.1°C 你是说我这边直接传递一个整数值过去吗？还是说怎么操作的？我这边的要求就是最终得结果！！如果是两位小数，就以两位小数的数值发送[/quote] 这个你测试下如下代码: char tmpstr[64]; sprintf(tempstr,"%.2lf",a); double tempdouble=atof(tempstr); 再添加这个到json,如果还不行那就是json处理函数对数据有处理造成的,看有没有格式化精度的[/quote] [/quote] 这种结果是建立在小数点后一位不是5得情况下出现了，如果是5那就是正常值，不知道原因是什么

user: user-0
content: 还是不行，还是那个结果！！😌😌

user: user-11
content: 引用 15 楼 user-11 的回复:[quote=引用 14 楼 不解释、 的回复:] [quote=引用 12 楼 Behard的回复:]如果要这样，*100 传递整数，告诉对方单位为 0.01 即可，最简单的应用是电子体温计测量就是这样的 36.0 °C给出的值为 360，单位 0.1°C 你是说我这边直接传递一个整数值过去吗？还是说怎么操作的？我这边的要求就是最终得结果！！如果是两位小数，就以两位小数的数值发送[/quote] 这个你测试下如下代码: char tmpstr[64]; sprintf(tempstr,"%.2lf",a); double tempdouble=atof(tempstr); 再添加这个到json,如果还不行那就是json处理函数对数据有处理造成的,看有没有格式化精度的[/quote]

user: user-11
content: 引用 14 楼 不解释、 的回复:[quote=引用 12 楼 Behard的回复:]如果要这样，*100 传递整数，告诉对方单位为 0.01 即可，最简单的应用是电子体温计测量就是这样的 36.0 °C给出的值为 360，单位 0.1°C 你是说我这边直接传递一个整数值过去吗？还是说怎么操作的？我这边的要求就是最终得结果！！如果是两位小数，就以两位小数的数值发送[/quote] 这个你测试下如下代码: char tmpstr[64]; sprintf(tempstr,"%.2lf",a); double tempdouble=atof(tempstr); 再添加这个到json,如果还不行那就是json处理函数对数据有处理造成的,看有没有格式化精度的

user: user-0
content: 引用 12 楼 Behard的回复:如果要这样，*100 传递整数，告诉对方单位为 0.01 即可，最简单的应用是电子体温计测量就是这样的 36.0 °C给出的值为 360，单位 0.1°C 你是说我这边直接传递一个整数值过去吗？还是说怎么操作的？我这边的要求就是最终得结果！！如果是两位小数，就以两位小数的数值发送
user-0 提问: c语言基础

回复:
user: user-1
content: double的格式控制符是%lf，%f是float的

user: user-0
content: 引用 2 楼 无矣的回复:可以在输入之后在打印一下number的值，看是不是你输入的值。还有不要用== 0.0，浮点数之间不要使用==符号比较 好的谢谢😜

user: user-0
content: 引用 1 楼 Italink的回复:double的格式控制符是%lf，%f是float的 是的懂了，谢谢了

user: user-2
content: 可以在输入之后在打印一下number的值，看是不是你输入的值。还有不要用== 0.0，浮点数之间不要使用==符号比较
user-0 提问: 求解

回复:
user: user-1
content: 引用 1 楼 ?Victor.?? 的回复:2 5  后三个是垃圾值，也可能被编译器自动赋0  不对，a[10]越界了，是未知的值

user: user-1
content: 2 5  后三个是垃圾值，也可能被编译器自动赋0
user-0 提问: C语言求解，，感谢大佬

回复:
user: user-1
content: 那就告诉他，基础作业，必须自己做  做错了贴代码来问

user: user-0
content: 引用 1 楼 寻开心的回复:全局变量 int fArray[50] = {1,1,};  void func1() {     for (int i=2; i<=45; i++ )           fArray[i] = fArray[i-1] + fArray[i-2]; }  有了这个数组， 第二个和第三个函数以及主函数自己写吧。 基础题目就是要自己练习的 我弟问的，可我不会呀。

user: user-0
content: 引用 1 楼 寻开心的回复:全局变量 int fArray[50] = {1,1,};  void func1() {     for (int i=2; i<=45; i++ )           fArray[i] = fArray[i-1] + fArray[i-2]; }  有了这个数组， 第二个和第三个函数以及主函数自己写吧。 基础题目就是要自己练习的 重点是我O基础

user: user-1
content: 全局变量 int fArray[50] = {1,1,};  void func1() {     for (int i=2; i<=45; i++ )           fArray[i] = fArray[i-1] + fArray[i-2]; }  有了这个数组， 第二个和第三个函数以及主函数自己写吧。 基础题目就是要自己练习的

user: user-2
content: 支持4楼，自己先学习尝试着写一下，遇到难点了再贴代码问，这样才能提高。
user-0 提问: 为什么scanf被跳过了？

回复:
user: user-1
content: 引用 3 楼 墙角黑猫 的回复:谢谢，解决了，本来用fflush(stdin)清楚除输入缓存但是还不行，后来查一下才发现，gcc不支持，采用了别的清楚输入缓存的方法！  fflush(stdou);是可行的，对于fflush(stdin);有些编译器是未定义的，即不确定好用。

user: user-0
content: 谢谢，解决了，本来用fflush(stdin)清楚除输入缓存但是还不行，后来查一下才发现，gcc不支持，采用了别的清楚输入缓存的方法！

user: user-2
content: 第一个scanf时，你输入数据后有回车符，这个回车符被77行的scanf读取了。

user: user-3
content: 在哪清空输入缓存的？只看到了清空输出缓存。
user-0 提问: C语言*统计字符个数*新人求教*我的代码输入时怎么一直不会停止啊

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:for i到80循环是不对的，用户不一定输入80个字符，所以应该是在for循环里判断str[i]是不是换行符‘\n'，如果是就break for循环。 谢谢大佬

user: user-1
content: for i到80循环是不对的，用户不一定输入80个字符，所以应该是在for循环里判断str[i]是不是换行符‘\n'，如果是就break for循环。
user-0 提问: c语言链表该在什么情况下使用

回复:
user: user-1
content: 适用于什么情况，就要看和其他数据结构的对比了 数组   顺序存储，随机访问， 一定定义好长度，扩充不易 队列   适合先入先出 栈      适合先入后出 链表   适合顺序访问，数量变化频繁

user: user-2
content: 离散存储，或者插入删除操作较多的时候用链表比较好

user: user-3
content: 数组解决的是定长的，而链表解决的是不定长的。链表能解决数组定义过长导致内存浪费和定义过短不易扩张的难题

user: user-4
content: 要存储的数据比较多、频繁使用添加、删除数据的情况下用链表好些。
user-0 提问: 建立判定素数的自定义函数，对随机的 n 个数，判断哪些是素数

回复:
user: user-1
content: 给你写个判断是否是素数的函数，剩下的LZ自己写吧 int isPNum(int num) { //是素数返回1，否则返回0     for (int i=2; i<num/2; i++) {         if (num%i==0) return 0;     }     return num > 1; }
user-0 提问: c语言

回复:
user: user-0
content: 引用 2 楼 自信男孩的回复:把scanf改成scanf_s，然后在网上找一下scanf_s的用法，vs不支持scanf而是它的安全函数scanf_s 解决了，谢谢改为scanf_s就行了

user: user-0
content: 引用 1 楼 ?Victor.??的回复:scanf_s  或者在预处理指令(#include<stdioh.>后面)加上  #pragma warning(disable : 4996) 哇😭，解决了谢谢😜，把scanf改为scanf_s就行了，

user: user-1
content: 把scanf改成scanf_s，然后在网上找一下scanf_s的用法，vs不支持scanf而是它的安全函数scanf_s

user: user-2
content: scanf_s  或者在预处理指令(#include<stdioh.>后面)加上  #pragma warning(disable : 4996)
user-0 提问: 读入三角形三条边长。 如果输入合法，就计算这个三角形的周长。否则， 提示输入有误。 如果任意两条边的和大于第三边

回复:
user: user-1
content: 并且关系是对的，只是if后面多了个分号，去掉它就可以了

user: user-2
content: if((a+b>c)&&(a+c>b)&&(b+c>a)); 条件错了，不是并且是或者的关系！
user-0 提问: 请问这个求完全数的程序哪里有问题呢

回复:
user: user-0
content: 引用 1 楼 ?Victor.??的回复:#include<stdio.h>  int main() { 	int a,i,j,count = 0,sum = 0; 	printf("输入一个＞1的数\n"); 	scanf("%d",&a); 	for(i = 1; i<=a; i++) 	{ 		for(j = 1; j<=i/2 ; j++) 		{ 			if(i % j == 0) 			{ 				sum += j; 			} 		} 		if(sum == i) 		{ 			count++; 			printf("第%d个完全数是%d\n",count,i); 		} 		sum = 0; 	} 	return 0; }  供参考~ 你的这个可以正常运行，能帮我看看我的那个是哪里有问题呢，运行以后没有结果。

user: user-1
content: 目测sum循环结束后没有重置为0

user: user-1
content: #include<stdio.h>  int main() { 	int a,i,j,count = 0,sum = 0; 	printf("输入一个＞1的数\n"); 	scanf("%d",&a); 	for(i = 1; i<=a; i++) 	{ 		for(j = 1; j<=i/2 ; j++) 		{ 			if(i % j == 0) 			{ 				sum += j; 			} 		} 		if(sum == i) 		{ 			count++; 			printf("第%d个完全数是%d\n",count,i); 		} 		sum = 0; 	} 	return 0; }  供参考~
user-0 提问: for循环 末尾循环体 中st[i+1] = getchar(),i++和st[i++] = getchar()有什么区别

回复:
user: user-1
content: 区别主要是在i的值有没有变化和s[x]中的x是多少。如果是s[i+1]和s[i++]那么下表的值是不一样的，s[i+1]当i=0时，s[i+1]是值s[1]但是s[i++]是s[0]然后i自增1.。

user: user-2
content: 前者是给str[i+1]赋值，后者是给str[i]赋值，注意i++的用法。你可以把后者改成str[++i]。
user-0 提问: 奇偶个数问题，devc++编译器下，if条件为1却跳过执行

回复:
user: user-0
content: 引用 1 楼 m0_46108109 的回复:ji+ji+1;}//这里错了 谢谢！！

user: user-1
content: ji+ji+1;}//这里错了
user-0 提问: leetcode 的第17提题，请帮忙找出代码中的问题

回复:
user: user-1
content: void AddString(struct List **list, char *combination) { 	int len; 	struct List *nw; 	if (!combination) { return ; } 	//if (!len) { return ; }   //你的len在哪赋值的？ 	len = strlen(combination); 	if (!len) { return ; }  	nw = (struct List*)malloc(sizeof(struct List)); 	if (!nw) { return ; } 	nw->s = strdup(combination); 	nw->next = NULL;  	if (*list == NULL) { 		*list = nw; 	} else { 		nw->next = (*list)->next; 		(*list)->next = nw; 	} } 供参考～
user-0 提问: 求大佬帮忙

回复:
user: user-1
content: #include <stdio.h> #include <math.h>  float get_result(float a, char opt, float b);  int main(void) { 	char opt1, opt2; 	float a, b, c, result; 	int choice;  	printf("Please input your choice: (1: two number opt, 2: three nubers opt)"); 	scanf("%d", &choice);  	if (choice != 1 && choice != 2) { 		printf("Input error!\n"); 		return -1; 	}  	if (choice == 1) { 		printf("Please input your operation: (eg: 1*2)"); 		scanf("%f%c%f", &a, &opt1, &b); 		printf("=%.2f\n", get_result(a, opt1, b)); 		return 0; 	} 	printf("Please input your operation: (eg: 1*2*3)"); 	scanf("%f%c%f%c%f", &a, &opt1, &b, &opt2, &c); 	if (opt1 == '*' || opt1 == '/') { 		result = get_result(a, opt1, b); 		printf("=%.2f\n", get_result(result, opt2, c)); 	} else if (opt2 == '*' || opt2 == '/') { 		result = get_result(b, opt2, c); 		printf("=%.2f\n", get_result(a, opt1, result)); 	}  	return 0; }   float get_result(float a, char opt, float b) { 	float result;  	switch (opt) { 		case '+':  			result = a+b; 			break;  		case '-': 			result = a-b; 			break;  		case '*': 			result = a*b; 			break;  		case '/': 			if (fabsf(b) > 1e-6) 				result = a/b; 			break; 	}  	return result; }  供参考～  可以在这个基础上改一改～
user-0 提问: 求大佬指导一下c语言小程序！

回复:
user: user-0
content: 引用 4 楼 自信男孩的回复:=赋值语句和==判断语句需要注意下，建议改成： '1' == str[i] 这样写成=，编译器能够提示错误（编译错误） 谢谢。已解决，确实是判断语句中应该是“==”

user: user-1
content: =赋值语句和==判断语句需要注意下，建议改成： '1' == str[i] 这样写成=，编译器能够提示错误（编译错误）

user: user-0
content: 引用 1 楼 user-2的回复:等于是==，少了一个= 阿好了。谢谢 没问题了

user: user-0
content: 引用 1 楼 user-2的回复:等于是==，少了一个= 嗯嗯 改了，结果不是全1了，但是结果还是输出了原来的字符串？

user: user-2
content: 等于是==，少了一个=
user-0 提问: 哪位大神帮我看看我的程序到底哪儿的错误，程序功能：输入一串字符，找到其中最长的单词并输出该单词和单词长度

回复:
user: user-1
content: #include<stdio.h> #include<string.h>  char A[999]; char C[999]; int n = 0;  void F() { 	char b[999]; 	int i = 0, j = 0; 	int t = 0; 	//while (A[i] != '\n') 	while (1) 	{ #if 1 		if (A[i] == ' ' || A[i] == '\n') { 			b[j] = 0; 			t = strlen(b); 			printf("t = %d\n", t); 			if (t > n) { 				n = t; 				strcpy(C, b); 			} 			j = 0;  		} else { 			b[j++] = A[i]; 		} 		if (A[i] == '\n') 			break; 		i++; #else 		//for (; A[i] >= 65 && A[i] <= 90 || A[i] >= 97 && A[i] <= 122;) 		for (; (A[i] >= 65 && A[i] <= 90) || (A[i] >= 97 && A[i] <= 122);) 		{ 			b[j] = A[i]; 			i++; 			j++; 		} 		b[j] = 0;   //for '\0' 		t = strlen(b); 		printf("t = %d\n", t); 		if (t > n) 		{ 			n = t; 			strcpy(C, b); 		} 		j = 0; 		i++; 		//continue; #endif 	} } int main() { 	int i = 0; 	printf("please input charater: "); 	for (; 1;) 	{ 		A[i] = getchar(); 		//if (A[i] = '\n') 		if (A[i] == '\n') 		{ 			break;  		} 		i++; 	} 	printf("\n"); 	F(); 	//printf("最长的单词是:%s\t共%d个字母\n", C[999], n); 	printf("最长的单词是:%s\t共%d个字母\n", C, n); 	return 0; }  供参考～ 问题不止一处，建议对比代码找一下自己的问题

user: user-0
content: #include<stdio.h> #include<string.h> char A[999]; char C[999]; int n = 0; void F() { 	char b[999]; 	int i = 0, j = 0; 	int t = 0; 	while (A[i] != '\n') 	{ 		for (; A[i] >= 65 && A[i] <= 90 || A[i] >= 97 && A[i] <= 122;) 		{ 			b[j] = A[i]; 			i++; 			j++; 		} 		t = strlen(b); 		if (t > n) 		{ 			n = t; 			strcpy(C, b); 		} 		continue;  	} } int main() { 	int i = 0; 	printf("please input charater: "); 	for (; 1;) 	{ 		A[i] = getchar(); 		if (A[i] = '\n') 		{ 			break;  		} 		i++; 	} 	printf("\n"); 	F(); 	printf("最长的单词是:%s\t共%d个字母\n", C[0], n); 	return 0; }

user: user-0
content: #include<stdio.h> #include<string.h> char A[999]; char C[999]; int n = 0; void F() { 	char b[999]; 	int i = 0, j = 0; 	int t = 0; 	while (A[i] != '\n') 	{ 		for (; A[i] >= 65 && A[i] <= 90 || A[i] >= 97 && A[i] <= 122;) 		{ 			b[j] = A[i]; 			i++; 			j++; 		} 		t = strlen(b); 		if (t > n) 		{ 			n = t; 			strcpy(C, b); 		} 		continue;  	} } int main() { 	int i = 0; 	printf("please input charater: "); 	for (; 1;) 	{ 		A[i] = getchar(); 		if (A[i] = '\n') 		{ 			break;  		} 		i++; 	} 	printf("\n"); 	F(); 	printf("最长的单词是:%s\t共%d个字母\n", C[999], n); 	return 0; }

user: user-0
content: 最后那个printf时那个%t写错了，是/t。发现一处错误。

user: user-2
content: 代码贴出来，还有人给你找一下错误。发个图片让人照着图片把代码敲下来吗？

user: user-0
content: 希望能帮我指出问题并解决。蟹蟹
user-0 提问: 求大佬看一下

回复:
user: user-1
content: 引用 2 楼 lsldlas的回复:引用 1 楼 Mrxlin 的回复:2^n-1        是11层吗 是的

user: user-0
content: 引用 1 楼 Mrxlin 的回复:2^n-1        是11层吗

user: user-1
content: 2^n-1