Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C++语言

回复:
user: user-1
content: 是否是写一个函数将字符数组中的x替换为y ##仅供参考 #include<stdio.h> #include<string.h> void RepChar(char s[],char x,char y) { 	for(int i=0;i<strlen(s);i++) 	{ 		if(s[i]==x) 			s[i]=y; 	} } int main() { 	char str[]="xycnbyxyx"; 	RepChar(str,'x','y'); 	printf("%s\n",str);	 } /*运行结果： yycnbyyyy */
user-0 提问: 在一个数列的 插入一个数 然后排序

回复:
user: user-0
content: 引用 1 楼 xws245925587 的回复:#include<stdio.h>  #ifndef _count_arry  #define _count_arry(a) (sizeof(a) / sizeof(a[0])) #endif  int main() { 	int a[6] = { 1,7,10,14,16 }; 	int i, j, x, t; 	scanf_s("%d", &x); 	a[5] = x;  	for (j = 0; j < _count_arry(a) - 1; j++) 	{ 		for (i = 0; i< _count_arry(a) - 1 - j; i++)           		{ 			if (a[i]>a[i + 1])   			{ 				t = a[i];       				a[i] = a[i + 1];     				a[i + 1] = t; 			} 		} 	}   	for (i = 0; i < 6; i++) 	{ 		printf("%d ", a[i]); 	} 	system("pause"); }   for (i = 0; i< _count_arry(a) - 1 - j; i++)          这里为什么要  -1啊 ，我减掉1后   就对了

user: user-0
content: _count_arry(a) (sizeof(a) / sizeof(a[0])) 这个有什么作用哦？？ 谢谢啦

user: user-1
content: #include<stdio.h>  #ifndef _count_arry  #define _count_arry(a) (sizeof(a) / sizeof(a[0])) #endif  int main() { 	int a[6] = { 1,7,10,14,16 }; 	int i, j, x, t; 	scanf_s("%d", &x); 	a[5] = x;  	for (j = 0; j < _count_arry(a) - 1; j++) 	{ 		for (i = 0; i< _count_arry(a) - 1 - j; i++) 		{ 			if (a[i]>a[i + 1])   			{ 				t = a[i];       				a[i] = a[i + 1];     				a[i + 1] = t; 			} 		} 	}   	for (i = 0; i < 6; i++) 	{ 		printf("%d ", a[i]); 	} 	system("pause"); }

user: user-0
content: 引用 1 楼 xws245925587 的回复:#include<stdio.h>  #ifndef _count_arry  #define _count_arry(a) (sizeof(a) / sizeof(a[0])) #endif  int main() { 	int a[6] = { 1,7,10,14,16 }; 	int i, j, x, t; 	scanf_s("%d", &x); 	a[5] = x;  	for (j = 0; j < _count_arry(a) - 1; j++) 	{ 		for (i = 0; i< _count_arry(a) - 1 - j; i++) 		{ 			if (a[i]>a[i + 1])   			{ 				t = a[i];       				a[i] = a[i + 1];     				a[i + 1] = t; 			} 		} 	}   	for (i = 0; i < 6; i++) 	{ 		printf("%d ", a[i]); 	} 	system("pause"); } 谢谢谢谢！！！

user: user-2
content: 引用 3 楼 果、失 的回复:[quote=引用 1 楼 xws245925587 的回复:]#include<stdio.h>  #ifndef _count_arry  #define _count_arry(a) (sizeof(a) / sizeof(a[0])) #endif  int main() { 	int a[6] = { 1,7,10,14,16 }; 	int i, j, x, t; 	scanf_s("%d", &x); 	a[5] = x;  	for (j = 0; j < _count_arry(a) - 1; j++) 	{ 		for (i = 0; i< _count_arry(a) - 1 - j; i++)           		{ 			if (a[i]>a[i + 1])   			{ 				t = a[i];       				a[i] = a[i + 1];     				a[i + 1] = t; 			} 		} 	}   	for (i = 0; i < 6; i++) 	{ 		printf("%d ", a[i]); 	} 	system("pause"); }   for (i = 0; i< _count_arry(a) - 1 - j; i++)          这里为什么要  -1啊 ，我减掉1后   就对了[/quote]因为你要用数组下标，而数组下标是从0开始的，代表数组中的第一个元素，下标值不能超过数组长度的那个数值，比如数组a[10],你的下标最多到a[9]

user: user-2
content: 引用 2 楼 果、失 的回复:_count_arry(a) (sizeof(a) / sizeof(a[0])) 这个有什么作用哦？？ 谢谢啦求出数组的长度，类似于字符串函数里面的strlen().
user-0 提问: 大一新生程序小白求助

回复:
user: user-1
content: stdio.h和math.h是不同的头文件，第一个头文件在你使用scanf/printf等这些基本上库函数时需要引入头文件，math.h是数学函数库，比如abs，sqrt等这些数学库时，需要引入这个头文件。 对于main的返回值是int还是void看编译器吧，这个无需纠结～   建议楼主不要纠结这两个问题，等你编写程序多的时候自然会理解和解决这两个问题。比如，math.h什么时候引入，你编写程序时，编译时不引入就会报错，那么你自然要解决编译报错问题，那么最终的解决就会考虑引入这个头文件，因此楼主还是多关注基础的知识点，多写，多调程序吧

user: user-2
content: 先安抚你一下，这个东西我保证你后面自然会懂，现在不管都行。然后我具体说一下，这个东西是c的头文件，里面有各种函数，如果你的程序要用他们那你就要把他写出来，这个#include<stdio.h>是一定会用的scanf和pringf这种基础函数都在里面，所以写程序不管三七二十一先写在前面，那个#include<math.h>里面有许多关于数学的函数。打个比方，你要做一个事情，你可以把所有工具先准备好，也就是把各个头文件都写出来摆在那里，就算不用也可以摆出来嘛，没什么影响；你也可以只把要用的工具摆出来，这样代码更简洁。至于那个void main是另外的东西这里就不说了

user: user-3
content: 这。。建议你先看几本基础入门书籍就不会问这种问题了。 不同的.h头文件包含不同的功能函数，实际需要哪些功能就包含对应的头文件。 main()函数前面的int和void表示的是返回值的类型
user-0 提问: c语音网络程序中用  recv函数接受数据会遇到不知道对方发送多长数据的问题

回复:
user: user-1
content: 加一个头部信息，来确定具体该获得具体多长的消息。

user: user-2
content: 比较省事的方法就是用一些类似libuv、libev等库，直接在回调函数中处理数据，不需要去关心数据到底啥时候来。 或者用select、epoll等来管理套接字。单独开线程接收也可以。

user: user-3
content: 用多线程吧，把接受单独放一个线程。或者使用套接字的非阻塞模式

user: user-4
content: 在独立的线程中等待。另外，如果是tcp的，最好定义一个数据结构，指定长度。因为tcp的流会连续到来，有可能尾巴上有半个包

user: user-0
content: 哪位给个答案

user: user-5
content: 业务数据加上个包头，在包头中记录数据长度。 接收数据后先解析数据长度，没有接收足长则继续。否则就退出循环。

user: user-6
content: recv 最后参数 用 MSG_PEEK, 可以窥探是否有数据
user-0 提问: C语言问题

回复:
user: user-1
content: 确实，二楼说得对，把1换成i，我也刚学到这

user: user-2
content: 你for语句里面判断条件打错了，形成了一个死循环

user: user-3
content: for (i = 1; 1 <= 10; i++)，这句里应该是"i<=10;"才对，楼主输入" 1 <= 10"这是数字 1 吧。

user: user-4
content: 1小于等于10，肯定停不下来啊
user-0 提问: 请大家帮忙给弟弟看一下 初学 找不出错误

回复:
user: user-0
content: 谢谢谢谢，小白难哭了

user: user-1
content: #include<stdio.h> #include<math.h> int main() {     float area, L, v, m;     float r = 1.4;     float M = 3.1415;     area = M * r * r;     L = 2 * M * r;     v = (M * r * r * r)*4 / 3;     m = 2 * M * r * r;     printf("所以圆的表面积为；%0.4f\n周长为：%f\n", area, L);     printf("所以球的体积为：%0.4f\n表面积为；%f\n",v,m);      return 0; } 都是缺少符号导致，建议看回教材

user: user-2
content: float r=1.4; float M=3.1415这两句前面的float可以省略，直接赋值：r=1.4;M=3.1415;

user: user-2
content: v=(M*r*r*r)4/3;这句改:v=(M*r*r*r)*4/3;

user: user-2
content: float area L v m;这句应该是这样的：float area,L,v,m;几个变量之间要有‘，’号。 L=2Mr；这句应该是这样的：L=2*M*r;必须要有‘*’号。 m=2Mr*r;这句同样的：m=2*M*r;
user-0 提问: 求解决！急！

回复:
user: user-1
content: n输入完，加if判断，修改如下： int count,i,n;     double grade,total,average;     total = 0;     count = 0;      printf("请输入学生数：");     scanf ("%d",&n);     if(n>=1)    {       printf("请输入%d个学生的成绩：",n);       for (i=1;i<=n;i++)       {         scanf ("%lf",&grade);         total = total + grade;         if (grade >= 60)            { count++;}       }       average = total/n;       printf ("平均成绩average = %.1f\n",average);       printf ("及格人数count = %d\n",count);    }    else    { printf("学生人数输入错误！");}        return 0;

user: user-2
content: if(n==0)    return 0;

user: user-0
content: 引用 2 楼 user-3的回复:你这写的是什么  这个当n=0的时候好像不行

user: user-0
content: 引用 3 楼 UIUI的回复:你的 count 为什么置 0 ?低于60的时候? 因为count是及格人数orz

user: user-2
content: 你的 count 为什么置 0 ?低于60的时候?

user: user-3
content: 你这写的是什么

user: user-1
content: #include <stdio.h> #include <iostream.h> //---------------------------------------------------------------------------  #pragma argsused int main(int argc, char* argv[]) {     int count,i,n;     double grade,total,average;     total = 0;     count = 0;      printf("请输入学生数：");     scanf ("%d",&n);      printf("请输入%d个学生的成绩：",n);     for (i=1;i<=n;i++)       {         scanf ("%lf",&grade);         total = total + grade;         if (grade >= 60)            {              count++;            }        }       average = total/n;       printf ("平均成绩 = %.1f\n",average);       printf ("及格人数 = %d\n",count);        return 0; }
user-0 提问: 小白问大家几个问题

回复:
user: user-0
content: 引用 2 楼 UIUI的回复:你定义的数组大小是 n-1 那么, 你循环读入的 最大下标应该为 n-1-1; 你读入n-1 个,当然有问题. 不知道你是什么编译器. 这个 int number[n-1];  怎么也编译能通过..... 确实是这样，对数组大小理解错了，感谢 至于编译器为什么能通过我也不知道

user: user-1
content: 你定义的数组大小是 n-1 那么, 你循环读入的 最大下标应该为 n-1-1; 你读入n-1 个,当然有问题. 不知道你是什么编译器. 这个 int number[n-1];  怎么也编译能通过.....

user: user-2
content: 第一个for循环后的那个scanf是多余的
user-0 提问: 我想问一下我错哪了，我没看出来，求教

回复:
user: user-1
content: #include<stdio.h>  int main() {     /*        题目名称：符合条件自然数         题目描述：编写程序，打印所有小于正整数data且可被11整除的自然数。           输入：从键盘输入一个正整数data         输出：输出所有小于data且可被11整除的自然数，数与数之间以一个空格做间隔，最后一个数后无多余字符。        */      /*     int a,i,c;      scanf("%d", &a);      //for(i=1;i<a-1;i++) {     for(i=1; i < a; i++) {          if (i%11==0)              printf("%d",i);          printf(" ") ;     }         c=i;         c=c%11;         if (c==0)         printf("%d",c);         else        */     int data, i;      scanf("%d", &data);      for (i = 0; i < data; i++) {         if (i % 11 == 0) {             if (i != 0)                 printf(" ");             printf("%d", i);         }     }     return 0;  } 供参考～  自然数应该是从0开始的吧

user: user-2
content: 小于正整数a 你的for循环for(i=1;i<a-1;i++){ 却是小于a-1的  举个例子 输入111  最后一个数本来是110  你的循环就少了110了  改一下：for(i=1;i<a;i++){
user-0 提问: 提领指向不完全类型指针

回复:
user: user-0
content: 谢谢。 感谢大佬

user: user-1
content: 链表的定义有问题  改一下 typedef struct queNode_c{ char data; struct queNode* next;  // struct queNode* last; } queNode;  这种用typedef定义的结构体相当于以下效果： struct queNode_c{ char data; struct queNode* next;  // 此时 queNode还没有定义呢 你用这个  编译器认识这是哪个啊  struct queNode* last; }  typedef queNode_c queNode； 改成以下的： typedef struct queNode_c{ char data; struct queNode_c* next;   struct queNode_c* last; } queNode;
user-0 提问: 求助求助，急急急，怎么写，大神帮帮忙，求这个程序补充内容

回复:
user: user-1
content: 示例：// //  // /*  *  栈操作  * */ #include <stdio.h> #include <stdlib.h> #define  N 50 栈大小 //结构体 栈 typedef struct stack {     int top; //栈顶位置     int data[N]; //数据 } STACK; //是否为空 int isEmpty(STACK * stack) {     if(stack->top == -1)     {         return 1;     }     return 0; } //是否已满 int isFull(STACK * stack) {     if(stack->top == N-1)     {         return 1;     }     return 0; }  //设为空 void setEmpty(STACK * stack) {     stack->top = -1; } //压栈 int push(STACK * stack, int data) {     if(isFull(stack))     {         printf("栈已满\n");         return -1;     }     stack->top += 1;     stack->data[stack->top] = data;  } //弹栈 int pop(STACK * stack) {     if(isEmpty(stack))     {         printf("栈已空");         return -1;     }     int num = stack->data[stack->top];     stack->top -= 1;     //printf("top=%d\n",stack->top);     return num;  } void test() {     printf("栈结构体类型大小:%d\n",sizeof(STACK));     printf("分配内存，并初始化:\n");     STACK * stack = (STACK *)calloc(1,sizeof(STACK)); //calloc分配内存： 元素个数 元素大小     if(stack == NULL)     {         printf("内存分配失败\n");         return;     }     printf("内存分配成功,地址为:%p\n",stack);     setEmpty(stack);     //压栈     for(int i = 0; i < N; i++)     {         printf("压入数据:%d\n",i);         push(stack,i);     }     //弹栈    while (!isEmpty(stack))    {        printf("弹栈:%d\n",pop(stack));    }     //释放内存     free(stack);  }  int main1(int agc, char * argv[]) {      test();     return 0; }
user-0 提问: 为什么会这样，free到底干了什么

回复:
user: user-1
content: free是针对malloc/realloc等在堆上申请空间的释放用的。用于标记申请的空间可以再次被申请了。

user: user-2
content: 其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-3
content: int main() {     int *p;     printf("%p %d\n",p,*p); //此时p未初始化 称之为野指针  也就是p本身地址未知->00400080  p指向的地址未知->17744     *p = 5;   //p本身的地址未知，那么你可能无法将p指向其他地址 因为此时p本身的地址你可能无权限访问       p=(int *)malloc(sizeof(int));  //此时给p初始化了  p的地址为0x55e5857e22a0     *p=5; //此时你可以将p指针指向其地址了 p =0x55e5857e22a0     *p=5     printf("%p %d\n",p,*p);       free(p); //free是释放p指向的地址  此时p=0x55e5857e22a0  *p=0     *p=6;  //将p指向另外一个地址 此时p=0x55e5857e22a0  *p=6       printf("%p %d\n",p,*p);//总结以下：free是释放p指向的地址 p指针本身的地址是不变的 所以如果你要释放一个地址，最好如下写：     free(p);     p = NULL;//只释放地址，本身地址不为null的指针叫迷途指针 在大的程序中很可能会出问题       return 0; }

user: user-4
content: 引用 楼主 学码就是爱好 的回复:但是下面程序释放了申请了内存为什么*P还会被赋值6？ #include <stdio.h> #include<malloc.h> int main() {     int *p;     p=(int *)malloc(sizeof(int));     *p=5;     printf("%p %d\n",p,*p);      free(p);     *p=6;      printf("%p %d\n",p,*p);      return 0; }  0x55e5857e22a0 5 0x55e5857e22a0 6 #include <stdio.h> #include <malloc.h> int main(void) {     int *p;     p=(int *)malloc(sizeof(int));     *p=5;     printf("%p %d\n",p,*p);      free(p); //这句执行后p就成为野指针，p指向的内存被释放，不归你程序所有     *p=6; //这句是非法访问      //如果在这里插入其他函数调用，你再试试     {        p=(int *)malloc(sizeof(int));        *p=5;        free(p);     }      printf("%p %d\n",p,*p);      return 0; }

user: user-5
content: 释放内存就是设置一个flag，告诉系统这块内存已经不用了，系统可以把这块内存拿给其他程序使用，但是系统不一定马上会把它分配给其它程序（要看其它程序malloc时是否刚好分配到这块内存），一时半会这块内存属于自由状态，所以继续使用该内存可能不会出错，相当于没有申请内存所有权就强行侵占内存使用。所以*p=6就属于这种行为，一时半会可能不会出错。如果该内存被其他程序分配申请使用权了，那*p=6可能就会报内存非法访问错误了。
user-0 提问: 时间超限

回复:
user: user-0
content: 引用 1 楼 自信男孩 的回复：while ((order = getchar()) == '\n') ; 改成这样试试 注意while末尾有分号，即getchar()得到的是'\n'则继续循环，否则退出～我懂了，是因为输入格式是 “数字 数字” 命令：ABCD...但是外面那个循环扫描不到EOF

user: user-0
content: 引用 1 楼 自信男孩 的回复：while ((order = getchar()) == '\n') ; 改成这样试试 注意while末尾有分号，即getchar()得到的是'\n'则继续循环，否则退出～在这里order是命令，就是ABCDEF是不同的命令￼，花括号里是根据不同的命令做出不同的指令，如果加上分号的话，{｝里就没有用了，可能是我没把题目说清楚。￼

user: user-1
content: while ((order = getchar()) == '\n') ; 改成这样试试 注意while末尾有分号，即getchar()得到的是'\n'则继续循环，否则退出～
user-0 提问: 计算机小白想要通过OJ作业

回复:
user: user-1
content: #include <stdio.h> #include <math.h>  int main() {     int a, b, c;     int sum = 0;     int count = 0;     int sure = 0;      scanf("%d %d %d", &a, &b, &c);     for(int i = a; i <= b; i++)     {         sum = 0;         for(int k = 1; k < i; k++)         {             if(i % k == 0)             {                 sum = sum + k;             }         }         if(fabs(i - sum)<= c)         {             sure = 1;             count++;             if(count != 0 && (count % 5) == 0)             {                 printf("%d\n",i);                 count = 0;             }             else             {                 printf("%d\t",i);             }          }      }     if(sure == 0)         printf("There is no proper number in the interval.\n");      return 0; } 给个样例给你，你看不懂的话问我就行。
user-0 提问: Time Limit Exceeded Length

回复:
user: user-1
content: #include<stdio.h>  //void sort(int s[]) void sort(int s[], int len) {     int t;     //for(int i=0;s[i]!='\0';i++)     for(int i=0; i < len;i++)         //for(int j=i+1;s[j]!='\0';j++)         for(int j=i+1; j < len;j++)             if(s[i]<s[j])             {                 t=s[i];                 s[i]=s[j];                 s[j]=t;             } }  int main() {     int n,m;     int a[3005],b[1005];     while(scanf("%d %d",&n,&m)!=EOF)     {         for(int i=0;i<n;i++)             scanf("%d",&a[i]);         int k=0;         for(int i=0;i<n;i++)             for(int j=i+1;j<n;j++){                 b[k]=a[i]+a[j];                 k++;             }         //sort(b);         sort(b, k);         for(int i=0;i<m;i++)             printf("%d ",b[i]);         printf("\n");     } } 供参考～  楼主是不是搞混了，'\0'是字符串的结束标记，不是int整型数的结束

user: user-0
content: 不过还是超时啊

user: user-0
content: 引用 1 楼 自信男孩的回复:#include<stdio.h>  //void sort(int s[]) void sort(int s[], int len) {     int t;     //for(int i=0;s[i]!='\0';i++)     for(int i=0; i < len;i++)         //for(int j=i+1;s[j]!='\0';j++)         for(int j=i+1; j < len;j++)             if(s[i]<s[j])             {                 t=s[i];                 s[i]=s[j];                 s[j]=t;             } }  int main() {     int n,m;     int a[3005],b[1005];     while(scanf("%d %d",&n,&m)!=EOF)     {         for(int i=0;i<n;i++)             scanf("%d",&a[i]);         int k=0;         for(int i=0;i<n;i++)             for(int j=i+1;j<n;j++){                 b[k]=a[i]+a[j];                 k++;             }         //sort(b);         sort(b, k);         for(int i=0;i<m;i++)             printf("%d ",b[i]);         printf("\n");     } } 供参考～  楼主是不是搞混了，'\0'是字符串的结束标记，不是int整型数的结束 是了 谢谢 昨天我也考虑到了是这个位置出了问题，但最后改来改去的把自己搞懵了
user-0 提问: c语言初学者求教

回复:
user: user-0
content: 我会了，谢谢大家

user: user-1
content: 把scanf改成scanf_s吧，其他不变；建议楼主从网上搜一下scanf_s的用法，尤其是对%s, %c等需要增加参数～

user: user-2
content: 微软的编译器现在那么霸道了？竟然是错误而不是警告？ 代码本身没问题，编译器让它有问题 看错误提示是，scanf被认为是不安全的（有内存越界的可能），所以编译器推荐你用scanf_s 其实用scanf_s反而还不利于移植，所以可以define一下_CRT_SECURE_NO_WARNNINGS 宏来忽略该错误提示

user: user-0
content: 谢谢了，我试试

user: user-3
content: 一般不同编译器99%的语法都是按照标准来的，当然不同编译器之间 也会有略微的不同。就像这个scanf函数，可能在别的编译器没有错误，但是到了微软的编译器里面，必须得用微软提供的“安全”的scanf_s函数才行。不过一般没有什么太大的错误 遇到了看一下错误提示小改一下就行

user: user-0
content: 引用 5 楼 user-3的回复:错误提示显示 scanf函数是不安全的 楼主可以试试下面这段代码 应该可以解决你的问题 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>  int max(int a, int b) { 	if (a > b) return a; 	else return b; }  int main() { 	int x, y,z; 	printf("请输入两个整数："); 	scanf("%d %d", &x, &y); 	z = max(x, y); 	printf("max=%d\n", z); 	return 0; } 代码仅供参考 谢谢了，这个我在书上没第一行就成功了，为什么实际操作就有了问题，这是编译器的问题？

user: user-3
content: 错误提示显示 scanf函数是不安全的 楼主可以试试下面这段代码 应该可以解决你的问题 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>  int max(int a, int b) { 	if (a > b) return a; 	else return b; }  int main() { 	int x, y,z; 	printf("请输入两个整数："); 	scanf("%d %d", &x, &y); 	z = max(x, y); 	printf("max=%d\n", z); 	return 0; } 代码仅供参考

user: user-0
content: 引用 2 楼 自信男孩的回复:把scanf改成scanf_s吧，其他不变；建议楼主从网上搜一下scanf_s的用法，尤其是对%s, %c等需要增加参数～ 行，我找找谢谢了

user: user-0
content: 引用 1 楼 qybao的回复:微软的编译器现在那么霸道了？竟然是错误而不是警告？ 代码本身没问题，编译器让它有问题 看错误提示是，scanf被认为是不安全的（有内存越界的可能），所以编译器推荐你用scanf_s 其实用scanf_s反而还不利于移植，所以可以define一下_CRT_SECURE_NO_WARNNINGS 宏来忽略该错误提示 这个代码加在哪里？我打了scanf_s调试时就成了空白
user-0 提问: while和switch

回复:
user: user-1
content: 少了break

user: user-2
content: 对于switch里的case语句后，你需要根据你的意图添加break语句来跳出当前的循环，否则系统就会默认为顺序向下执行

user: user-3
content: 楼主的switch中缺少break;如果在每个case后面加一个break;则会输出: fat hat cat 试试加上break;  不加break;则会顺序执行～第一次从0开始一次执行case 1, case 2, default，第二次从case 1执行，执行case 1, case 2, default以此类推～

user: user-4
content: 没有break; case语句最后如果有break就跟你想的一样了

user: user-5
content: 加break

user: user-6
content: case 0:printf_s("fat ");break; case 1:printf_s("hat ");break; case 2:printf_s("cat ");break; default:printf_s("oh no!");break; 你少了break

user: user-0
content: 我的理解是 分别打印3行 fat hat cat
user-0 提问: 将第一个字母变成第26个字母，第i个字母变成第（26-i+1）个字母

回复:
user: user-0
content: 谢谢，问题解决了，谢谢

user: user-1
content: 把最后一个else if删掉 没必要 其他看起来没问题，不要用ASCII值计算用字母代替  容易理解

user: user-2
content: 对于大小写，不同的操作这个是正确的。 //大写 b[i] = 26 - (a[i] - 'A') + 'A'; //小写 b[i] = 26 - (a[i] - 'a') + 'a'; 试试～

user: user-3
content: 引用 楼主 clear1over 的回复:有大佬帮忙看一下这个问题出在哪了吗？ 你这编译不通过吧？ 第二个else if没有构成完整的语句，也就是那后面啥都没接，你可以加个分号，表示空语句。 另外，你代码里最好还是不要直接用90、65等数字，用'Z'、'A'、'z'、'a'，这些字符本质上就是数字，用它用数字效果一样，还不如就用字符
user-0 提问: 一个小白想要通过OJ

回复:
user: user-0
content: 谢谢各位啦！

user: user-1
content: 引用 2 楼 自信男孩 的回复:[quote=引用 1 楼 5250 的回复:]#include <stdio.h> #include <string.h>  int main() {    char num[10];    memset(num, -1, sizeof(char) * 10);    scanf("%s", num);    for (int i = 0; i < 10; i++)    {       if (num[i] != -1)          printf("%c ", num[i]);    }    printf("\n");    return 0; }  供参考  这个程序，可以这么做： for (int i = 0; i < strlen(num); i++)[/quote]  谢谢

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>    void print_digit(unsigned long num);  int main(void) {     unsigned long num;      scanf("%lu", &num);       print_digit(num);     putchar(10);      return 0; }  void print_digit(unsigned long num) {     if (num == 0)         return;      print_digit(num / 10);     printf("%lu ", num % 10); }  供参考～  可以考虑使用递归函数，如上～

user: user-2
content: 引用 1 楼 5250 的回复:#include <stdio.h> #include <string.h>  int main() {    char num[10];    memset(num, -1, sizeof(char) * 10);    scanf("%s", num);    for (int i = 0; i < 10; i++)    {       if (num[i] != -1)          printf("%c ", num[i]);    }    printf("\n");    return 0; }  供参考  这个程序，可以这么做： for (int i = 0; i < strlen(num); i++)

user: user-1
content: #include <stdio.h> #include <string.h>  int main() {    char num[10];    memset(num, -1, sizeof(char) * 10);    scanf("%s", num);    for (int i = 0; i < 10; i++)    {       if (num[i] != -1)          printf("%c ", num[i]);    }    printf("\n");    return 0; }  供参考
user-0 提问: C语言中关于getchar()的问题

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

user: user-1
content: 仅供参考：#include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }  #include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-1
content: Format Specification Fields: scanf and wscanf Functions A format specification has the following form:  % [width] [{h | l | I64 | L}]type  The format argument specifies the interpretation of the input and can contain one or more of the following:   White-space characters: blank (' '); tab ('\t'); or newline ('\n'). A white-space character causes scanf to read, but not store, all consecutive white-space characters in the input up to the next non–white-space character. One white-space character in the format matches any number (including 0) and combination of white-space characters in the input.   Non–white-space characters, except for the percent sign (%). A non–white-space character causes scanf to read, but not store, a matching non–white-space character. If the next character in stdin does not match, scanf terminates.   Format specifications, introduced by the percent sign (%). A format specification causes scanf to read and convert characters in the input into values of a specified type. The value is assigned to an argument in the argument list.  The format is read from left to right. Characters outside format specifications are expected to match the sequence of characters in stdin; the matching characters in stdin are scanned but not stored. If a character in stdin conflicts with the format specification, scanf terminates, and the character is left in stdin as if it had not been read.

user: user-2
content: 因为printf("哈哈哈");改成 printf("哈哈哈\n"); scanf("%d",&y); getchar();//用于接收键盘输入数字y之后的从键盘输入的回车符

user: user-3
content: 只需一个就可以把，getchar()是为了吃掉scanf()留下的换行符啊........

user: user-2
content: scanf("%d",&y);   后边不跟    //getchar();就会发生段错误.
user-0 提问: 求大佬看看，

回复:
user: user-0
content: 看来我没读懂题  谢了

user: user-1
content: 第一行输出1组成部分数据 第二行输出2组成部分数据 ... 第九行输出9组成的数据 第十行输出0组成的数据 第十一行输出1组成部分数据 第十二行输出2组成的数据 等等，依次类推，这才是i%10的意思 然后就是按金字塔倒着打印  int main() {     int i, j, n;     scanf(“%d”, &n);     for(int i=n; i>0; i--) {         for(j=0; j<n-i; j++) printf(“ “); //打印空格         for(j=0; j<2*i-1; j++) printf(“%d”, (n-i+1)%10); //打印数据         printf(“\n”); //换行     }     return 0; }
user-0 提问: 如何按以下规则批量导出文件名到xls

回复:
user: user-0
content: 引用 3 楼 赵4老师 的回复:在Excel中数据、自文本、…… 能不能做到只把这些提取到txt？万分感谢

user: user-1
content: 在Excel中数据、自文本、……

user: user-1
content: 开始、运行、cmd cd /d 你这些文件所在文件夹的全路径比如"d:\dwffiles" dir /b N??_*.dwf >d:\tmp.txt 然后在Excel中导入d:\tmp.txt，指定_.作为列间隔字符

user: user-2
content: readdir查一下这个函数，可以拿到这些文件所在的目录，然后得到这个目录下的所有文件，得到文件名之后，然后写到xls中即可～

user: user-2
content: 引用 4 楼 稻壳粥的小迷弟 的回复:[quote=引用 3 楼 赵4老师 的回复:]在Excel中数据、自文本、…… 能不能做到只把这些提取到txt？万分感谢 [/quote] 提取到哪里都没问题，都需要打开文件，然后写文件，关闭文件的操作～
user-0 提问: ccf显示运行出错

回复:
user: user-1
content: #include<stdio.h> #include <stdlib.h>  int main() {     //int n,i,data=0,j,*a,*p,*q;     //a = (int*) malloc (n * sizeof(int));     //scanf("%d/n",&n);     int *arr, n, cnt = 0;     int i, j;     scanf("%d", &n);     arr = (int*) malloc (n * sizeof(int));     if (!arr)         return -1;      for(i=0; i<n; i++) {         scanf("%d",&arr[i]);     }      for (i = 0; i < n; i++) {         for (j = i+1; j < n; j++) {             if (abs(arr[i] - arr[j]) == 1) {                 //printf("abs(%d - %d) = 1\n", arr[i], arr[j]);                 cnt++;             }         }     }      printf("%d\n", cnt);  #if 0     p = a;     q = p+1;     for(i=0; i<n; i++) {         scanf("%d",&a[i]);     }      for(i=0; i<n; i++) {         for(j=1; j<n-i; j++) {             if(*p-*q==1||*p-*q==-1) {                 data++;                 break;             }             q++;         }         p++;         q=p+1;     }     printf("%d",data); #endif     return 0; } 供参考～  需要注意的是先scanf还是先malloc？scanf中不要有\n

user: user-0
content: 引用 1 楼 自信男孩 的回复:#include<stdio.h> #include <stdlib.h>  int main() {     //int n,i,data=0,j,*a,*p,*q;     //a = (int*) malloc (n * sizeof(int));     //scanf("%d/n",&n);     int *arr, n, cnt = 0;     int i, j;     scanf("%d", &n);     arr = (int*) malloc (n * sizeof(int));     if (!arr)         return -1;      for(i=0; i<n; i++) {         scanf("%d",&arr[i]);     }      for (i = 0; i < n; i++) {         for (j = i+1; j < n; j++) {             if (abs(arr[i] - arr[j]) == 1) {                 //printf("abs(%d - %d) = 1\n", arr[i], arr[j]);                 cnt++;             }         }     }      printf("%d\n", cnt);  #if 0     p = a;     q = p+1;     for(i=0; i<n; i++) {         scanf("%d",&a[i]);     }      for(i=0; i<n; i++) {         for(j=1; j<n-i; j++) {             if(*p-*q==1||*p-*q==-1) {                 data++;                 break;             }             q++;         }         p++;         q=p+1;     }     printf("%d",data); #endif     return 0; } 供参考～  需要注意的是先scanf还是先malloc？scanf中不要有\n 嗯嗯，如果只是把scanf放在malloc后面的话，评测结果是错误，不是运行错误，只有把指针操作去掉后才是满分，这是为什么呢

user: user-0
content: 嗯嗯，如果只是把scanf放在malloc后面的话，评测结果是错误，不是运行错误，只有把指针操作去掉后才是满分，这是为什么呢
user-0 提问: 求斐波那契数列N项，求助！

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

user: user-1
content: N<=2时，A没有赋值，所以A是不确定的，要么就在print(“1”)以后return，要么就把print(“1”)改成A=1

user: user-2
content: #include<stdio.h>  int main(void) {     int N,f1,f2,i,A;     f1=1;     f2=1;     scanf("%d",&N);     if(N<=2) {         printf("1");         return 0;     }     //if(N>2)     //{         for(i=3;i<=N;i++)         {             A=f1+f2;             f1=f2;             f2=A;         }     //}     printf("%d\n",A%2000000003);      return 0; } 供参考～  因为A没有初始化，输入1或2，会执行最后一个printf语句，由于A 是随机值，所以可能出现133；
user-0 提问: 丑数判断，输入后没输出，求助！

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

user: user-0
content: 为什么我看不到你们的回复？

user: user-1
content: #include<stdio.h>  const int arr[] = {2, 3, 5, 7};  int ppp(int a) {     //while(k=1)     //     unsigned int i;     while (1) {         for (i = 0; a && i < sizeof(arr)/sizeof(arr[0]);)             if (a % arr[i] == 0) {                 a /= arr[i];                 i = 0;                 continue;             } else {                 i++;             }         break;     }     if (a != 1)         return 0;     else         return 1;  #if 0     int q=0;     int k=1;     while(k==1)     {         if(a%2==0)         {             a=a/2;             continue;         }         if(a%3==0)         {             a=a/3;             continue;         }         if(a%5==0)         {             a=a/5;             continue;         }         if(a%7==0)         {             a=a/7;             continue;         }         k=0;     }     if(a==1)         q=1;      return q; #endif } int main (void) {     int N,i,a,b,s=0;     scanf("%d",&N);     for(i=1;i<=N;i++)     {         scanf("%d",&a);         b=ppp(a);         if(b==1)             s+=1;     }     printf("%d",s);     return 0; } 供参考～

user: user-0
content: 有人吗有人吗

user: user-2
content: while(k=1) 这是赋值 你应该写 ==

user: user-1
content: while(k==1) 供参考～  建议楼主对比一下这行代码～
user-0 提问: 关于C语言的算法，简单

回复:
user: user-1
content: 第一个程序里/a(y);这个a和()之间需要符号，应该是用*.即乘。其他地方也注意下～

user: user-0
content: 引用 3 楼 自信男孩的回复:scanf("%lf%d", &x, &n); 楼主的scanf缺少& 哦哦哦，最后一个忘了没有加，那个还有别的问题

user: user-1
content: scanf("%lf%d", &x, &n); 楼主的scanf缺少&

user: user-0
content: 我把所有变量都改成double了，我怕什么整除错误

user: user-0
content: 那个，scanf_s输入我都改成了%lf
user-0 提问: 求助c语言数据结构代码问题

回复:
user: user-0
content: 谢谢哇终于搞明白了这个代码了！ 感谢！！！

user: user-1
content: #include<stdio.h> #include<stdlib.h>  typedef struct Node{     int data;     struct Node *pNext; }NODE,*PNODE;  PNODE create_list(int n) {     int i;     int val;       PNODE pHead = (PNODE)malloc(sizeof(NODE));     if (NULL == pHead)     {         printf("分配失败, 程序终止!\n");         exit(-1);     }     PNODE pTail = pHead;     pTail->pNext = NULL;       for (i=0; i<n; ++i)     {         scanf("%d", &val);          PNODE pNew = (PNODE)malloc(sizeof(NODE));         if (NULL == pNew)         {             printf("分配失败, 程序终止!\n");             exit(-1);         }          pNew->data = val;         pNew->pNext = NULL;         pTail->pNext = pNew;         pTail = pNew;     }      return pHead; }  void traverse_list(PNODE pHead) {     PNODE p = pHead->pNext;      while(p!=NULL)     {         printf("%d ",p->data);         p = p->pNext;      }     printf("\n");     return; }  void sort(PNODE pHead,int *x) {     int i=1;     //PNODE p = (PNODE)malloc(sizeof(NODE));     PNODE p;     PNODE r = (PNODE)malloc(sizeof(NODE));     if (!r)         exit(0);     r->data = *x;     //r->pNext = NULL;      //p = pHead->pNext;     p = pHead;     //while(p!=NULL&&p->data>=x)     while(p->pNext && p->pNext->data <= *x)     {         i++;         p = p->pNext;     }      r->pNext = p->pNext;     p->pNext = r;     *x = i;  #if 0      r->data = x;     r->pNext = p->pNext;     p->pNext = r;     if(i==1)     {         r->data = x;         r->pNext = p;         pHead->pNext = r;     }     printf("%d",i); #endif }  int main() {     int n,x;     PNODE pHead = NULL;     while(scanf("%d", &n)!=EOF)     {         pHead =create_list(n);         scanf("%d",&x);         if(n==0)         {             //printf("%d", &x);             printf("%d", x);         }         else         {             sort(pHead, &x);             printf("%d\n", x);             traverse_list(pHead);          }     }      return 0; } 供参考～  楼主判断有问题，  //while(p!=NULL&&p->data>=x)     while(p->pNext && p->pNext->data <= *x) 是>=x还是<=x的问题。  其他问题建议对比代码找一下自己的问题～ 这里的x我用指针，目的是获取位置信息～
user-0 提问: 这个表达式是啥子意思嘞

回复:
user: user-0
content: 引用 3 楼 qybao的回复:因为 满足这个 a<0==b<0 就证明 a 和 b 是符号相同的 之后的如果满足 t<0 != a<0 就证明 t 和 a 是符号不相同的 t=a+b，a 和 b 符号相同，但相加结果的 t 的符号不相同，那说明什么？说明 t 溢出了 明白了，明白了，感谢，

user: user-1
content: 因为 满足这个 a<0==b<0 就证明 a 和 b 是符号相同的 之后的如果满足 t<0 != a<0 就证明 t 和 a 是符号不相同的 t=a+b，a 和 b 符号相同，但相加结果的 t 的符号不相同，那说明什么？说明 t 溢出了

user: user-0
content: 引用 1 楼 自信男孩的回复:代码呢？讨论这个问题总要有前提或者问题本身的代码吧～ 表达式是t=a-b；然后这个OF是一个条件码，如果t=a-b发生了有符号的溢出，OF等于1，没有发生有符号的溢出，OF=0；然后它就给出了这么一个逻辑运算来判断究竟有没有溢出，但是这个判断的逻辑运算我实在是搞不懂它的含义

user: user-2
content: 代码呢？讨论这个问题总要有前提或者问题本身的代码吧～
user-0 提问: 不知道那里错了，各位大神指点一下，鹅鹅鹅

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:2x是数学里的表达式，在编程语言里不能这么写，改成2 * x; ，太粗心了呀

user: user-1
content: 2x是数学里的表达式，在编程语言里不能这么写，改成2 * x;
user-0 提问: 按字典顺序对多个字符串排序

回复:
user: user-1
content: #include <stdio.h> #include <string.h>  main () {     char *t;     int i,j,n;//,p;     unsigned int arr_len;     //char *s[]={"pescal","basic","fortran","turbo C"};     const char *s[]={"pescal","basic","fortran","turbo C"};     printf("Enter n:");     scanf ("%d",&n); /*输入待排序字符串的个数n*/     arr_len = sizeof(s) / sizeof(s[0]);     if (n > arr_len)         n =  arr_len;     for (i=0;i<n-1;i++) /*用冒泡排序法*/     {         for (j=0;j<n-1-i;j++)         {             if (strcmp (s[j],s[j+1])>0)             {                 t = (char *)s[j];                 s[j] = s[j+1];                 s[j+1] = t;                 //strcpy (t,s[j]);                 //strcpy (s[j],s[j+1]);                 //strcpy (s[j+1],t);             }         }     }     //printf ("%d",p);     for (i=0;i<n;i++)     {         printf ("%s\n",s[i]);     }      return 0; } 供参考～  楼主的问题主要是对s指针的理解，楼主定义的是指针数组，即每个元素都是指针，而每个指针都指向了只读数据段上的字符串，而楼主在排序时对只读数据进行了写操作，所以应该会出现多错误～  直接交换指针指向的位置即可～  其他问题详见代码～
user-0 提问: 利用循环队列模拟缓存，每缓存5组数据一次性读出

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

user: user-1
content: //2019213020 #include <stdio.h> #include <stdlib.h>  #define MAX_SIZE 6   //每次缓存最大为五组数据  typedef struct {     int queue[MAX_SIZE];     int rear;     int front; }QUEUE,*pQUEUE;  void InitQueue(pQUEUE p); int InQueue(pQUEUE p); void OutQueue(pQUEUE p);  int main() {     QUEUE myQueue;     int ret;     //char choose;      InitQueue(&myQueue);     do{          ret = InQueue(&myQueue);         //getchar();         //printf("是否继续（Y/N）\n");         //scanf(" %c",&choose);                   //感觉这样每次输入判断很麻烦，想可以连续输入数据直到想停止程序在输入     }while(ret >= 0);      return 0; }  //函数功能：初始化队列 void InitQueue(pQUEUE p) {     p->front = 0;     p->rear = 0; }  //函数功能：实现缓存读写功能 int InQueue(pQUEUE p) {     if((p->rear+1)%MAX_SIZE == p->front)     {         printf("overflow\n");         OutQueue(p);     }     printf("Input x:\n");     if (scanf("%d",&p->queue[p->rear]) == EOF)         return -1;     p->rear = p->rear%MAX_SIZE+1;      if((p->rear+1)%MAX_SIZE == p->front)   //队满则一次性输出数据，并清空队列     {         printf("overflow\n");         OutQueue(p);     }     return 0; }  //函数功能：实现缓存输出功能 void OutQueue(pQUEUE p) {     if(p->front == p->rear)                //队空则退出程序     {         printf("underflow!\n");         exit(-1);     }     while(p->front != p->rear)     {         printf("%d\n",p->queue[p->front]);         p->front = p->front%MAX_SIZE+1;     }     return ; }  供参考～  楼主可通过输入ctrl+d（linux下）或ctrl+z（windows下）终止输入，结束输入
user-0 提问: 为什么创建二叉树要用到二级指针？

回复:
user: user-1
content: swap函数，这个自定义函数在C语言的数据里比较经典了，如果了解和明白了这个，可以很好理解这个为什么用二重指针～

user: user-2
content: 1 区别就是A不用返回值，也能修改函数外的root指针，而B是在函数设置指针指向并返回函数内的指针  2 因为A要直接修改函数外的root指针，而B不是修改函数外的指针，而是返回一个新指针。这个问题回答过很多次了。 形参只是实参的拷贝，形参本身的内存地址和实参的内存地址不同（在不同的函数栈里），所以在函数内修改形参的内存，不能影响函数外的实参。 什么叫修改形参的内存？直接对形参（变量）赋值就是修改形参（变量）的内存，比如 int a=5；//a的内存信息为5，  a=10；//赋值语句修改了a的内存信息为10 所以B的 root = malloc(sizeof(struct TreeNode)); 就是修改形参的内存，这个root和函数外的实参的内存空间不同，所以修改它并不会对实参的内存造成影响，所以必须把它做为返回值返回去，否则函数外就没法获得这个变化的值。（也就是通过返回值来把变化返回去，让函数外也能获得这个变化） A为什么可以影响函数外的实参？因为A传进来的是实参的地址，而不是实参的值，且函数内没有修改形参的内存（也就是没用直接对形参用赋值语句），而是对形参解引用（也就是找到实参的地址）去赋值。什么叫解引用赋值？*xx=yy就是解引用赋值，即A是用*root = malloc(sizeof(struct TreeNode));来赋值的，*root就是函数外的实参（因为root是实参的地址，*root就是实参），所以A能改变函数外的指针指向新的地址。 要记住，要想在函数内修改函数外的变量，必须满足三个条件 一，形参必须用指针 二，必须是把实参的地址传给形参 三，函数内必须是对形参解引用赋值而不能直接对形参赋值 举个例子  int global_a = 5; void fun1(int a) {a=10;} //不影响函数外的实参 void fun2(int *a) {a=&global_a;} //修改形参的内存，不影响函数外的实参 void fun3(int *a) {*a=10;} //修改形参的解引用的内存，也就是修改实参的内存，影响函数外的实参 int main() {     int a = global_a;     fun1(a);      printf("%d\n", a); //a不变，为什么？不符合上面三个条件     fun2(&a);     printf("%d\n", a); //a不变，为什么？不符合上面的条件三     fun3(&a);     printf("%d\n", a); //a变了，为什么？因为fun2传的是a的地址，且fun2是解引用赋值，如果是fun2 } 对于A来说，函数外的实参root是个指针，根据上面的条件二，要传实参的地址，也就是要传root指针的地址，指针的地址就是二级指针，所以A的形参就是二级指针。  3 理解了2，就知道为什么C是错的了，C就像上面举例的fun2，修改了形参的内存，对实参的内存不造成影响。除非像B一样，把变化返回去，否则函数外无法获得变化。

user: user-3
content: 醍醐灌顶
user-0 提问: 泰勒公式求正弦：请问哪里错了？

回复:
user: user-1
content: 理解不对吧，不是标准函数和公式计算的误差，是最后一项的误差要小于e 所以  int main() {     double x, e, t, m, p, s=0, f=1;     int n=1, i=2;     scanf("%lf%lf", &x, &e);     m = x;     p = 1;     while ((t=m/p)>=e) { //如果最后一项的精度不小于e则一直循环         s += f*t; //累加总和         n++; //项数增加         m *= (x*x); //分子乘x平方         for(; i<=2*n-1; ++i) p *= i; //分母阶乘         f *= -1; //正负符号变化     }     printf("sin(%f)=%f\n", x, sin(x)); //标准函数库的结果     printf("%d, sin(%f)=%f\n", n, x, s); //自己计算的结果     return 0; }

user: user-0
content: #include <stdio.h> #include <math.h> float mypow(float a,int b) {     float result=1;     for (int i=1;i<=b;i++)     {         result*=a;     }    return result; } int fun(int a) {     int result=1;     for (int i=1;i<=a;i++)     {         result*=i;     }     return result; } int main() {      double x,eps,a1=-1;     printf("Enter x & eps:");     scanf("%lf%lf",&x,&eps);     float t=sin(x);     double sum=0;     int n;       for (n=0;fabs(t-sum)<eps;n++)     {         sum+=(mypow(a1,n)*mypow(x,2*n+1))/fun(2*n+1);     }      printf("sin(%f)=%f\n",x,t);     printf("%d,sin(%f)=%f\n",n-1,x,sum);  }
user-0 提问: 如果一个类中 有常数据成员也有静态数据成员 那么他的构造函数怎么写

回复:
user: user-1
content: A(A& p):a(p.a) {         b++;     }

user: user-0
content: 还是说包含常数据对象的类的对象不能赋值给另一个该类的对象，编写复制构造函数是违规的
user-0 提问: 我的代码错在哪里？

回复:
user: user-1
content: 引用 4 楼 zdzazcy 的回复:我在这里写一个例子你看一下,读懂就可以了. int main() {     int i;     int n;     double sum = 0;     printf("请输入累加的次数:");     scanf("%d",&n);     for(i = 0;i < n;i++)     {         if(sum == 0)         {             sum = 1;         }         else             sum = sum + 1.0/(2*i+1);     }     printf("累加后的数字为:sum = %.6lf",sum);      return 0; }  浮点数与0比较，需要特殊处理，不能直接和和0比较～

user: user-0
content: 我明白了 前N项我没理解好

user: user-1
content: #include <stdio.h>  int main(void) { 	int n, i; 	double sum=0; 	scanf("%d",&n);  	for (i = 0; i < n; i++) { 		sum += 1.0 /(2 * i + 1); 	} /* 	for(n;n>0;n=n-2){ 		sum=sum+1.0/n; 	} 	*/ 	//printf("sum = %.6f",sum); 	printf("sum = %.6lf",sum);  }  供参考～

user: user-2
content: 我在这里写一个例子你看一下,读懂就可以了. int main() {     int i;     int n;     double sum = 0;     printf("请输入累加的次数:");     scanf("%d",&n);     for(i = 0;i < n;i++)     {         if(sum == 0)         {             sum = 1;         }         else             sum = sum + 1.0/(2*i+1);     }     printf("累加后的数字为:sum = %.6lf",sum);      return 0; }

user: user-3
content: double要用lf%输出 #include<stdio.h> int main() { 	int N; 	double sum=0; 	scanf("%d",&N); 	for(int i=1;i<=N;i++) 	{ 		sum+=1.0/(2*i-1); 	} 	printf("%.6lf\n",sum); }

user: user-4
content: 我刚学到这，等大佬们来说，我也看看有什么问题，学习一下，嘿嘿

user: user-5
content: 前n项你没理解是什么意思。 比如n是2，也就是前2项，就是1+1/3 n是3，也就是前3项，就是1+1/3+1/5 看到了吗，n是3，最后一项就是1/5，也就是1/(2*n-1)，而你的代码就是，n是3，最后一项却是1/3，所以当然结果不对了，所以改成 for(n; n>0; n--) {     sum=sum+1/(2*n-1); }
user-0 提问: C语言处理多组数据问题

回复:
user: user-1
content: 供参考 int year,month,day; scanf("%d%d%d",&year,&month,&day); while((year+month+day)!=0) {     ...     scanf("%d%d%d",&year,&month,&day); } 或者 int year,month,day; do {     ...     scanf("%d%d%d",&year,&month,&day); } while((year+month+day)!=0);
user-0 提问: 数据结构––线性表插入问题

回复:
user: user-1
content: #include<stdio.h>  #define maxsize 100  typedef struct {     int data[maxsize];     int length; } Sqlist;  //Sqlist L = { {1,2,3,4,6,7,8},8 }; Sqlist L = { {1,2,3,4,6,7,8}, 7 };  int findelem(Sqlist L, int x); void insertelem(Sqlist &L, int x);   int main(void) {     insertelem(L, 5);     int j=0;     //while (j <L.length-1) {     while (j <L.length) {         //printf("%d", L.data[maxsize]);         printf("%d ", L.data[j]);         j++;     }     putchar(10);     return 0; }   int findelem(Sqlist L, int x)     //找位置 {     int i;     for (i = 0; i < L.length; ++i)     {         if (x < L.data[i])         {             return i;         }     }      return i; }  void insertelem(Sqlist &L, int x)    //插入 {     int i, p;     p = findelem(L, x);     for (i = L.length - 1; i >= p; --i)         L.data[i + 1] = L.data[i];     L.data[p] = x;     ++L.length; } 供参考～ 初始化长度有问题， 对比代码找一下自己的问题吧

user: user-2
content: 修改如下 while(j<L.length) {     printf(“%d”, L.data[j]); //不要打印L.data[maxsize]，因为首先L.data[maxsize]会数组越界，就算要打印最后一个元素也是L.data[maxsize-1]，其次，应该是打印L.data[j]，否则j循环没意义，L.data[maxsize]打印的都是同一个元素。     j++; }
user-0 提问: c语言中，链栈怎么进行任意节点的交换，不是数据域的值交换，而是整个节点的交换

回复:
user: user-1
content: 这不是挺简单的吗。就是把m前后的节点改为n前后的节点，把n前后的节点改为m前后的节点。 n_pre->next=m; //n的前一个节点的下一个节点指向m tmp=m->next; //临时保存m的下一个节点 m->next=n->next; //m的下一个节点指向n的下一个节点 n->next=tmp; //n的下一个节点指向原来m的下一个节点 m_pre->next=n; //m的前一个节点的下一个节点指向n
user-0 提问: 为什么这个位域输出不对

回复:
user: user-1
content: usigned占4个，枚举占4个，bool占1个， 所以4+4+4+1=13，按第一个成员unsigned类型对齐（也就是按4个字节对齐），所以13被补齐为16个字节

user: user-0
content: 引用 2 楼 user-1 的回复:毕竟不是联合体，每个成员都有自己独立的内存空间，位域只是让它们使用部分空间而已，而且位域也会按字节对齐分配空间的，所以hz占2个字节（超过8位不满16位），wordsize占1个字节（不满8位），he占1个字节，ht占1个字节，所以占用2+1+1+1=5字节，由于内存自动对齐（第一个成员为unsigned类型占4个字节，按它对齐），5大于4个字节，不满8个字节，所以补齐为8个字节。 你可以试试打印sizeof(a.hz),sizeof(a.he)等等看看 如果不使用位域 它是16个字节 这16个字节怎么算的啊？ unsign占4个，bool和两个枚举都各占一个 输出是16个

user: user-0
content: 不应该是13+1+2+1等于17位 三个字节吗

user: user-1
content: 毕竟不是联合体，每个成员都有自己独立的内存空间，位域只是让它们使用部分空间而已，而且位域也会按字节对齐分配空间的，所以hz占2个字节（超过8位不满16位），wordsize占1个字节（不满8位），he占1个字节，ht占1个字节，所以占用2+1+1+1=5字节，由于内存自动对齐（第一个成员为unsigned类型占4个字节，按它对齐），5大于4个字节，不满8个字节，所以补齐为8个字节。 你可以试试打印sizeof(a.hz),sizeof(a.he)等等看看
user-0 提问: 小白 求助~！

回复:
user: user-0
content: 引用 2 楼 自信男孩 的回复:因为楼主没有将b值输入到b的内存里。 注意楼主的scanf中带有,逗号，输入的时候要保持和scanf的格式一致，即该逗号是中文，则输入的时候要输入中文逗号，否则输入英文逗号. 感谢老师指点，你的解答很有帮助~！

user: user-1
content: 输入两个数字的时候中间加个英文的逗号试试？

user: user-2
content: 仅供参考：#include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }

user: user-3
content: 总体逻辑没有问题，不过一般需要一个return 0；返回值，因为你用的是int作为main函数的返回值。 源码：  #include<stdio.h> int main() {     int a, b, max;     scanf("%d,%d",&a, &b);     if(a>b)         max = a;     else         max = b;     printf("max=%d\n", max);     return 0； }   不过注意输入的时候是a,b，不是a b，a与b之间是逗号，不是空格。

user: user-4
content: 因为楼主没有将b值输入到b的内存里。 注意楼主的scanf中带有,逗号，输入的时候要保持和scanf的格式一致，即该逗号是中文，则输入的时候要输入中文逗号，否则输入英文逗号.
user-0 提问: 机考题

回复:
user: user-1
content: 输出每行的行是啥意思？总行数？还是每行原来的内容？ int a, b, c, ln=0; char buf[64]; memset(buf, 0, sizeof(buf); while(fgets(stdin, buf, 64)!=null) {//如果行数据存在     if(sscanf(buf, “%d%d%d”, &a, &b, &c)==2) {//如果行数据是两个整数         ln++; //就统计符合条件的行     }     printf(“%s”, buf);//打印行数据     memset(buf, 0, sizeof(buf); } printf(“%d”, ln);//符合条件的行总数
user-0 提问: 想通过链表从文件中读取，之后复制到新文件中，但是程序一闪就退，也无法新建文件

回复:
user: user-1
content: if(!feof(fl)) {//进入这个if时     pNew=(users*)malloc(); //首先要做这一步     ... } 为什么？ 你好好想想，进入if(list_number_count==1)是就已经把pNew用了，进入else是不是应该重新给pNew分配内存？什么时候分配，那就是在你的if(!feof(fl))判断文件没有eof的时候分配。 另外，return pHead也最好放在最外面，否则文件不能正常读入时没有返回值，函数没有返回值是危险行为。

user: user-0
content: 谢谢了，我找到这个问题了
user-0 提问: 小白提问：如何使getchar（）函数返回下一个非空白字符？

回复:
user: user-1
content: 请参考《scanf()、gets()和getline()读取输入》 希望能够帮到您！

user: user-2
content: if(ch !='\n'  && ch != '\t' && ch != ' ') 试试这样 或者  if (!isspace(ch))   //注意加头文件<ctype.h>

user: user-3
content: if(ch！='\n' && ch!=' ' && ch!='\t')
user-0 提问: 关于二级指针的问题

回复:
user: user-1
content: 请参考《指向指针的指针》 希望能够帮到您！

user: user-2
content: 这个问题类似swap()为什么用指针，而不用变量来实现两个数据交换，道理是一样的～

user: user-3
content: 簡單說，一級指針用來改變值，二級指針用來改變鏈表。  比如定義了一個指針，把他傳給函數，之前必須分配好内存，函數可以改變該内存區的值； 把他的指針傳給函數，則可以在函數内部分配内存，或指向另一個地方，對於構建鏈表靈活得多。

user: user-4
content: 因为写代码的人对定义接口毫无规划 胡乱操作
user-0 提问: 关于链表的使用问题

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<string.h> //#include <stdio.h> //#include <stdlib.h>  typedef int ElementType; typedef struct Node *PtrToNode; struct Node {     ElementType Data;     PtrToNode   Next; }; typedef PtrToNode List; List CreatList(int x[],int n); //int* ReArry(int* x,int len); void ReArry(int* x,int len); //int a[1000005],b[1000005];  #define MAX_SIZE        8  int main() {     List l1,l2;     int *a, *b;     int k1=0,k2=0,n;//,k=0;      a = (int *)malloc(sizeof(int) * MAX_SIZE);     if (!a)         exit(0);      while(1)     {         scanf("%d",&n);         if(n==-1)             break;         a[k1++]=n;         if (k1 % MAX_SIZE == 0) {             a = (int *)realloc(a, sizeof(int) * (k1+MAX_SIZE));             if (!a)                 exit(0);         }      }      b = (int *)malloc(sizeof(int) * MAX_SIZE);     if (!b)         exit(0);      while(1)     {         scanf("%d",&n);         if(n==-1)             break;         b[k2++]=n;          if (k2 % MAX_SIZE == 0) {             b = (int *)realloc(b, sizeof(int) * (k2+MAX_SIZE));             if (!b)                 exit(0);         }     }      ReArry(a,k1);     ReArry(b,k2);     l1 = CreatList(a,k1);     printf("=====\n");     l2 = CreatList(b,k2);      free(a);     free(b);     return 0; }  List CreatList(int x[],int n) {     List L,p,q;      L = (List)malloc(sizeof(struct Node));     p = L;     for(int i = 0 ; i < n; i ++){         printf("ok");         q = (List)malloc(sizeof(struct Node));         if (!q)             exit(0);         q -> Data = x[i];         p->Next = q;         p = q;     }     p -> Next = NULL;     return L; }  //int* ReArry(int *x,int n) void ReArry(int *x,int n) {     int i,j,t;     for(i=0;i<n-1;i++)     {         for(j=i+1;j<n;j++)         {             if(x[i]>x[j])             {                 t = x[i];                 x[i] = x[j];                 x[j] = t;             }         }     }     //return x; } 供参考～   创建链表的部分有问题； 其他个人不很好的地方一并修改了，可以参考一下；

user: user-2
content: 引用 1 楼 真相重于对错 的回复:你使用了没有初始化的对象 List CreatList(int x[],int n){ List L,p,q; L = (List)malloc(sizeof(struct Node));//你只在这里malloc p = L;  for(int i = 0 ; i < n; i ++){ printf("ok"); L -> Data = x[i]; q = L; L = L -> Next;//然而在这里的next并没有malloc } L -> Next = NULL; return p; }  这里应该用循环来给L的每个结点分配内存

user: user-3
content: 你使用了没有初始化的对象 List CreatList(int x[],int n){ List L,p,q; L = (List)malloc(sizeof(struct Node));//你只在这里malloc p = L;  for(int i = 0 ; i < n; i ++){ printf("ok"); L -> Data = x[i]; q = L; L = L -> Next;//然而在这里的next并没有malloc } L -> Next = NULL; return p; }
user-0 提问: c语言求多个数组的共同元素，并返回共同元素数组

回复:
user: user-1
content: 参考这个试试https://blog.csdn.net/ParrySMS/article/details/78494882?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase

user: user-2
content: 比较笨的方法就是依次比较，就是拿第一行的元素和第二行的比较，找到第一个相同的元素，然后拿第一个相同的和第三行的元素比较，如果在第三行找到相同的，就在和第四行比较，否则从第一行拿一个新元素和第二行比较，也是找到相同（第二个相同的）和第三行的元素比较，找到相同的和第四行比较，依次操作～

user: user-0
content: 真心求教，谢谢

user: user-2
content: 引用 4 楼 Clutch_K 的回复:引用 2 楼 自信男孩 的回复:比较笨的方法就是依次比较，就是拿第一行的元素和第二行的比较，找到第一个相同的元素，然后拿第一个相同的和第三行的元素比较，如果在第三行找到相同的，就在和第四行比较，否则从第一行拿一个新元素和第二行比较，也是找到相同（第二个相同的）和第三行的元素比较，找到相同的和第四行比较，依次操作～这样差不多就是取交集的意思吧，两两比较，最后得到所有行的交集？ 恩，对～

user: user-0
content: 引用 2 楼 自信男孩 的回复:比较笨的方法就是依次比较，就是拿第一行的元素和第二行的比较，找到第一个相同的元素，然后拿第一个相同的和第三行的元素比较，如果在第三行找到相同的，就在和第四行比较，否则从第一行拿一个新元素和第二行比较，也是找到相同（第二个相同的）和第三行的元素比较，找到相同的和第四行比较，依次操作～这样差不多就是取交集的意思吧，两两比较，最后得到所有行的交集？
user-0 提问: 小白求助

回复:
user: user-1
content: for example int main(){     int x1,y1,x2,y2,x,y;     scanf(“%d%d”, &x1,&y1);     scanf(“%d%d”, &x2,&y2);     scanf(“%d%d”, &x,&y);     if(x<x1 ll x>x2 || y<y1 || y>y2)          printf(“OUT”);     else         printf(“IN”);     return 0; }

user: user-0
content: 顶一下Monash
user-0 提问: 麻烦大佬帮我看一下哪里错了，十分感谢！(数据结构中的循环链表)

回复:
user: user-0
content: 😂😂，马虎了

user: user-1
content: 函数调用不能再加返回值类型了。去掉main函数里CreateListF前的void，开始我还以为是函数声明呢，仔细一看是函数调用～
user-0 提问: 想做一个链表操作的实验报告，求教

回复:
user: user-1
content: 先自己试着写写，遇到问题再提出来～

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

user: user-3
content: 自已先写一个最简单的头插和头删吧，这样对链表有一个基本的理解。
user-0 提问: C语言编译错误

回复:
user: user-1
content: 应该是在一个工程里出现了多个源文件，且这些源文件里有多个main函数定义，错误提示已经很明确了，multiple definition main

user: user-0
content: 引用 1 楼 user-3的回复:你的工程怎么管理的？提示main函数重复定义了。 栈的十进制转换其他进制.c 和 你贴出来的c文件 是什么关系？在同一个工程？ 还有，Stack.h都有啥了？是不是栈的十进制转换其他进制.c引入了该头文件？  把你的工程管理（或文件夹结构）的图贴出来 新建一个项目就可以了

user: user-2
content: 重新新建一个工程试试，感觉是你新建工程的问题。 https://jingyan.baidu.com/article/b7001fe1a894c10e7282ddbe.html

user: user-3
content: 你的工程怎么管理的？提示main函数重复定义了。 栈的十进制转换其他进制.c 和 你贴出来的c文件 是什么关系？在同一个工程？ 还有，Stack.h都有啥了？是不是栈的十进制转换其他进制.c引入了该头文件？  把你的工程管理（或文件夹结构）的图贴出来
user-0 提问: c语言shu'zu

回复:
user: user-1
content: 引用 5 楼 m0_46244162 的回复:[quote=引用 1 楼 qybao的回复:]你理解的最后一个元素是指哪个？ 比如数组a[5]，最后一个元素是a[4]没问题，可以赋值，但是a[5]就有问题了，数组越界。数组下标是从0-4一共5个元素 大佬请问这个会有例外的情况吗 比如字符串数组不可以 但是整型数组就可以 例如楼下这个回答说的 [/quote] 没有例外，字符串最后的结束符也是自己保证的，你不设，它就没有结束符。

user: user-2
content: 只要是在数组内，都可以赋值的。建议楼主贴出代码吧，如果出现错误，很可能是越界导致的。在栈上不建议定义大数组～

user: user-0
content: 引用 1 楼 qybao的回复:你理解的最后一个元素是指哪个？ 比如数组a[5]，最后一个元素是a[4]没问题，可以赋值，但是a[5]就有问题了，数组越界。数组下标是从0-4一共5个元素 大佬请问这个会有例外的情况吗 比如字符串数组不可以 但是整型数组就可以 例如楼下这个回答说的

user: user-0
content: 引用 1 楼 qybao的回复:你理解的最后一个元素是指哪个？ 比如数组a[5]，最后一个元素是a[4]没问题，可以赋值，但是a[5]就有问题了，数组越界。数组下标是从0-4一共5个元素 大佬 这个会有例外的情况吗 比如字符串数组不可以 整型数组就可以 会有这种情况？？

user: user-0
content: 引用 2 楼 user-3的回复:[quote=引用 楼主 m0_46244162 的回复:]请问c语言数组的最后一个元素不能赋值吗  看情况把 整型数组你可以随便赋值  对于字符数组，你也可以将它当成字符串来看，一般字符串结尾都有一个\0代表结束 通常字符串或者字符数组 都习惯用指针去操作它  用指针操作字符串有一个重要条件：根据末尾是否为\0来判断指针是否到达字符串结尾 如果你把字符数组的最后一个元素赋值 那你用指针操作这个字符串的时候 很容易出现数组越界的话题  因为你不知道字符串到底结尾了没有[/quote] 可以随便赋值吗？怎么会报错说破坏了栈堆

user: user-3
content: 引用 楼主 m0_46244162 的回复:请问c语言数组的最后一个元素不能赋值吗  看情况把 整型数组你可以随便赋值  对于字符数组，你也可以将它当成字符串来看，一般字符串结尾都有一个\0代表结束 通常字符串或者字符数组 都习惯用指针去操作它  用指针操作字符串有一个重要条件：根据末尾是否为\0来判断指针是否到达字符串结尾 如果你把字符数组的最后一个元素赋值 那你用指针操作这个字符串的时候 很容易出现数组越界的话题  因为你不知道字符串到底结尾了没有

user: user-1
content: 你理解的最后一个元素是指哪个？ 比如数组a[5]，最后一个元素是a[4]没问题，可以赋值，但是a[5]就有问题了，数组越界。数组下标是从0-4一共5个元素
user-0 提问: CCF模拟题用C答题不能用for循环吗？

回复:
user: user-0
content: 引用 5 楼 m0_51355118的回复:应该是楼上说的，有些比较老的编译器不支持c99，换个编译器就好了，或者把声明放在前面也可以 但那是CCF的模拟题，只提交代码

user: user-1
content: 那就在int 一行加个i int i,r.... for(i=1;…

user: user-2
content: 楼主的C编译器吧，C++支持for (int i=0;...这样的定义变量方式，C编译器应该是不支持的。（也可能是编译器支持的C标准比较低，不支持C99导致的）  把int i定义在for循环外应该就可以了～

user: user-3
content: for (int i = 1; 这样的局部循环变量需要c99支持，不支持的话需要把int i声明提出去

user: user-1
content: 报的什么错？

user: user-1
content: 应该是楼上说的，有些比较老的编译器不支持c99，换个编译器就好了，或者把声明放在前面也可以

user: user-0
content: 引用 1 楼 m0_51355118的回复:报的什么错？ 编译错误……