Question: c语言指针不用i遍历进行排序

#include <stdio.h>   int main(void) {     int *p, num[10], *p1, temp;      printf("请输入10个数字：");     for(p=num;p-num<10;p++)     {         scanf("%d",p);     }      //while(*p++=*p1++)    //无意义的代码，去掉;      //for(p=num[0];p-num<9;p++)     for(p=num;p-num<9;p++)     {         //for(p1=num[0];p1-num<9-(p-num);p1++)         for(p1=num;p1-num<9-(p-num);p1++)         {             if(*p1>*(p1+1))             {                 temp=*p1;                 *p1=*(p1+1);                 *(p1+1)=temp;             }         }     }      printf("按照升序排列为：");     for(p1=num;p1-num<10;p1++)     {         printf("%d ",*p1);     }     putchar(10);      return 0; }  供参考～

我也想用i直接遍历，可是要求必须用指针完成遍历；其次，while循环的目的只是为了将数组复制；最后，p=num[0]可以表达数组首地址

功能我没看，先说代码中的错误 1.p1没有初始化就进行比较  2.while循环条件没用==，而用了=这个赋值操作   3.p=num[0]这个一个int，一个int*    你确定你这个代码能编译过然后运行奔溃？我觉得不会编译过

p=num; 你这样写还不如用i


Question: 一个思维题。

假设都是一列(行) 行(列)   格子 1            1  2            2+1 3            3+2+1 4            4+3+2+1 5            5+4+3+2+1 6            6+5+4+3+2+1 .......... 如果我猜的不错的话只要把你输入的行和列求和再相乘就好了吧


Question: 这个怎么编写？

基本东西还是自己研究一下如何写吧。如果你一定要让人帮你写，那么你考虑给多少钱吧？ PS：虽然这非常简单，但考虑到你基础这样差，估计就是给你完整的程序你也不一定会运行，这些工作量加在一起，价钱太低估计没有人会干的！

建议自己先写写，一个循环加一个判断条件的事情。怎么还需要别人给动手写呢

这种不应该是基础的吗？ 慢慢来啊

建议自己先写写，一个循环加一个判断条件的事情。怎么还需要别人给动手写呢

不难的，你先自己写一下代码，然后如果有问题再把代码放上来问


Question: C语言题

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

都是数学题，和编程关系不大

引用 2 楼 寻开心的回复:2   公式是  n*（n-1）/2   写代码输入n，然后输出结果就完了  3   3*5*7 共105种情况，对1到105做循环， 看看是几满足除三余2，除以5余3，除以7余2的情况； 假定这个数是n     用2395 和2333 分别减去n， 看看差哪一个是105的倍数，哪一个就是了。     满足除以几余几的条件的数是105x+n     当然，你可以直接用2395和2333直接去除看余数是否满足条件 谢谢  麻烦再问你一道题可不可以

2.先用数学写出公式，然后在程序中代入公式就行


Question: 大佬帮忙看看我这什么问题。。。

引用 4 楼 qq_45690740的回复:[quote=引用 3 楼 自信男孩的回复:]去掉scanf前的~ 去我用~或者！＝eof好像都是死循环，输入数字没有输出yes或者no[/quote] 去掉~或者后面的，我都试了

引用 3 楼 自信男孩的回复:去掉scanf前的~ 去我用~或者！＝eof好像都是死循环，输入数字没有输出yes或者no

去掉scanf前的~

引用 1 楼 qq_45798109的回复:~和!=EOF用一个就可以了 试了，还是一样的，单单用~或者!＝EOF也是一样。。

~和!=EOF用一个就可以了

引用 4 楼 qq_45690740 的回复:[quote=引用 3 楼 自信男孩的回复:]去掉scanf前的~ 去我用~或者！＝eof好像都是死循环，输入数字没有输出yes或者no[/quote] EOF是需要输入ctrl+d（linux下）或者ctrl+z（windows下）

题目的要求是输入多组参数，针对每一组，得出一种结果。你这是全部输入完成之后处理，实际上，只是处理最后一组数据

引用 6 楼 user-3的回复:你这个题目感觉都是做错了 那要怎么写，，，。，

你这个题目感觉都是做错了


Question: 编程问题求m到n之间的素数和并输出求指点，谢谢

谢谢两位大佬，刚接触，很多也不懂我多学习学习。我先把帖子结了。

#define PRIME 1 #define NOT_PRIME 0 int prime_two(int num) { 	if (num < 2) { 		return NOT_PRIME; 	} 	int max = (int)sqrt(num);// 头文件math.h 	for (int i = 2; i <= max; ++i) { 		if (0 == (num % i)) { 			return NOT_PRIME; 		} 	} 	return PRIME; } #undef PRIME #undef NOT_PRIME

#include<stdio.h> #include <math.h>  int is_prime(int num); int main() {     int m, n, tmp;     int sum = 0;     int cnt = 0;     int i;      scanf("%d %d", &m ,&n);     if (m <= 0 || n < 2)         return -1;     if (n < m) {         tmp = n;         n   = m;         m   = tmp;     }      for (i = m; i < n; i++) {         if (is_prime(i)) {             cnt++;             sum += i;         }     }      printf("%d\n", sum);      return 0; #if 0     if(0<n<=m<=200){         for(i=m;i<200;i++)         {             int k;             int isPrime = 1;             for(k=2;k<i;k++)             {                 if(i%k==0)                 {                     isPrime = 0;                     break;                  }             }             if(isPrime)             {                 cnt++;                 if( cnt<=n && isPrime==1  )                 {                     sum+=i;                 }              }         }          printf("%d\n",sum);     } #endif }  int is_prime(int num) {     int i;     int cnt = (int)sqrt(num);      for (i = 2; i <= cnt; i++)         if (num % i == 0)             return 0;      if (i > cnt)         return 1;      return 0; } 供参考～  优化之后～

#include<stdio.h> #include <math.h>  int is_prime(int num); int main() {     int m, n, tmp;     int sum = 0;     int cnt = 0;     int i;      scanf("%d %d", &m ,&n);     if (m <= 0 || n < 2)         return -1;     if (n < m) {         tmp = n;         n   = m;         m   = tmp;     }      for (i = m; i < n; i++) {         if (is_prime(i)) {             cnt++;             sum += i;         }     }      printf("%d\n", sum);      return 0; #if 0     if(0<n<=m<=200){         for(i=m;i<200;i++)         {             int k;             int isPrime = 1;             for(k=2;k<i;k++)             {                 if(i%k==0)                 {                     isPrime = 0;                     break;                  }             }             if(isPrime)             {                 cnt++;                 if( cnt<=n && isPrime==1  )                 {                     sum+=i;                 }              }         }          printf("%d\n",sum);     } #endif }  int is_prime(int num) {     int i;      for (i = 2; i <= (int)sqrt(num); i++)         if (num % i == 0)             return 0;      return 1; } 供参考～


Question: c51单片机c语言三按键控制流水灯

看啥？？？ 看一下你的题？？ 只知道伸手要


Question: malloc与free的凝问

没问题的，申请和释放可以不在一个函数里。但是申请时得到地址，在free是也需要是这个地址。

假如你要买一个塑料袋装东西，等东西用完袋子就可以扔掉了。 你的问题就好比说你是要买完袋子就扔掉，还是要用完再扔

如果在一个函数里面申请了，就要在这个函数里面释放的话，这样做无非是两种可能性。其一就是申请了之后，在返回之前就释放了，那么这样做的意义何在呢？倒还不如申请栈空间就好了；还有一种就是函数返回之后，再次调用同一个函数去释放空间，那么就是说这个函数同时具备两种功能，申请和释放空间，通过不同的参数来控制流程走向，但是这样做不觉得很乱吗？函数的设计需要规划的，杂烩式功能的函数，不是一种好的设计


Question: 这一题怎么做？

引用 4 楼 mymtom 的回复:这本教材可以扔垃圾桶了。  printf("%d\n", d * y);  这样写根本，格式为"%d", 参数是double, 结果不不确定的。 题目错了！

给你一个详细的解答： int x=1.2; 由于是int类型，所以i等于1。 (x+3.8)/5.0； 其中符号 / 是取商，如果y的类型是double，则等于0.96。 只怪y也是int类型，所以只能等于0. 而你最后输出的时候，用的又是%d, 这一下子就掐死了，最终结果只能是0

在环境里输入代码编译运行一下，比如把x, y的值都打印一下。然后根据结果学习一下运行状态～

x的值为1 ， y的值为0，最后输出为0

在电脑上跑下呗


Question: 萌新求助

就是一直取第二次操作直到第三棵树的香蕉数量不足以再进行第二次操作，然后再进行第一次操作

引用 1 楼 赵建泉的回复:我认为最优解永远是先进行第二种操作再进行第一种操作 我一点思路都没。。。

我认为最优解永远是先进行第二种操作再进行第一种操作


Question: 顺序栈代码对比，求大神找一下错误

一个是Sqstack s; 一个是Sqstack *s;

换了一台电脑报的还是一样的错误。

引用 13 楼 自信男孩的回复:[quote=引用 7 楼 菜菜初学者 的回复:] [quote=引用 6 楼 自信男孩的回复:]#include"stdio.h" #include"stdlib.h" //#include <stdbool.h> #define Maxsize 100 // 定义栈的最大容量 typedef int Datatype; typedef struct {     Datatype data[Maxsize]; // 定义存放栈元素的数组，定义栈中元素，Datatype为元素的数据类型     int top; // 定义栈指针，指向栈顶的位置 }Sqstack; void initstack(Sqstack *&L)/*初始化顺序栈*/ {     L = (Sqstack *)malloc(sizeof(Sqstack));     L -> top = -1; // 初始化栈指针top为-1，即为空栈 } int stackempty(Sqstack *L)/*判断顺序栈是否为空*/ {     //return (L->top = -1);     return (L->top == -1); } //void main() int main() {     //Sqstack s;     Sqstack *s;     printf("(1).初始化顺序栈;\n");     initstack(s);      printf("(2).判断顺序栈是否为空:");     if(stackempty(s))     {         printf("这是一个空顺序栈!\n");     }     else printf("这是非空顺序栈!\n"); }    供参考，修改如上～ 你好，还是不行啊。[/quote]  是不能编译还是不能运行？[/quote] 不能编译，有错误，跟图片一样。

引用 12 楼 datoulaile123的回复:[quote=引用 11 楼 菜菜初学者 的回复:] 难道是我编译器的问题？你用的是VS？？我用VC++6.0的。 你上面的那份代码能编译过，那就表示没什么影响啊，毕竟代码基本差不多，下面这份还少一些代码[/quote] 下面代码应该不影响的，我用正确的代码，然后把下面那块注了好像也报错。

引用 7 楼 菜菜初学者 的回复:[quote=引用 6 楼 自信男孩的回复:]#include"stdio.h" #include"stdlib.h" //#include <stdbool.h> #define Maxsize 100 // 定义栈的最大容量 typedef int Datatype; typedef struct {     Datatype data[Maxsize]; // 定义存放栈元素的数组，定义栈中元素，Datatype为元素的数据类型     int top; // 定义栈指针，指向栈顶的位置 }Sqstack; void initstack(Sqstack *&L)/*初始化顺序栈*/ {     L = (Sqstack *)malloc(sizeof(Sqstack));     L -> top = -1; // 初始化栈指针top为-1，即为空栈 } int stackempty(Sqstack *L)/*判断顺序栈是否为空*/ {     //return (L->top = -1);     return (L->top == -1); } //void main() int main() {     //Sqstack s;     Sqstack *s;     printf("(1).初始化顺序栈;\n");     initstack(s);      printf("(2).判断顺序栈是否为空:");     if(stackempty(s))     {         printf("这是一个空顺序栈!\n");     }     else printf("这是非空顺序栈!\n"); }    供参考，修改如上～ 你好，还是不行啊。[/quote]  是不能编译还是不能运行？

引用 11 楼 菜菜初学者 的回复:难道是我编译器的问题？你用的是VS？？我用VC++6.0的。 你上面的那份代码能编译过，那就表示没什么影响啊，毕竟代码基本差不多，下面这份还少一些代码

难道是我编译器的问题？你用的是VS？？我用VC++6.0的。

引用 9 楼 菜菜初学者 的回复:我改成了Sqstack *s之后还是那个错误，换了机器也一样。应该就是代码问题了。找不出问题所在。 编译了下没问题啊，能编过啊

引用 7 楼 菜菜初学者 的回复:你好，还是不行啊。 你这个是还有什么问题吗，你把Sqstack s;改成Sqstack *s;就能编译通过了啊，至于功能的话，你上面的那份代码有push等操作，你下面这份没有，你也加上这些代码不就行了

引用 6 楼 自信男孩的回复:#include"stdio.h" #include"stdlib.h" //#include <stdbool.h> #define Maxsize 100 // 定义栈的最大容量 typedef int Datatype; typedef struct {     Datatype data[Maxsize]; // 定义存放栈元素的数组，定义栈中元素，Datatype为元素的数据类型     int top; // 定义栈指针，指向栈顶的位置 }Sqstack; void initstack(Sqstack *&L)/*初始化顺序栈*/ {     L = (Sqstack *)malloc(sizeof(Sqstack));     L -> top = -1; // 初始化栈指针top为-1，即为空栈 } int stackempty(Sqstack *L)/*判断顺序栈是否为空*/ {     //return (L->top = -1);     return (L->top == -1); } //void main() int main() {     //Sqstack s;     Sqstack *s;     printf("(1).初始化顺序栈;\n");     initstack(s);      printf("(2).判断顺序栈是否为空:");     if(stackempty(s))     {         printf("这是一个空顺序栈!\n");     }     else printf("这是非空顺序栈!\n"); }    供参考，修改如上～ 你好，还是不行啊。

引用 3 楼 datoulaile123的回复:还有说一下#include"stdio.h"   #include"stdlib.h"这两个是系统头文件，c++代码规范里是最好是用#include<stdio.h>   #include<stdlib.h>，如果不是很了解""和<>的区别，可以自己百度下，从开始就养成良好的代码习惯 好的，谢谢你的提醒哦。

引用 2 楼 datoulaile123的回复:一个是Sqstack s; 一个是Sqstack *s; 你好，你知道第二个代码该怎么改吗？


Question: 求作业解答

int main 3.1416676……误差比起来double main 3.141597159……有点儿大

编译器都说了必须返回int型。(你return个0.0试试，我也不确定)

引用 1 楼 qq_45798109的回复:int main 不是double 可是我同学的double就能运行啊

int main 不是double

引用 6 楼 weixin_40290083的回复:我的环境：ubuntu 16   GCC   Eclipse platform可以运行。 可能真的是电脑问题吧  我的fabs必须要声明一下加个头文件math.h才能用 她的就可以直接用

main一般是用int作为返回值类型的，或者void(有些编译器支持），但是没有见过返回double的


Question: Program received signal SIGSEGV, Segmentation fault. 的情况该怎么解决啊？遇到好几次了 我仅仅是想生成散列表

按照你的代码来说，就是没申请内存，相当于访问了一个不存在的地方。其他的你可以搜搜。我不甚了解。 ------------------------------------------------------- 1、如果问题已经得到解决，请及时结贴。结贴教程。 2、如果没有解决，可继续追问。 3、只能在电脑网页上结贴，手机不能结贴。 CSDN论坛新手指南 -------------------------------------------------------

引用 1 楼 user-1 的回复：#include <stdio.h> #include <stdlib.h> #define SUCCEE 1 #define UNSUCCEES 0 #define HashSize 16  //定义散列表表长为数组的长度 #define NULLKEY -32768 #define Mod 13  //余数 typedef struct { 	int* elem;  //数据元素存储基址，动态分配数组 	int count; //当前数据元素个数 }HashTable; int m = 0; //散列表表长 void InitHashTable(HashTable** H);// 双指针 int HashFunc(int key); void InsertHash(HashTable* H, int key); int main() { 	HashTable* H; 	InitHashTable(&H);// 加取地址 	int key_array[12];  	printf("请输入一组关键字：\n");  	int i;  	for (i = 0; i < 12; i++) { 		scanf("%d", &key_array[i]); 	} 	for (i = 0; i < 12; i++) { 		InsertHash(H, key_array[i]); 	}  	return 0; } void InitHashTable(HashTable** H) {// 双指针 	int i; 	*H = (HashTable*)malloc(sizeof(HashTable));// 申请结构体的内存 	if (NULL == *H) { 		exit(-1); 	} 	m = HashSize; 	(*H)->count = m; 	(*H)->elem = (int*)malloc(m * sizeof(int)); 	if (NULL == (*H)->elem) { 		exit(-1); 	} 	for (i = 0; i < m; i++) { 		(*H)->elem[i] = NULLKEY; 	} 	return; } int HashFunc(int key) { 	return key % Mod; } void InsertHash(HashTable* H, int key) { 	int address;  	address = HashFunc(key); 	while (H->elem[address] != NULLKEY) { 		address = (address + 1) % Mod; 	} 	H->elem[address] = key; }大佬 我那样子写为什么不对呢？那个错误是什么意思？


Question: 小白求教

VC6好像不支持for括号内定义变量，移出来试试看

谢谢大家，用的是visual c++

建议把i, j的声明定义放在循环外，循环前

把”j=10“放在循环的前边

另外，检查一下逗号和分号的半角，不能用中文的符号

你用什么版本?有些版本好像不能在for()里定义变量。 试试把int定义在for前


Question: 有没有没有头节点的空链表

引用 1 楼 proorck2019的回复:可以看做链表的特殊状态，也算是链表。 那这个链表是不是没占一点空间啊

链表头是为了表示这个链表的开始位置，是为了寻找后面的节点才保存的。 如果一个链表没有一个节点，那么这个链表是一个空的

链表不一定是树形的，还有环形链表

可以看做链表的特殊状态，也算是链表。

引用 4 楼 Dr.Derison 的回复:[quote=引用 1 楼 proorck2019的回复:]可以看做链表的特殊状态，也算是链表。 那这个链表是不是没占一点空间啊[/quote] 怎么才算栈空间，另外，你说的占一点空间，是指堆上的，还是栈上的？ 头结点即使没有申请空间，但是也会占用内存的，因为指针也占用内存的

链表如果没有头指针，你从哪儿开始啊  还怎么对链表进行操作呢？  头指针的值可以是空， 表示空表， 此时链表本身没有占任何空间 （头指针这个变量是始终存在并占据空间的）  ps 具体如何，其实还是要取决于链表的具体实现方法， 链表的类型比较多， 实现方法也五花八门

引用 4 楼 Dr.Derison的回复:[quote=引用 1 楼 proorck2019的回复:]可以看做链表的特殊状态，也算是链表。 那这个链表是不是没占一点空间啊[/quote] 现在内存很大，老师们，尤其是老教授，他们年轻时内存才1MB。我们现在不用算这么细。


Question: 我想让被调函数里i<10的10用个参数来表示，好在不管输入多少个数都能用，怎么改代码？

f函数要改造， main函数当中的定义a[10]也要改造成类似下面的方法 main () {     int N;     scanf("%d", &N);     int a[N]; }  注意这个和编译环境有关系，早期的软件版本可能不支持这种数组的定义；  如果不支持，就要改成 动态指针了，  用 int * a = (int*) malloc( sizeof(int) * N ) 来处理

double f(int m[], int n) {     int i;     double ave = 0,s=0;      for(i=0;i<n;i++)     {         s=s+m[i];     }      if (n)         ave=s/n;      return ave; } 供参考～

引用 1 楼 user-4 的回复:加个参数int n就好啦，然后i < n 没有这么简单！数组会越界的。鉴于程序只求平均值可以考虑取消数组，输入一个就累加一个，然后直接求平均，同时取消f函数

平均数那边/10也要改成/n

加个参数int n就好啦，然后i < n


Question: 求助 C语言查验身份证

哦哦thanks C语言刚学不太懂这些具体的东西。

不是有个return F = 1;吗？ 这样子就会返回1的，程序写错了吗？


Question: 为什么scanf 和gets不能连用？

中间加个getchar把那个回车换行给读了不就好了

引用 6 楼 棉猴 的回复:gets()函数用来接收输入的字符串，而scanf()可以接收多种格式的数据。两个函数遇到回车符都会认为是输入结束，但是gets()可以接收空格，但是scanf()则不行。 以上节选自《scanf()、gets()和getline()读取输入》 希望能够帮到你！scanf 可以接受带空格的字符串的

引用 5 楼 薄情⁽ⁿᵔᵕᵔⁿ⁾ 的回复:[quote=引用 3 楼 自信男孩 的回复:] 如果在scanf后用gets需要注意一点，gets是遇到'\n'直接返回，而输入scanf后回车会将'\n'留在输入缓存里，而gets正好 遇到'\n'就直接返回了，所以你没有机会输入。那需要如何把这个避免，难道就不能用了吗？ [/quote]知道有一个 \n 干扰 那就清理掉 \n就完事了 比较简单的 scanf后面加一个 %*c 处理\n 就可以了

引用 3 楼 自信男孩 的回复:如果在scanf后用gets需要注意一点，gets是遇到'\n'直接返回，而输入scanf后回车会将'\n'留在输入缓存里，而gets正好 遇到'\n'就直接返回了，所以你没有机会输入。那需要如何把这个避免，难道就不能用了吗？

看你怎么用而已

完全可以连用


Question: vs2017这个问题怎么办啊，求大神解答

谢谢，OK了，

可以把暂时不需要的main临时改为main1、2345等等

引用 1 楼 user-1的回复:你多个程序文件里面都有main函数，这是不允许的！ 请问那该怎么办呢，今天刚下的vs2017,dev里就没有这个问题

你多个程序文件里面都有main函数，这是不允许的！


Question: 一数组内放5个整数，要求找出第一次出现的最小数和它的下标，然后把它和数组中最前面的元素即第一个数对换位置。

#include<stdio.h> int main() {     //int a[5],i,min,t=0;     //int b[5],k,j,n=0;     int a[5], tmp, n;     int i, min;      scanf("%d",&n);     if (n > 5)         n = 5;     for(i=0;i<n;i++)         //scanf("%d",a[i]);   //此处可能导致段错误         scanf("%d", &a[i]);      //min = a[0];     min = 0;     //for(i=0;i<n;i++)     for(i=1;i<n;i++)     {         //if(min>a[0])         if(a[min]>a[i])             min = i;             /*         {             k=min;             min=a[0];             a[0]=k;         }         */     }     printf("min=%d,weizhi=%d",a[min], min);     if (min != 0) {         tmp = a[min];         a[min] = a[0];         a[0] = a[min];     }      for (i = 0; i < 5; i++)         printf("%4d", a[i]);     putchar(10);      /*     for(i=0;i<n;i++)     {    b[5]=a[5];     //数组越界，可能导致段错误     }     if(min>b[i])     {         min=b[i];         t=i;     }     printf("%4d ",b[i]);     printf("min=%d,weizhi=%d",min,t);     */     return 0; } 供参考～

a[5]b[5]这样的数组，范围是a[0]～a[4]b[0]～b[4]。 上课没注意听讲，在玩手机吗？

for(i=0;i<n;i++)     {    b[5]=a[5];  }这玩意什么意思，，写错了吧 另外b[5]和a[5]越界了


Question: 求解

引用 3 楼 SuperDay的回复:楼主一个接一个地发帖子，都不去结掉吗？这样对得起观众吗？ 不好意思，刚开始用，才上网页版

楼主一个接一个地发帖子，都不去结掉吗？这样对得起观众吗？

可以。通常用循环实现

引用 楼主 fight with myself的回复:C语言中能不能输出给定范围的元素，比如说输出第3个到第9个 忘记补条件了，是在数组中


Question: 求解

引用 2 楼 winnerrrrrrrr 的回复:引用 1 楼 liups 的回复：是==，不是=这样就可以输出在范围的三位数了是吧 昏了！这样当然可以在范围了，因为d在范围内改变，而d正常情况下又没有改变，所以你说的对！

引用 2 楼 winnerrrrrrrr 的回复:引用 1 楼 liups 的回复：是==，不是=这样就可以输出在范围的三位数了是吧 没细看，不知道能不能。原始的程序最大的问题是把相等比较（==）误写成赋值（=）了

引用 1 楼 liups的回复:是==，不是= 感谢

引用 2 楼 winnerrrrrrrr的回复:引用 1 楼 liups 的回复：是==，不是=这样就可以输出在范围的三位数了是吧 对，感谢

是==，不是=


Question: 新手求解答  Compile Error

strchr在Linux下是不支持这个函数的，建议楼主查一下自己的编译器里是否支持这个函数；  也可以自己实现～  #include<stdio.h> #include<ctype.h> #include<string.h>  char *my_strupr(char *str);  int main() {     int i,n,k;     char c[100];     while ((c[0]=getchar())!=EOF)     {         k=1;         while ((c[k++]=getchar()) != '\n')             ;         c[k-1]='\0';         my_strupr(c);         n = strlen(c);         for(i=0;i<n/2;i++) {             if(c[i]!=c[n-i-1])                 break;         }         if(i==n/2)             printf("Yes\n");         else             printf("No\n");     }     return 0; }  char *my_strupr(char *str) {     int i = 0;      while (str[i]) {         if (islower(str[i]))             str[i] -= 32;         i++;     }      return str; } 供参考～

可以编译运行！


Question: 求解，为什么数都那么大？

printf不加\n就是这种效果

输出在一个循环里，所以你看着是数据是很大的～

啊，谢谢你，我懂了。

不是大，这是三个数，8  5  2，就是3的倍数减一，%3就是对3取余


Question: C语言数据结构C2143错误求大神解答！

真的是环境问题，我用c source 提示错误，用c++ source就可以了

引用 8 楼 菜菜初学者的回复:[quote=引用 7 楼 qq_45798109的回复:][quote=引用 4 楼 菜菜初学者的回复:][quote=引用 1 楼 qq_45798109的回复:]函数原型的参数是指针类型，主函数里的s却不是指针 你好，我改了那个地方但还是没用。[/quote] Sqstack s;改成Sqstack *s;我云行出来了呀，虽然我不知道运行的结果是不是你想要的[/quote] 你好，你看一下我新发的贴，有一串可以编译运行的代码，但是我对比不出错误在哪里。[/quote] 以前我们老师说应该是环境问题，但我也不敢确定。

引用 7 楼 qq_45798109的回复:[quote=引用 4 楼 菜菜初学者的回复:][quote=引用 1 楼 qq_45798109的回复:]函数原型的参数是指针类型，主函数里的s却不是指针 你好，我改了那个地方但还是没用。[/quote] Sqstack s;改成Sqstack *s;我云行出来了呀，虽然我不知道运行的结果是不是你想要的[/quote] 你好，你看一下我新发的贴，有一串可以编译运行的代码，但是我对比不出错误在哪里。

引用 4 楼 菜菜初学者的回复:[quote=引用 1 楼 qq_45798109的回复:]函数原型的参数是指针类型，主函数里的s却不是指针 你好，我改了那个地方但还是没用。[/quote] Sqstack s;改成Sqstack *s;我云行出来了呀，虽然我不知道运行的结果是不是你想要的

引用 3 楼 proorck2019的回复:void initstack(Sqstack *&L) 星号和&连用？ 嗯嗯。之前这么打没问题的。

引用 2 楼 自信男孩的回复:#include"stdio.h" #include"stdlib.h" //#include <stdbool.h> #define Maxsize 100 // 定义栈的最大容量  typedef int Datatype; typedef struct {     Datatype data[Maxsize]; // 定义存放栈元素的数组，定义栈中元素，Datatype为元素的数据类型     int top; // 定义栈指针，指向栈顶的位置 }Sqstack; void initstack(Sqstack *&L)/*初始化顺序栈*/ {     L = (Sqstack *)malloc(sizeof(Sqstack));     L -> top = -1; // 初始化栈指针top为-1，即为空栈 } int stackempty(Sqstack *L)/*判断顺序栈是否为空*/ {     //return (L->top = -1);     return (L->top == -1); } //void main() int main() {     //Sqstack s;     Sqstack *s;     printf("(1).初始化顺序栈;\n");     initstack(s);      printf("(2).判断顺序栈是否为空:");     if(stackempty(s))     {         printf("这是一个空顺序栈!\n");     }     else printf("这是非空顺序栈!\n"); }  供参考～ 你好，我用你改的代码后还是没用。

引用 1 楼 qq_45798109的回复:函数原型的参数是指针类型，主函数里的s却不是指针 你好，我改了那个地方但还是没用。

void initstack(Sqstack *&L) 星号和&连用？

函数原型的参数是指针类型，主函数里的s却不是指针


Question: 为啥会这样呢？

今天之内最秀的帖子，没有之一。  如果已经解决，麻烦及时在电脑网页上结贴。 如果没有解决，可继续追问。 CSDN论坛新手指南

窗口标题已经说明了一切

直接贴代码吧～

这啥意思。。。

你能不能好好发帖子，就让人看一个黑框框吗？


Question: 求解答！！

x的取值是0,1；有什么问题吗？根据&&前一个&&先计算，如果为假，整个表达式为假（即0），如果前一个&&得出的是真， 继续后面的表达式。如果后面的表达式为真（即1）则整个表达式为真（1），否则真个表达式为假（即0）

a&&b  =1(a,b都不为零的情况下等1） 'A'<'B'  =1(因为A的ascii比B小） 1&&1  =1

x=(a&&b)&&(c<'B') x=(2&&5)&&('A'<'B') x=(true&&true)&&true=true 在C语言中0表示false，非0表示true x最终等于1


Question: C语言进制转换问题

/********************************************************************* 	Description: int型10进制数转换为radix进制字符串 	Language: C 	IDE: Visual Studio 2019 	Author: user-1 	Date: 2019-11-12 19:19:04 	From: https://bbs.csdn.net/topics/395030499 *********************************************************************/ #include <stdio.h> #include <stdlib.h> #define MAX_LEN 33 char* int_to_radix(int value, char str[], int radix) { 	if (radix < 2 || radix > 36) { 		printf("进制范围是[2,36]\n"); 		exit(-1); 	} 	char tab[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 	unsigned unum; 	int len = 0; 	int k = 0;// 正 	if (10 == radix && value < 0) { 		unum = (unsigned)(-value); 		str[len++] = '-'; 		k = 1;// 负 	} else { 		unum = (unsigned)value; 	} 	do { 		str[len++] = tab[unum % radix]; 		unum /= radix; 	} while (unum > 0); 	str[len] = '\0'; 	for (int i = k; i <= ((len - 1) >> 1); ++i) { 		char temp = str[i]; 		str[i] = str[len - 1 - i + k]; 		str[len - 1 - i + k] = temp; 	} 	return str; } int main(void) { 	int n, radis; 	scanf_s("%d %d", &n, &radis); 	char str[MAX_LEN]; 	int_to_radix(n, str, radis); 	printf("%s\n", str); 	return 0; } /********************************************************************* 2147483647 2 1111111 11111111 11111111 11111111 请按任意键继续. . . 2147483647 3 12112122212110202101 请按任意键继续. . . 2147483647 4 1333333333333333 请按任意键继续. . . 2147483647 5 13344223434042 请按任意键继续. . . 2147483647 10 2147483647 请按任意键继续. . . -1 10 -1 请按任意键继续. . . *********************************************************************/   如果已经解决，麻烦及时在电脑网页上结贴。 如果没有解决，可继续追问。 CSDN论坛新手指南


Question: 自己写CMakeList，make报错提示/usr/bin/ld: 找不到 -lxxx

这个应该是gcc的运行环境没配置好吧


Question: 输出任意区间内水仙花数的个数。帮忙看看代码哪里有问题，正确结果应该是4，不是11

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

嗯嗯，以后得多注意这些问题。谢谢指导~

引用 1 楼 qq_45798109的回复:建议你把码贴出来，这样才会有人看。 嗯嗯，新手上路，慢慢探索

因为你没有考虑n的值为1位数和2位数的问题。   while(t>9){     cnt++;     t = t/10; }  if(cnt <3){     n++;     continue; }  p = n;

建议你把码贴出来，这样才会有人看。


Question: 新手求解答

调换的话可以搞一个中间变量。

直接  指针名[下标]  。C的下表引用和间接访问表达式是一样的。

虽然不太理解你想表述的意思，但首先你要明白 数组名本身就是一个指针，例如int Arr[3] = {1, 2, 3}; 其中数组名Arr本质就是一个指针。 给你一段代码，把指针操作数组的不同方式列举了一下。 int main() {  	int arr[3] = {1, 2, 3}; 	int *pt = arr;  	*pt = 11;  	*(++pt) = 12; 	--pt;  	pt[2] = 13;  	//循环1 	for(int i=0; i<3; i++) 		cout<<*pt++<<endl;  	//循环2 	for(int i=0; i<3; i++) 		cout<<arr[i]<<endl; 	 }  执行代码之后，可以发现 循环1 和 循环2 的结果是一样的

最好举个例子，自己写个程序试试，结合实践是最好的～


Question: 求大神解答

/********************************************************************* 	Description: 快速排序 	Language: C 	IDE: Visual Studio 2019 	Author: wowpH 	Date: 2019-11-12 18:43:34 	From: https://bbs.csdn.net/topics/395029118 *********************************************************************/ #include <stdio.h> #include <stdlib.h>  // 数据，起始下标，结束下标 void quick_sort(int src[], int low, int high); int partition(int src[], int low, int high);  int main(void) { 	int size; 	printf("输入待排序的数据个数："); 	scanf_s("%d", &size); 	if (size <= 0) { 		printf("至少需要1个数据！\n"); 		exit(-1); 	} 	int* arr = (int*)malloc(size * sizeof(int));// 头文件stdlib.h 	if (NULL == arr) { 		printf("动态申请内存失败！请减少数据的个数！\n"); 		exit(-1); 	} 	printf("输入待排序的数据：\n"); 	for (int i = 0; i < size; ++i) { 		scanf_s("%d", &arr[i]); 	} 	quick_sort(arr, 0, size - 1); 	printf("升序排序后的数据：\n"); 	for (int i = 0; i < size; ++i) { 		printf("%d", arr[i]); 		putchar(i == size - 1 ? '\n' : ' '); 	} 	free(arr); 	return 0; } void quick_sort(int src[], int low, int high) { 	if (low < high) { 		int pivotloc = partition(src, low, high); 		quick_sort(src, 0, pivotloc - 1); 		quick_sort(src, pivotloc + 1, high); 	} } int partition(int src[], int low, int high) { 	int pivot_key = src[low]; 	while (low < high) { 		while (low < high && src[high] >= pivot_key) { 			--high; 		} 		src[low] = src[high]; 		while (low < high && src[low] <= pivot_key) { 			++low; 		} 		src[high] = src[low]; 	} 	src[low] = pivot_key; 	return low; } /********************************************************************* 输入待排序的数据个数：8 输入待排序的数据： 49 38 65 97 76 13 27 49 升序排序后的数据： 13 27 38 49 49 65 76 97 请按任意键继续. . . *********************************************************************/

快速排序算法，可以看一下


Question: C判断等差数列，输出公差。求大佬帮忙看看这个代码，运行结果有问题啊

引用 6 楼 Halozsy 的回复:[quote=引用 5 楼 weixin_40290083的回复:]你的flag如果为0了，那么就证明这个数列不是等差数列，就要退出循环了。按你的逻辑，如果1 3 5 7 8 10 12 16这个就是等差数列，因为8-7==1，而你的代码检测到这种情况后继续遍历数组进行判断，而后半段确实是等差数所，所以得到了错误的结果。  按你的代码改：将flag = 1 修改为flag = flag && 1;这样当检查到非等差的一组数时，flag为假，后半断的即使是等差数列，由于“与”运算，结果总为假。 嗯嗯发现问题了。辛苦答主敲字了，谢谢喽～[/quote]  1、如果问题已经得到解决，请及时结贴。结贴教程。 2、如果没有解决，可继续追问。 3、只能在电脑网页上结贴，手机不能结贴。 CSDN论坛新手指南

引用 5 楼 weixin_40290083的回复:你的flag如果为0了，那么就证明这个数列不是等差数列，就要退出循环了。按你的逻辑，如果1 3 5 7 8 10 12 16这个就是等差数列，因为8-7==1，而你的代码检测到这种情况后继续遍历数组进行判断，而后半段确实是等差数所，所以得到了错误的结果。  按你的代码改：将flag = 1 修改为flag = flag && 1;这样当检查到非等差的一组数时，flag为假，后半断的即使是等差数列，由于“与”运算，结果总为假。 嗯嗯发现问题了。辛苦答主敲字了，谢谢喽～

排序部分至少要用到j，你写的都是i。

冒泡排序写错了。怎么写去搜一下。

两种判断方法，注释的也是一种方法，

for (int i = 0; i < n; i++)     {         for (int j = 0; j < n - i - 1; j++)          {             if (Arr[j] > Arr[j + 1])             {                 int tmp = Arr[j + 1];                 Arr[j + 1] = Arr[j];                 Arr[j] = tmp;             }         } }


Question: 可以看看哪里写错了吗？

引用 4 楼 寻开心的回复:蓝色那一行所在的部分是做a[seat]和a[i]交换数据吧  把蓝色的改成 a[seat]=temp就好了 谢谢，好了。这个错误值得警惕！

把交换里的a[j-1] = a[i];改成： a[seat] = a[i];

引用 2 楼 up___lqw的回复:[quote=引用 1 楼 黑白判官的回复:]就蓝色那行。你都用seat了，突然用j-1是什么意思 换成seat后依然不对啊  [/quote] 你a[i]数值都改过了当然不对啊

引用 1 楼 黑白判官的回复:就蓝色那行。你都用seat了，突然用j-1是什么意思 换成seat后依然不对啊

就蓝色那行。你都用seat了，突然用j-1是什么意思


Question: C语言构建数组，最后显示小票问题

引用 3 楼 wowpH 的回复:输入F显示小票？下面这两行逻辑有点奇怪。 		while (strcmp(enter, "F") != 0) {  				if (strcmp(m[i].code, enter) == 0)   单步调试。。。CSDN论坛新手指南   您好，这个系统的意思是，最后一个人输入F点菜结束，自动弹出小票，现在是小票的内容不知道如何表示。这个自己搞了半天了也没弄懂……  #include <stdio.h> #include <string.h>  struct menu {     char code[5];     char name[50];     float price; }; int main(void) {     struct menu m[4]={         {"A1","RICE",23.1},{"B1","BURGER",232.1},{"C1","HOTDOG",21.22},{"D1","MILK",432.1}     };          char enter[15];     char order;     int n,i,j,k;//n=numbers          printf("enter the number of students:");     scanf("%d",&n);          for(j=1;j<=n;j++)     {         printf("\nstudent %d enter:",j);         scanf("%s",enter);                  while(strcmp(enter,"F")!=0)         {              for(i=0;i<4;i++)             {                  if(strcmp(m[i].code,enter)==0)                 printf("\n%s %s %f\n",m[i].code,m[i].name,m[i].price);             }                          printf("\nstudent %d enter:",j);             scanf("%s",enter);                                   }               }          for(k=1;k<=n;k++)     {         printf("\nThe order of student %d is %c",k,order);     }          printf("\n");       return 0; }

引用 2 楼 自信男孩 的回复:建议把每个人点餐记录下来，比如记录一下menu数组的下表，这样输出时就可以根据下表输出对应的点餐信息～  您好！是要单独列出一个char order[ ]吗？  然后在三十九行后面 写 order=order+（m[i].code,m[i].name,m[i].price），最后printf("%s",order)?  这样我试了一下好像出不来  用什么方法记录menu数组下表呢？  谢谢！


Question: ini文件加密

要加密可以使用本地数据库，参考http://www.sqlite.org/

猜测是安装程序的配置文件， 一般来说记录的是安装的文件名称和路径，  也许卸载程序会再次用到它 这样的文件一般说来都是文本文件，可以直接阅读 对他加密不加密，取决于实用的安装/卸载程序如何对它进行读写，这两个程序不修改，就无法改造ini文件本身，你改了安装/卸载程序很可能就无法正常工作了。 如果是借助第三方的安装工具生成的，那还是想第三方工具求解吧。 如果是自己的安装卸载程序就很容易做了， 文本加密解密而已， 太多方法了，可以对文本重新编码， 可以向文件里掺杂虚假数据，可以把文件改造成二进制的， 。。。。。。  ps 一般来说， 安装程序是只读的，你把ini文件弄成个 只读/隐藏/系统  这样的属性糊弄糊弄电脑不熟悉的人还是可以


Question: c语言链表程序错误

引用 7 楼 自信男孩的回复:[quote=引用 6 楼 Gnglas 的回复:] =  [quote=引用 4 楼 自信男孩 的回复:] #include<stdio.h> #include<stdlib.h> #include<string.h>  #pragma warning(disable : 4996) #define nuber 30 //题目：存储电影信息 typedef struct  _mv {     char mvname[nuber];     int rating;     struct _mv* next;                    //存储下一个节点的地址 }newmv;  char *s_gets(char* fp, int a);            //定义输入函数 void puts_s(struct _mv* p);  int main() {     newmv* head = NULL;     newmv* prev=NULL, * last=NULL;     char input[nuber];     puts("stdin mv the name");     while (s_gets(input,nuber)!=NULL&&input[0]!='\0')     {         prev = (struct _mv*)malloc(sizeof(struct _mv));         if(head==NULL)         {             head = prev;             last = head;    //link nodes             printf("stdin (0-9)");             scanf_s("%d", &prev->rating);             strcpy(prev->mvname, input);             getchar();    //for '\n'         }         else         {              strcpy(prev->mvname, input);             printf("stdin (0-9)");             scanf_s("%d", &prev->rating);             getchar();   //for '\n'             prev->next = NULL;             //link nodes             last->next = prev;             last = prev;         }         puts("stdin mv the name");     }     puts_s(head);//遍历链表，输出链表的内容 } void puts_s(struct _mv* phead) {     struct _mv *p = phead;     while (p != NULL)     {         printf("name:%s\tint:%d\n", p->mvname, p->rating);         p = p->next;     } }    //输入函数 char* s_gets(char* fp, int a) {     char* re=NULL, * find = NULL;     re = fgets(fp, a, stdin);     if (re)     {         find = strchr(fp, '\n');         if (find)             *find = '\0';         else             while (getchar() != '\n')             {                 continue;             }     }     return find; } 供参考～还有写链表，能不能，教我最重要的是什么[/quote] 最重要的是链表直接的链接以及关系～  链表是怎么链接起来的，为什么next就能找到下一个链表节点[/quote] 好的，我多练习练习       ，

引用 6 楼 Gnglas 的回复:=  [quote=引用 4 楼 自信男孩 的回复:] #include<stdio.h> #include<stdlib.h> #include<string.h>  #pragma warning(disable : 4996) #define nuber 30 //题目：存储电影信息 typedef struct  _mv {     char mvname[nuber];     int rating;     struct _mv* next;                    //存储下一个节点的地址 }newmv;  char *s_gets(char* fp, int a);            //定义输入函数 void puts_s(struct _mv* p);  int main() {     newmv* head = NULL;     newmv* prev=NULL, * last=NULL;     char input[nuber];     puts("stdin mv the name");     while (s_gets(input,nuber)!=NULL&&input[0]!='\0')     {         prev = (struct _mv*)malloc(sizeof(struct _mv));         if(head==NULL)         {             head = prev;             last = head;    //link nodes             printf("stdin (0-9)");             scanf_s("%d", &prev->rating);             strcpy(prev->mvname, input);             getchar();    //for '\n'         }         else         {              strcpy(prev->mvname, input);             printf("stdin (0-9)");             scanf_s("%d", &prev->rating);             getchar();   //for '\n'             prev->next = NULL;             //link nodes             last->next = prev;             last = prev;         }         puts("stdin mv the name");     }     puts_s(head);//遍历链表，输出链表的内容 } void puts_s(struct _mv* phead) {     struct _mv *p = phead;     while (p != NULL)     {         printf("name:%s\tint:%d\n", p->mvname, p->rating);         p = p->next;     } }    //输入函数 char* s_gets(char* fp, int a) {     char* re=NULL, * find = NULL;     re = fgets(fp, a, stdin);     if (re)     {         find = strchr(fp, '\n');         if (find)             *find = '\0';         else             while (getchar() != '\n')             {                 continue;             }     }     return find; } 供参考～还有写链表，能不能，教我最重要的是什么[/quote] 最重要的是链表直接的链接以及关系～  链表是怎么链接起来的，为什么next就能找到下一个链表节点

=  引用 4 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h> #include<string.h>  #pragma warning(disable : 4996) #define nuber 30 //题目：存储电影信息 typedef struct  _mv {     char mvname[nuber];     int rating;     struct _mv* next;                    //存储下一个节点的地址 }newmv;  char *s_gets(char* fp, int a);            //定义输入函数 void puts_s(struct _mv* p);  int main() {     newmv* head = NULL;     newmv* prev=NULL, * last=NULL;     char input[nuber];     puts("stdin mv the name");     while (s_gets(input,nuber)!=NULL&&input[0]!='\0')     {         prev = (struct _mv*)malloc(sizeof(struct _mv));         if(head==NULL)         {             head = prev;             last = head;    //link nodes             printf("stdin (0-9)");             scanf_s("%d", &prev->rating);             strcpy(prev->mvname, input);             getchar();    //for '\n'         }         else         {              strcpy(prev->mvname, input);             printf("stdin (0-9)");             scanf_s("%d", &prev->rating);             getchar();   //for '\n'             prev->next = NULL;             //link nodes             last->next = prev;             last = prev;         }         puts("stdin mv the name");     }     puts_s(head);//遍历链表，输出链表的内容 } void puts_s(struct _mv* phead) {     struct _mv *p = phead;     while (p != NULL)     {         printf("name:%s\tint:%d\n", p->mvname, p->rating);         p = p->next;     } }    //输入函数 char* s_gets(char* fp, int a) {     char* re=NULL, * find = NULL;     re = fgets(fp, a, stdin);     if (re)     {         find = strchr(fp, '\n');         if (find)             *find = '\0';         else             while (getchar() != '\n')             {                 continue;             }     }     return find; } 供参考～还有写链表，能不能，教我最重要的是什么

引用 4 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h> #include<string.h>  #pragma warning(disable : 4996) #define nuber 30 //题目：存储电影信息 typedef struct  _mv {     char mvname[nuber];     int rating;     struct _mv* next;                    //存储下一个节点的地址 }newmv;  char *s_gets(char* fp, int a);            //定义输入函数 void puts_s(struct _mv* p);  int main() {     newmv* head = NULL;     newmv* prev=NULL, * last=NULL;     char input[nuber];     puts("stdin mv the name");     while (s_gets(input,nuber)!=NULL&&input[0]!='\0')     {         prev = (struct _mv*)malloc(sizeof(struct _mv));         if(head==NULL)         {             head = prev;             last = head;    //link nodes             printf("stdin (0-9)");             scanf_s("%d", &prev->rating);             strcpy(prev->mvname, input);             getchar();    //for '\n'         }         else         {              strcpy(prev->mvname, input);             printf("stdin (0-9)");             scanf_s("%d", &prev->rating);             getchar();   //for '\n'             prev->next = NULL;             //link nodes             last->next = prev;             last = prev;         }         puts("stdin mv the name");     }     puts_s(head);//遍历链表，输出链表的内容 } void puts_s(struct _mv* phead) {     struct _mv *p = phead;     while (p != NULL)     {         printf("name:%s\tint:%d\n", p->mvname, p->rating);         p = p->next;     } }    //输入函数 char* s_gets(char* fp, int a) {     char* re=NULL, * find = NULL;     re = fgets(fp, a, stdin);     if (re)     {         find = strchr(fp, '\n');         if (find)             *find = '\0';         else             while (getchar() != '\n')             {                 continue;             }     }     return find; } 供参考～输入程序照搬的，实在没怎么看懂，能讲解一下吗

而且还有乱码


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

好的，懂了，感谢大佬们

表达式a++;先算表达式的值，再算++

a++表达式的值是a，++a的表达式取值a+1

a的值是 6 a++的值是 5 注意区分


Question: C语言如何编写才能使数组的长度自由的变化（等长与控制面板中输入字符串的长度）

把控制台输入的所有内容都放到一个内存当中吗？ C语言没有简单的函数可以直接做到， 理论上你可以从控制台输入任意长度的字符串进去，内存都可能装不下。 如果恰巧你用gets来获取字符串， 那就很可能冒内存越界的危险 所以，对于用户输入一定要有预期， 限定长度。这样就可以弄一个最大长度的数组来容纳所有的输入。 如果确实是类似字处理软件那样无限的输入，就不要想一次全部输入， 而是要自己建立自己的输入缓冲， 甚至保存到磁盘上去存储数据。

当空间不足时，开辟新空间，将原空间的数据移到新空间，释放原空间

数组一旦定义了之后长度是不能改变的。 可以用指针动态申请内存。  但是：等长与控制面板中输入字符串的长度。这句话什么意思？

你所看到的高级语言中的自由化数组长度都是用后实现的，比如MFC的CString，PHP的$array['0']['1']='hello word!'，用c语言你可以自己写字符串类，无非就是new，delete


Question: C语言。Xcode 一直报错 球球大佬相助

应该是那个指针不可更改， 不是malloc的问题是赋值的问题 形参和实参不是一个概念


Question: 弹弹球小游戏怎么打印边框

边框呢，唉

引用 2 楼 Guchcx 的回复:[quote=引用 1 楼 轻箬笠的回复:]边框是不是就是星号组成的长方形啊？ 是呀，就是想让小球在框框里面弹[/quote]  两个办法，一个是每次都将要打印的图案存入二维数组，然后输出数组，这样会导致边框频繁刷新，极不稳定 另一个是一次输出边框，改变小球位置时使用设置光标位置来抹去原来的求以及打印当前的球（具体实现自己查吧，不难）

引用 1 楼 轻箬笠的回复:边框是不是就是星号组成的长方形啊？ 是呀，就是想让小球在框框里面弹

边框是不是就是星号组成的长方形啊？


Question: 求大佬帮忙，，我头要炸了

及时结贴。CSDN论坛新手指南

给你写一个示例的，还是要学会自己使用搜索引擎啊。  #include <iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> using namespace std;  bool isPrime(int n) { 	// 是否存在因子 	for (int i = 2; i*i <= n; i++) { 		if (n % i == 0) return false; 	} 	return true; } int main() { 	int f[20]; 	f[0] = f[1] = 1; 	for (int i = 2; i < 20; i++) { 		f[i] = f[i - 1] + f[i - 2]; 	} 	int n; 	while (cin >> n) { 		int center = f[n]; 		cout << "该项为" << center << endl; 		cout << "最近质数为:"; 		for (int i = 1;; i++) { // 从中心往两边找 			if (center - i >= 2 && isPrime(center - i)) { 				cout << center - i << endl; 				break; 			} 			if (isPrime(center + i)) { 				cout << center + i << endl; 				break; 			} 		} 	} 	return 0; }

int i; for (i = 1; i < y; ++i) {     判断y-i是不是质数         是，退出     判断y+i是不是质数         是，退出 } 输出质数。

引用 2 楼 wowpH的回复:先学会斐波那契数列 再学会判断一个数是不是质数。 那么就可以解决了。       #include<stdio.h>     int fun(int x){ 	if(x == 1)return 1; 	if(x == 2) return 1; 	return fun(x-1) + fun(x-2); }   void main(){   	int num; 	 	printf("please input a number : ");   	scanf("%d",&num); 	 	int y = fun(num); 	 	printf("%d\n",y);   }    这个对不对呢 之后呢

引用 2 楼 wowpH的回复:先学会斐波那契数列 再学会判断一个数是不是质数。 那么就可以解决了。 哥...能不能给瞅一下具体的代码

先学会斐波那契数列 再学会判断一个数是不是质数。 那么就可以解决了。

刚开始学，，菜见谅


Question: C语言

引用 9 楼 huangzhixion_g 的回复:[quote=引用 8 楼 user-1的回复:][quote=引用 7 楼 huangzhixion_g 的回复:] 谢谢了，我刚看了几遍发现问题了，我又用float定义了一遍R1， 不客气。麻烦楼主结贴。 CSDN论坛新手指南 [/quote] 我是刚下的这个，不知道怎么结帖[/quote] 电脑结贴。手机不能结贴。

引用 8 楼 user-1的回复:[quote=引用 7 楼 huangzhixion_g 的回复:] 谢谢了，我刚看了几遍发现问题了，我又用float定义了一遍R1， 不客气。麻烦楼主结贴。 CSDN论坛新手指南 [/quote] 我是刚下的这个，不知道怎么结帖

引用 7 楼 huangzhixion_g 的回复:谢谢了，我刚看了几遍发现问题了，我又用float定义了一遍R1， 不客气。麻烦楼主结贴。 CSDN论坛新手指南

引用 6 楼 user-1的回复:这么看着没问题啊。 或者你试试下面这样。  #define R1 0.1  CSDN论坛新手指南 谢谢了，我刚看了几遍发现问题了，我又用float定义了一遍R1，

引用 3 楼 user-1的回复:不介意的话，将代码展示一下。 #include<stdio.h> #define       R1     0.1

#include<stdio.h> #define       R1     0.1

不介意的话，将代码展示一下。

#define是宏定义。

引用 楼主 huangzhixion_g的回复:in expansion of macro 是什么意思 在#define  中出现的


Question: C语言

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

⑴最多可以写3次，用for循环 ⑵整数和字符串转换iota, atoi 函数

会用while，for，do while就知道怎么整了吧


Question: c语言比较运算符求逻辑值问题

引用 5 楼 a149979032 的回复:修改程序如下: #include＂stdio.h＂ int main() {     int i = 5,j = 10,k = 1;     int sum;     sum = k > i < j;     printf("%d\n",sum);     return 0; } 此时k>i<j,即有1>5为假，故为0，然后0跟后面的j 比较，有0<10为真，所以等于1 真正的程序别这样写！

引用 3 楼 杭城彭于晏 的回复:[quote=引用 2 楼 proorck2019 的回复：]1>(5<10) 1>0 1关系运算符自左向右[/quote] 解决了就结贴。CSDN论坛新手指南

引用 2 楼 proorck2019 的回复：1>(5<10) 1>0 1关系运算符自左向右

1>(5<10) 1>0 1

c语言能不能直接写1<=x<10？ 关系运算符 8级<、<=、>、>=关系运算符。相等运算符 9级“ == ”等于运算符；“ != ”不等于运算符。他们是左结合，也就是从左到右运算。所以等价于(1<=x)<10。1<=x如果为假值为0，为真，也就是为1（注意虽然非0即真，但是c语言逻辑运算符结果真的取值标准中规定直接取1，而不是任意非的值）。最终结果是1<10，也就是1。


Question:
#include
#include

int main()
{
int a,b,c;
for(a=1;a<34;a++

=赋值运算符 ==关系运算符  CSDN论坛新手指南

你第三层循环可以删了 还有你这个有bug的，c/2在这边是整除号

#include <stdio.h> #include <stdlib.h>  int main() { int a,b,c; for(a=1;a<34;a++)     for(b=1;b<50;b++)     for(c=1;c<100;c++) {c=100-a-b;     if((3*a+2*b+c/2)==100)         printf("大马是%d匹，中马是%d匹，小马是%d匹。\n",a,b,c); }  return 0; }


Question: c#wds窗体应用入门求助

创建一个c#窗体，先把界面做出来。给按钮做个clik事件，提取textbox中的内容，做一下简单的处理就好了。

⑴图形用户界面 ⑵字符串操作

这个不就是拖拖控件的事情吗？


Question: 各位大佬输出不了 程序也没错  就是计算组合数

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

int z(int a) { int y; return a*z(a-1) ;	 }  陷入了死循环，你需要重新实现以下阶乘  long long z(int a){ long long result = a; while(a--)     result*=a; return result; }

一个int类型的k为什么要输出%ld


Question: 求一个解答思路！！有些懵

引用 16 楼 wowpH的回复:[quote=引用 15 楼 qq_45836904 的回复:] [quote=引用 12 楼 wowpH的回复:]如果还不行的话。就把square和num的声明也放到前面。 没法结贴……！！怎么办[/quote]为什么没法结贴。[/quote] 限制发帖了……没法结算过几天才能解除后结

引用 15 楼 qq_45836904 的回复:[quote=引用 12 楼 wowpH的回复:]如果还不行的话。就把square和num的声明也放到前面。 没法结贴……！！怎么办[/quote]为什么没法结贴。

引用 12 楼 wowpH的回复:如果还不行的话。就把square和num的声明也放到前面。 没法结贴……！！怎么办

引用 12 楼 wowpH的回复:如果还不行的话。就把square和num的声明也放到前面。 被限制发帖了怎么搞啊……！！

引用 9 楼 wowpH的回复:之前的思路错了个地方。。。下面才是对的。 #include <stdio.h> #include <math.h> int main(void) { 	int found = 0; 	for (int i = 1; i < 10; ++i) { 		for (int j = 0; j < 10; ++j) { 			int num = i * 1000 + i * 100 + j * 10 + j; 			int square = (int)sqrt(num);// 头文件math.h 			if (square * square == num) { 				printf("车牌号是：%d\n", num); 				found = 1; 				break; 			} 		} 		if (1 == found) { 			break; 		} 	} 	return 0; } /* 车牌号是：7744 请按任意键继续. . . */  CSDN论坛新手指南 哦哦哦懂了懂了我明白了！

如果还不行的话。就把square和num的声明也放到前面。

这个可以了。没问题就及时结贴。  #include <stdio.h> #include <math.h> int main(void) { 	int found = 0; 	int i, j; 	for (i = 1; i < 10; ++i) { 		for (j = 0; j < 10; ++j) { 			int num = i * 1000 + i * 100 + j * 10 + j; 			int square = (int)sqrt(num);// 头文件math.h 			if (square * square == num) { 				printf("车牌号是：%d\n", num); 				found = 1; 				break; 			} 		} 		if (1 == found) { 			break; 		} 	} 	return 0; } /* 车牌号是：7744 请按任意键继续. . . */

引用 9 楼 wowpH的回复:之前的思路错了个地方。。。下面才是对的。 #include <stdio.h> #include <math.h> int main(void) { 	int found = 0; 	for (int i = 1; i < 10; ++i) { 		for (int j = 0; j < 10; ++j) { 			int num = i * 1000 + i * 100 + j * 10 + j; 			int square = (int)sqrt(num);// 头文件math.h 			if (square * square == num) { 				printf("车牌号是：%d\n", num); 				found = 1; 				break; 			} 		} 		if (1 == found) { 			break; 		} 	} 	return 0; } /* 车牌号是：7744 请按任意键继续. . . */  CSDN论坛新手指南 这个vc运行完不出结果啊！！！？

引用 4 楼 wowpH的回复: for (i从1到9) {     for (j从0到9) {         if (i和j不等) {             牌号 = i * 1000 + i * 100 + j * 10 + j;             算术平方根 = (int)sqrt(牌号);             if (牌号是算术平方根的整数倍) {                 输出牌号;                 找到，退出;             }         }     }     if (找到) {         退出;     } }  #include<stdio.h> #include<math.h> int main(void) { 	int i,j,x,num; 	printf("输入i,j:"); 	scanf("%d%d",&i,&j); for (i>=1&&i<=9;;){ for(j>=0&&j<=9;;){ 				if(i!=j){ 					num=i*1000+i*100+j*10+j; 					x=(int)sqrt(num); 					if(num%x==0){ 						printf("输出牌号：%d",num);break;}	 接下来怎么接啊…又懵了

引用 2 楼 qq_45798109的回复:设两层循环ij从0到1 判断i!=j且iijj这个四位数kaipingfang是个整数 至于判断kaipingfang是不是整数,你可以开出来之后再平方看看等不等它自己 我懵了，kaipingfang居然是个敏感词。。。。

没看明白怎么解……来人说一下思路呗我自己写程序就行


Question: 能不能解释一下这个代码是啥意思？

第8行代码应该是打印错误吧？在英文输入法中，是不区分左右双引号的

只有代码，没有需求吗？建议根据需求，分析代码可能会更快些～

自己动手打一下就知道了呀

自己动手打一下就知道了呀

加1 CSDN论坛新手指南

自己动手打一下就知道了呀


Question: 为什么第四题是这个答案，求解？

引用 11 楼 qq_45865479 的回复:[quote=引用 9 楼 wowpH的回复:][quote=引用 8 楼 qq_45865479 的回复:] [quote=引用 6 楼 wowpH的回复:][quote=引用 5 楼 qq_45865479 的回复:] 哦，我知道了，这样啊，谢谢大佬。 不客气。CSDN论坛新手指南 [/quote] 这个结贴给分是自动的吗，大佬？[/quote] 不是自动的。只能电脑手动结贴。[/quote] 啊。那我用的是手机怎么办？[/quote] 买个电脑。

引用 9 楼 wowpH的回复:[quote=引用 8 楼 qq_45865479 的回复:] [quote=引用 6 楼 wowpH的回复:][quote=引用 5 楼 qq_45865479 的回复:] 哦，我知道了，这样啊，谢谢大佬。 不客气。CSDN论坛新手指南 [/quote] 这个结贴给分是自动的吗，大佬？[/quote] 不是自动的。只能电脑手动结贴。[/quote] 啊。那我用的是手机怎么办？

啊，那我用的是手机怎么办？

引用 8 楼 qq_45865479 的回复:[quote=引用 6 楼 wowpH的回复:][quote=引用 5 楼 qq_45865479 的回复:] 哦，我知道了，这样啊，谢谢大佬。 不客气。CSDN论坛新手指南 [/quote] 这个结贴给分是自动的吗，大佬？[/quote] 不是自动的。只能电脑手动结贴。

引用 6 楼 wowpH的回复:[quote=引用 5 楼 qq_45865479 的回复:] 哦，我知道了，这样啊，谢谢大佬。 不客气。CSDN论坛新手指南 [/quote] 这个结贴给分是自动的吗，大佬？

这个结贴和分是自动的吗，大佬？

引用 5 楼 qq_45865479 的回复:哦，我知道了，这样啊，谢谢大佬。 不客气。CSDN论坛新手指南

哦，我知道了，这样啊，谢谢大佬。

这个有啥的一步一步分析不就行了

图片没法看，歪头，挤眼都不行呢

要不然呢，3—2不就是等于1，while ！--1，不就是while !0，为真，继续执行，然后减2，不就得-2，然后while -3不就是假，就退出了

你这图片是故意放上来难为人的？


Question: 请问这类题是怎么做的？

这类程序不用做，连最基本的大小端都没说明

引用 4 楼 黑白判官的回复:引用 1 楼 SuperDay 的回复:int是32位的啊，这题目是错的为啥这么说 int和long都是32位的，最后k的值是0x39

在这个程序里，int是16位，long是32位，应该

题目应该是很老的题目了，应该是16位系统的时候出的题目～

int是32位的啊，这题目是错的


Question: 初学菜鸟 求大神帮助

引用 1 楼 自信男孩的回复:不是很难的，为啥不自己写写呢 怎么同时表示n个元素最大的m个并且求这m个元素的和

输入字符串str; 整型sum 初始化为0; for (整型i=0; 不是结束符; i自增) {     if (当前字符是数字) {         sum += (字符 - '0');     } } 输出sum;

不是很难的，为啥不自己写写呢，自己查资料的过程也是学习的过程，也是培养自我的过程

这个不会的话 可以先去学习下基本的语法

不是很难的，为啥不自己写写呢


Question: 帮帮忙

厉害，居然还有Turbo C

楼上厉害。我刚看提示，还在找哪里少分号呢。原来是楼主粗心大意了。

while不是whlie 单词拼写错误～


Question: 三个数字求最大公约数和最小公倍数，哪里错了？

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

引用 9 楼 SYoooooh 的回复:[quote=引用 7 楼 datoulaile123的回复:]解决了问题的话就结贴吧 怎么给。。。不会第一次发帖子[/quote] https://blog.csdn.net/pfdvnah/article/details/102736418 手机暂时无法结贴

引用 7 楼 datoulaile123的回复:解决了问题的话就结贴吧 怎么给。。。不会第一次发帖子

引用 4 楼 SYoooooh 的回复:[quote=引用 3 楼 datoulaile123的回复:]#include<stdio.h>  int main() {     int  a,b,c;     scanf("%d%d%d",&a,&b,&c);     int n;     if(a>b) {         if(c>a)n=c;         if(c<a)n=a;     }     else {         if(b>c)n=b;         else n=c;     }     do {         if(n%a==0&&n%b==0&&n%c==0) {}         else n++;     } while(n%a!=0||n%b!=0||n%c!=0);     printf("最小公倍数%d",n);     if(a>b) {         if(b>c)n=c;         if(b<c)n=b;     }     else {         if(a>c)n=c;         else n=a;     }     do {          if(a%n==0&&b%n==0&&c%n==0) {}         else n--;     } while(a%n!=0||b%n!=0||c%n!=0);     printf("最大公约数%d",n);     return 0; } 你的while语句判断不对,n%a==0&&n%b==0&&n%c==0表示要跳出循环了，所以你的代码里这个while的条件必定是这个条件的相反条件，当然其实可以直接写while(1),可以在if那个条件满足时加break跳出循环; 满足跳出时n不就是那个需要的数吗？[/quote] while条件里的参数是非0继续循环，0停止循环，你要是写成&&，你想想是不是n%a!=0就满足条件跳出循环了，其实你想要做的是都满足三个都被整除才跳出循环，你可以在循环里 n++;后面加个bool值的变量，然后将你代码里的n%a!=0&&n%b!=0&&n%c!=0赋值给该变量，看看是true还是false，你会发现，n只要被一个数整除，他就是false了（放在你的while条件里就是跳出循环了）

感觉还是不够严谨啊，如果a=c的话，你这个n都没有赋初值就是一个随机数了呀，可以不用写如果a大于c然后又写如果a小于c，直接用else就好了。

解决了问题的话就结贴吧

引用 5 楼 datoulaile123的回复:[quote=引用 4 楼 SYoooooh 的回复:] [quote=引用 3 楼 datoulaile123的回复:]#include<stdio.h>  int main() {     int  a,b,c;     scanf("%d%d%d",&a,&b,&c);     int n;     if(a>b) {         if(c>a)n=c;         if(c<a)n=a;     }     else {         if(b>c)n=b;         else n=c;     }     do {         if(n%a==0&&n%b==0&&n%c==0) {}         else n++;     } while(n%a!=0||n%b!=0||n%c!=0);     printf("最小公倍数%d",n);     if(a>b) {         if(b>c)n=c;         if(b<c)n=b;     }     else {         if(a>c)n=c;         else n=a;     }     do {          if(a%n==0&&b%n==0&&c%n==0) {}         else n--;     } while(a%n!=0||b%n!=0||c%n!=0);     printf("最大公约数%d",n);     return 0; } 你的while语句判断不对,n%a==0&&n%b==0&&n%c==0表示要跳出循环了，所以你的代码里这个while的条件必定是这个条件的相反条件，当然其实可以直接写while(1),可以在if那个条件满足时加break跳出循环; 满足跳出时n不就是那个需要的数吗？[/quote] while条件里的参数是非0继续循环，0停止循环，你要是写成&&，你想想是不是n%a!=0就满足条件跳出循环了，其实你想要做的是都满足三个都被整除才跳出循环，你可以在循环里 n++;后面加个bool值的变量，然后将你代码里的n%a!=0&&n%b!=0&&n%c!=0赋值给该变量，看看是true还是false，你会发现，n只要被一个数整除，他就是false了（放在你的while条件里就是跳出循环了）[/quote] 把while 判断改成丨丨连接就可以，对吧，我也是猛地一下想起来的&&只要满足一个就会跳出，我太大意了，谢谢呀

引用 3 楼 datoulaile123的回复:#include<stdio.h>  int main() {     int  a,b,c;     scanf("%d%d%d",&a,&b,&c);     int n;     if(a>b) {         if(c>a)n=c;         if(c<a)n=a;     }     else {         if(b>c)n=b;         else n=c;     }     do {         if(n%a==0&&n%b==0&&n%c==0) {}         else n++;     } while(n%a!=0||n%b!=0||n%c!=0);     printf("最小公倍数%d",n);     if(a>b) {         if(b>c)n=c;         if(b<c)n=b;     }     else {         if(a>c)n=c;         else n=a;     }     do {          if(a%n==0&&b%n==0&&c%n==0) {}         else n--;     } while(a%n!=0||b%n!=0||c%n!=0);     printf("最大公约数%d",n);     return 0; } 你的while语句判断不对,n%a==0&&n%b==0&&n%c==0表示要跳出循环了，所以你的代码里这个while的条件必定是这个条件的相反条件，当然其实可以直接写while(1),可以在if那个条件满足时加break跳出循环; 满足跳出时n不就是那个需要的数吗？

你do while循环用的也太复杂了吧，楼上说的没错就是循环那边的问题 do { 		if (n % a == 0 && n % b == 0 && n % c == 0) { break; } 		else n++; 	} while (1);

电脑没有编译器，没有编译，大体看了下，如果没有编译问题，我发现一个疑点就是："!="不等于，程序里面不应该是"=="吗？


Question: 大神帮帮忙，算法我是找不出来哪有问题了

重新学习下字符串的输入输出

1、考虑输入的字符串不足100个字符的情况。 2、考虑输入字符串时使用tab间隔单词 3、考虑输入时使用换行符间隔单词。

char a[100],*p; //用字符数组 int i,f; scanf( "%[^\n]", a)； p=a; for (f=1, p=a;*p!='\0';p++) //f是单词开头标志 {     if (*p == ' ') f=1; //如果遇到空格，就设置单词开头标志    else if (f == 1) //如果是单词开头    {         if (*p<='z'&&*p>='a') *p=*p-32; //如果单词开头是小写字母，则变为大写         f = 0; //     } } printf("%s ", a)

#include <stdio.h> #include <ctype.h>  //void main() int main() {     char str[128];     int i = 0, flag = 0;      fgets(str, 128, stdin);      while (str[i] && !isalpha(str[i]))         i++;      while (str[i]) {         if (i == 0 &&islower(str[i]))                 str[i] -= 32;         if (flag) {             if (islower(str[i])) {                 str[i] -= 32;                 flag = 0;             }         }         if (str[i] == ' ')             flag = 1;         i++;     }      printf("%s", str);     /*     int a[100],i,*p;     for (i=0;i<100;i++)         scanf("%d",a+i);     p=a;     for (p=a;*(p+i)!='\0';p++)     {         if (*p<='z'&&*p>='a')             *p=*p-32;         else if (*(p+i-1)==' '&&*(p+i)<='z'&&*(p+i)>='a')             *(p+i)=*(p+i)-32;         printf ("%4d",a[i]);     }     */     return 0; } 供参考～  楼主的代码和字符串没有关系呢


Question: 单片机AVR寄存器

引用 1 楼 user-1的回复:就是PORTC=PORTC & 0b11111000  &的作用该位都为1则为1，反之为0，比如PORTC如果为0b10100001,则得到的结果为0b10100000 还是不怎么懂？我那个0b11111000不也是个还没得出的结果嘛？


Question: C语言用do   while语法求e

#include <stdio.h>  int main() {  	double x = 1.0; 	double dResult = 1.0; 	int n; 	printf("请输入n的值："); 	scanf("%d", &n); 	do  	{ 		x = 1.0; 		if (n>0) 		{ 			for (int j = 1; j <= n; j++) 			{ 				x *= j; 			} 		} 		dResult += 1 / x; 		n--; 	} while (n); 	 	printf("%f", dResult); 	return 0; }

#include <stdio.h> int main() {  	float i,e=1; 	int n; 	printf("请输入n的值："); 	scanf("%d",&n); 	for(i=1;i<=n;i++)         e+=1/i; 	printf("%f",e); 	return 0; }

引用 6 楼 user-5的回复:可以用递归，再用都while调用 不会呀，咋搞，只会for

⑴求阶乘的函数 ⑵x=1/fact(n) ⑶sum+=x ⑷循环的退出条件

引用 1 楼 自信男孩的回复:自己写写吧，起码动动手 不会啊，要是会就不用来问了，自己写了但出来结果

自己写写吧，起码动动手

可以用递归，再用都while调用


Question: c 萌新

引用 4 楼 weixin_45838623 的回复:[quote=引用 3 楼 自信男孩的回复:]只有多写多练，没有其他方法。如果自己不会写，那就抄写书本或别人的代码，然后自己学着调试～ 大佬，哪里可以找到别人的代码？有没有具体的网址啥的，[/quote] 1、自己写（包括调试） 2、搜索，（百度等等）。 3、问别人  另外谁会搞个网址，就为了发你们课本的代码啊。。。。。百度基本都能解决的。

引用 3 楼 自信男孩的回复:只有多写多练，没有其他方法。如果自己不会写，那就抄写书本或别人的代码，然后自己学着调试～ 大佬，哪里可以找到别人的代码？有没有具体的网址啥的，

从最简单的程序开始练手，慢慢积累，自然就熟悉了

各位路过的大佬帮帮忙呀


Question: 各位老师，帮我看看，我着实不知那儿有错误

代码没太大问题，简单修改了以下 #include <stdio.h> #include <stdlib.h> #define N 10 int main() { 	int a[N], *p, *q, t, i; 	for (i = 0; i<10; i++) 		scanf("%d", a + i); 	p = a; q = a + N - 1; 	while (p<q) 	{ 		t = *p; *p = *q; *q = t; 		p++; q--; 	} 	printf("%d", a[0]);//-----输出第一个元素时前面不加空格----- 	for (i = 1; i<10; i++)//-----------从第二个元素开始，前面加空格------- 		printf("%4d", a[i]); 	system("pause");//-----------窗口暂停------------- 	return 0; } VS2015调试结果

我要是用指针将一个字符串逆序输出

你是要对10个元素的数组排序吗？

没说明编程目标，算法问题别人也不好猜。

引用 5 楼 0^??^0 的回复:之前少了头文件，但运行结果却是错的 #include <stdio.h> #define N 10 void main() { int a[N],*p,*q,t,i;   for(i=0;i<10;i++) 	  scanf("%d",a+i);  p=a;q=a+N-1;  while(p<q)  { t=*p;*p=*q;*q=t;    p++;q--;  }  for(i=0;i<10;i++) 	 printf("%4d",a[i]); } 楼主把预期的结果和自己实际运行的结果贴出来看看

没什么错，如果是完全的话 加个输入输出的头文件

#include <stdio.h>   #define N 10   //void main() int main() {     int a[N],*p,*q,t,i;      for(i=0;i<N;i++)         scanf("%d", a+i);     p = a;     q = a+N-1;     while(p < q) {         t  = *p;         *p = *q;         *q = t;         p++;         q--;     }     for(i=0;i< N;i++)         printf("%4d", a[i]);      return 0; } 供参考～  程序没什么问题。

输出时候加个空格之类的，看不出什么问题，调试一下看看


Question: PTA关于组合数的问题

引用 1 楼 早打大打打核战争的回复:double C(int n, int m) {   double r = n;    if (n < 1 || m < 1 || n < m) return 0;   if (n == m) return 1;   if (m > n - m) m = n - m;   for (int i = 2; i <= m; i++) r = r * --n / i;    return r; } 谢谢大佬，大佬天天开心

引用 1 楼 早打大打打核战争的回复:double C(int n, int m) {   double r = n;    if (n < 1 || m < 1 || n < m) return 0;   if (n == m) return 1;   if (m > n - m) m = n - m;   for (int i = 2; i <= m; i++) r = r * --n / i;    return r; } 大佬，你给的参考我会输入进去查看答案，没问题之后给你结贴


Question: 写程序

引用 3 楼 Philomath丶的回复:题主以后是不想写程序了吗？ 是不知道怎么写啊，不是不想写，写错了，自己也知道哪错了，刚学

引用 2 楼 yangcxyy 的回复:[quote=引用 1 楼 user-3的回复:]自己搜。。。。 去哪搜，怎么才能搜得到？[/quote] 使用关键字呢，百度，google等等都可以的～

题主以后是不想写程序了吗？

引用 1 楼 user-3的回复:自己搜。。。。 去哪搜，怎么才能搜得到？

自己搜。。。。


Question: PAT 乙级 1004段错误求助！

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

#include<stdio.h> #include<stdlib.h>  #define len sizeof(struct student) struct student *creat(void);  struct student {     char name[11];     char sno[11];     int score;     struct student *next; };  int main(void) {      struct student *phead, *pcur;     struct student *pmax_stu, *pmin_stu;      phead = creat();      pcur = phead;     pmax_stu = pmin_stu = phead;     while (pcur) {         if (pcur->score > pmax_stu->score)             pmax_stu = pcur;         if (pcur->score < pmin_stu->score)             pmin_stu = pcur;         pcur = pcur->next;     }      printf("%s %s\n", pmax_stu->name, pmax_stu->sno);     printf("%s %s\n", pmin_stu->name, pmin_stu->sno); #if 0     struct student *p,*p1,*p2,*p3,*p4,*p5;     int max,min;     p=p3=p4=creat();     //只有一个同学时     p5=p4;     p4=p4->next;     /*     if(p4->name==NULL){         printf("%s %s\n",p5->name,p5->sno);         printf("%s %s\n",p5->name,p5->sno);     }     */     //最大值寻找     p1=p;     max=p->score;     p=p->next;     do{         if(max<(p->score)){             max=p->score;             p1=p;         }         p=p->next;     }while(p->next!=NULL);     //最小值寻找     p2=p3;     min=p3->score;     p3=p3->next;     do{         if(min>(p3->score)){             min=p3->score;             p2=p3;         }         p3=p3->next;     }while(p3->next!=NULL);     printf("%s %s\n",p1->name,p1->sno);     printf("%s %s\n",p2->name,p2->sno); #endif }  struct student *creat(void) {     int n,i;     struct student *head;     struct student *p1,*p2;      scanf("%d",&n);     //p2=(struct student*)malloc(len);     p1=(struct student*)malloc(len);      for(i=0;i<n;i++){         scanf("%s %s %d", p1->name,p1->sno,&p1->score);         if(i==0){             head=p1;         }         else{             p2->next=p1;         }         p2=p1;         if(i!=n-1){             p1=(struct student*)malloc(len);         }     }     p2->next=NULL;     return (head); } 供参考～  楼主考虑的比较繁琐吧，建议对比代码找一下自己的问题～

送你：CSDN论坛新手指南

#include<stdio.h> #include<stdlib.h> #define len sizeof(struct student) struct student *creat(void); struct student { 	char name[11]; 	char sno[11]; 	int score; 	struct student *next; }; int main(void){ 	struct student *p,*p1,*p2,*p3,*p4,*p5; 	int max,min; 	p=p3=p4=creat();     //只有一个同学时 	p5=p4; 	p4=p4->next; 	if(p4->name==NULL){ 		printf("%s %s\n",p5->name,p5->sno); 		printf("%s %s\n",p5->name,p5->sno); 	}     //最大值寻找 	p1=p; 	max=p->score; 	p=p->next; 	do{ 		if(max<(p->score)){ 		    max=p->score;	 		    p1=p; 		} 		p=p->next; 	}while(p->next!=NULL);      //最小值寻找 	p2=p3; 	min=p3->score; 	p3=p3->next; 	do{ 		if(min>(p3->score)){ 			min=p3->score; 			p2=p3; 		} 		p3=p3->next; 	}while(p3->next!=NULL); 	printf("%s %s\n",p1->name,p1->sno); 	printf("%s %s\n",p2->name,p2->sno); } struct student *creat(void) { 	int n,i; 	struct student *head; 	struct student *p1,*p2; 	scanf("%d",&n); 	p2=(struct student*)malloc(len);	 	p1=(struct student*)malloc(len); 	for(i=0;i<n;i++){ 		scanf("%s %s %d",p1->name,p1->sno,&p1->score); 		if(i==0){ 			head=p1; 		} 		else{ 			p2->next=p1; 		} 		p2=p1; 		if(i!=n-1){ 			p1=(struct student*)malloc(len); 		} 	} 	p2->next=NULL; 	return (head); }

引用 2 楼 wowpH 的回复：送你：CSDN论坛新手指南谢谢，现在放代码

引用 1 楼 qq_45798109 的回复：以后不要再发截图了，直接贴代码吧，给你看帖子的人也不是编译器，看一下就可以运行出来；除非闲得无聊，一般没有人会把你的代码去打一遍的谢谢前辈


Question: 求助，Makefile小白，能帮助写一个Makefile文件吗

引用 1 楼 这是一个正经昵称 的回复:CC       = gcc TARGET   = test SOURCES  = a.c b.c main.c OBJECTS  = a.o b.o main.o   all:$(TARGET)         chmod 777 $(TARGET)         ./$(TARGET) &  $(TARGET):$(OBJECTS)         $(CC) $(SOURCES) -o $(TARGET)  clean:         rm *.o $(TARGET) 这样吗？我不是很确定  谢谢了，已经搞定了


i >= k+1；其实也可以写成i > k;都是可以的。因为如果是i > k；说明i的循环次数是遇到i <= k不满足退出的，而不是break出来的。  所以可以认为是素数～

如果i<k说明它是break出来的就是说找到了他的因数， i>=k说明他是循环到头出来的即没有找到他的因数


Question: 大哥帮我看一下为啥只能输出407

#include"stdio.h" int main() {     int a,b,c,d;      for(a=100; a<1000 ;a++)     {         b = a % 10;    //个位         c = a / 10 % 10;   //十位         d = a / 100 % 10;    //百位         /*         c = a/100;         //b=(a-c*100)/10;         b = (a/10) % 10;         d = a%100;         //printf("a = %d, b = %d, c = %d\n", a, b, c);         */         if(a==b*b*b+c*c*c+d*d*d)             printf("%d\t",a);     }     putchar(10);      return 0; } 供参考～

d=a%100 这是个位数吗？应该模10吧？


Question: 大佬们，这个程序出现了什么问题

把a=0放到第二层循环外面，即第二层循环前，第一层循环里就可以了。  或者把第二层循环里的if里加一个break，即跳出第二层循环。

相让别人替你改原来的程序的话最好贴出来码 #include <stdio.h> #include <math.h> bool isPrime(int n) { 	if (n < 2) return 0; 	for (int i = 2; i <= (int)sqrt(n); ++i) 		if (n % i == 0) 			return false; 	return true; } int main() { 	int count = 0; 	for (int i = 2; i < 100; ++i) { 		if (isPrime(i)) { 			printf("%d ", i); 			count++; 			if (count == 5) { 				printf("\n"); 				count = 0; 			} 		} 	} 	return 0; }

引用 3 楼 user-4 的回复:[quote=引用 2 楼 qq_45744248 的回复:] [quote=引用 1 楼 qq_45798109的回复:]运行的出来，你也不说你想干嘛，谁知道有什么问题 输出100以内的所有素数，满五个素数换行[/quote] 所以问题是啥呢？其次将以前的帖子结一下。CSDN论坛新手指南 [/quote] 看到问题了。。。。我眼瞎。

引用 2 楼 qq_45744248 的回复:[quote=引用 1 楼 qq_45798109的回复:]运行的出来，你也不说你想干嘛，谁知道有什么问题 输出100以内的所有素数，满五个素数换行[/quote] 所以问题是啥呢？其次将以前的帖子结一下。CSDN论坛新手指南

引用 1 楼 qq_45798109的回复:运行的出来，你也不说你想干嘛，谁知道有什么问题 输出100以内的所有素数，满五个素数换行

运行的出来，你也不说你想干嘛，谁知道有什么问题


Question: 我想写用独立按键，控制液晶12864显示汉字和数字。一个键，显示一行

希望大佬们能帮我看看


Question: 萌新C语言入门例题求解

while(x>e) {sum+=...}


Question: status未定义标识符

typedef int Startus;//获得元素的操作 对比一下，看这个拼写是否和status有差别。可以再细心一些～

既然是没定义标识符 那你定义一下啊  为什么这样的问题需要问? 肚子饿 需要问怎么处理吗? 你吃东西啊

typedef int Startus;//获得元素的操作 注意拼写错误

拼写错误 Status  ，是状态的意思 Startus  这儿定义错了

#include<stdio.h> #define OK 1 #define ERROR 0 #define TURN 1 #define  FALSE 0 #define MAXSIZE 20  typedef int ElemType; typedef struct //线性表顺序存储空间 { 	ElemType data[MAXSIZE]; 	int length;  }SqList; typedef int Startus;//获得元素的操作 Startus GetElem(SqList L, int i, ElemType *e) { 	if (L.length == 0 || i<1 || i>L.length) 		return ERROR; 	*e = L.data[i - 1]; 	return OK; } /*初始条件：顺序表线性表存在，1<=i<=ListLength(L),*/ /*操作结果：在L中第i个位置之前插入一个新的数据元素e，L的长度加一*/ Status ListInsert(SqList *L, int i, ElemType e) { 	int k; 	if (L->length == MAXSIZE) 		return  ERROR; 	if (i<1 || i>L->length + 1) 		return ERROR;  	if (i <= L->length) 	{ 		for (k = L->length - 1; k >= 1; k--) 			L->data[k + 1] = L->data[k];  	} 	L->data[i - 1] = e; 	L->length++; 	return OK; } Status未定义标识符怎么处理

贴代码吧 你看一下status是不是typedef或define了？如果没有确实是未定义的～

代码放出来啊


Question: 这个线性表指针是什么问题？

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

直接贴代码吧  最后的一个程序，ptr指向了L, 在Makenode里为什么还要malloc呢? 要么就不要指向L，直接接收Makenode里申请空间即可。


Question: 请大佬求助萌新

undefined reference to “sprt“ 找不到sprt这个名字

sqrt


Question: 萌新求助 ，大佬们帮我看看这个怎么写

去搜索冒泡排序，很简单

用p记录最小值，循环一遍后，a[p]最小。

引用 2 楼 proorck2019的回复:for(p=0,j=1;j<n;j++)     if(a[p]>a[j]) p=j print p 能详细一点吗能详细一点吗。。。。我好菜的


Question: 最古老的树

这题考的不是编程，是语文和数学


Question: PAT (乙级)1013 数素数 遇到问题，M N之间过大时会运行超时

#include<stdio.h> #include <math.h> #include"malloc.h"   int isprime(int num) { 	int i, rt;  	rt = (int)sqrt(num);  	for (i = 2; i < rt; i++) 		if (num % i == 0) 			return 0; 	return 1; }  int main() { 	int m, n; 	int cnt = 0, tmp, i;  	scanf("%d %d", &m, &n);  	if (m > n) { 		tmp = m; 		m = n; 		n = tmp; 	}  	for (i = m; i <= n; i++) { 		if (isprime(i)) { 			printf("%d\t", i); 			cnt++; 		if (cnt % 10 == 0) 			putchar(10); 		} 	} 	  #if 0 	int i=0,m,n; 	int k=2,flag=0; 	int q,*a; 	scanf("%d %d",&m,&n); 	a = (int*)malloc(n*sizeof(int)); 	while(i!=n+1){ 		flag=1; 		for(q=2;q<k-1;q++){ 			if(k%q==0) 				flag=0; 		}  		if(flag==1){ 			a[i]=k; 			i++; 		} 		k++; 	} 	k=0; 	for(i=m-1;i<n;i++){ 		if(a[i]<=0 ){ 			continue; 		} 		printf("%d",a[i]); 		k++; 		if(k%10==0){  			printf("\n"); 			continue; 		} 		if(i!=n-1) 			printf(" "); 	} #endif 	return 0; }  供参考～ 不需要申请空间吧

优化的话你可以先把10000以内的素数先求出来，方法就用 int a[10010]={0}; a[0]=a[1]=1; for(int i=2;i<=10000;i++) {     if(a[i]==0){         for(int j=2;j*i<=10000;j++) a[i*j]=1;     } }

你题目和程序是对应的吗？


Question: 大佬们求解，怎么写？？？

#include <stdio.h> int main(void) {     int n, i;     int count = 0;     int digit[10];      scanf("%d", &n);     while (n) {         digit[count++] = n % 10;         //++count;         //printf("%d", n % 10);         n /= 10;     }     printf("%d\n", count);     for (i = count-1; i >= 0; i--)         printf("%d ", digit[i]);      putchar(10);     for (i = 0; i < count; i++)         printf("%d ", digit[i]);     putchar(10);     return 0; } 供参考～

itoa   atoi 这两个函数，百度一下。

int转字符串的函数叫什么名字来着？

就是，怎么把那几问合在一起？？？

引用 5 楼 weixin_45857580 的回复:嗯，学了，学到了循环 CSDN论坛新手指南  #include <stdio.h> int main(void) {     int n;     scanf("%d", &n);     int count = 0;     while (n > 0) {         ++count;         n /= 10;     }     printf("%d\n", count);     return 0; }

嗯，学了，学到了循环

循环学了没？

我还不会做数组

不用数组的话可以怎么做呢？

定义字符数组，存入数组，你可为所欲为

```c #include <stdio.h>  void how_many_digits(int number); void output_each_didhts(int number); void reversed_order(int number);  int main() { 	int num; 	printf("Please input your number: \n"); 	scanf("%d",&num);  	how_many_digits(num);  	printf("\nOutput each dight: \n"); 	output_each_didhts(num);  	printf("\n\nOut put the reversed order: \n"); 	reversed_order(num);  	return 0; }  void how_many_digits(int number) //求一个整数的位数 { 	int count=0; 	while(number>=1) 	{ 		number/=10; 		count++; 	} 	printf("%d\n",count);; }   void output_each_didhts(int number) //利用递归求这个数字的每一个数字（正序输出） { 	int r; 	r=number%10; 	if(number >= 10) 		output_each_didhts(number/10); 	printf("%d ",r); }   void reversed_order(int number) //求一个数每个数字逆序的输出 { 	int temp; 	while(number > 0) 	{ 		temp = number % 10; 		printf("%d ",temp); 		number/=10; 	} } ```


Question: 求解答，C语言

这是小学算术吧。 50÷(4×2)=6...2 50÷4=12...2


Question: 怎么输出不了T个菱形？


Question: C语言初学者if else比大小

引用 2 楼 自信男孩的回复:scanf("%c%c",&a,&b); 根据你的提示语，此处应该去掉逗号 好的  我if else 还不怎么样 感谢

好的  我if else 还不怎么样 感谢

scanf有可能失败，当输入格式不对时 判断它的返回值，并要求重新输入。

scanf("%c%c",&a,&b); 根据你的提示语，此处应该去掉逗号

提示里面说是用空格分隔，下面代码却是个逗号，咋整？


Question: 求助(大佬帮忙看看我哪错了，谢谢)

调试的方法： ⑴设断点、单步调试 ⑵添加print显示变量值 ⑶仔细翻译错误信息（英文的）

那就是逻辑问题了，需要时间慢慢调试的

引用 楼主 qq_45692024的回复: 我不会发图片，我给你描述一下吧 2 100 1 100.00 50.00 100 2 0.00 0.00

引用 2 楼 qq_45692024的回复:[quote=引用 1 楼 user-3的回复:]!EOF 改成 !=EOF 没用啊，大佬[/quote] 这个地方毫无疑问是错的，怎么说没用呢？说明你别的地方还有问题，你应该把错误发上来

引用 1 楼 user-3的回复:!EOF 改成 !=EOF 没用啊，大佬

!EOF 改成 !=EOF


Question: 程序已经输完，但最后出现这个报错是因为什么，求各路大神指点。

把你以前的帖子结了吧。CSDN论坛新手指南

按照显示应该是45,46行有问题，咱也没学过线代，咱啥也不知道，你自己找找吧。

引用 3 楼 qq_45798109的回复:你先说说你这个程序是要干嘛的吧 我这个程序是求数学的迭代解的

你先说说你这个程序是要干嘛的吧

引用 1 楼 qq_45798109的回复:自己翻译一下啊 第一：等号左边必须是左值 第二：用下表的话他需要是一个数组或者指针 我的第一个就是对数组进行赋值，第二个就是输出数组，实在看不出来究竟是哪里出的错


Question: 素数和（C语言）

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

#include<stdio.h> #include <math.h>   int isprime(int num) { 	int i, rt;  	rt = (int)sqrt(num);  	for (i = 2; i < rt; i++) 		if (num % i == 0) 			return 0; 	return 1; }  int main() { 	int m, n; 	int cnt = 0, tmp, i;  	scanf("%d %d", &m, &n);  	if (m > n) { 		tmp = m; 		m = n; 		n = tmp; 	}  	for (i = m; i <= n; i++) { 		if (isprime(i)) { 			printf("%d\t", i); 			cnt++; 		if (cnt % 10 == 0) 			putchar(10); 		} 	}  	return 0; }   在这个基础上改吧

本质上就是怎么找素数

因为素数越大越稀疏，20亿已经接近int的最大值（32位），所以，应该用unsigned int。或者是64位机用int也行。

搞个while循环，循环中让m++，搞个变量记录找到的素数的数目，到5个的时候退出，求和退出来再求或者直接找到就加进去都可以

哪位大神帮帮刚刚学C语言的小学弟啊


Question: 为什么（手机上）是死循环？（题目是金字塔问题）

引用 13 楼 qq_45814010 的回复:[quote=引用 12 楼 wowpH的回复:]解决了就结贴。CSDN论坛新手指南 里面写了，手机上不能结贴。[/quote] 等你有电脑的时候再回来结贴吧。我会看看你什么时候有点电脑。

引用 12 楼 wowpH的回复:解决了就结贴。CSDN论坛新手指南 里面写了，手机上不能结贴。

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

#include <stdio.h> #define SPACE ' ' int main() { 	int i, j, n=1; 	for(i=0;i<=8;++i) 	{ 		for(j=1;j<9-i;++j) 			printf("%c ",SPACE);  		for(j=9-i, n=1;j<9;++j) 		{ 			printf("%d ",n); 			n++; 		}  		for(j=9;j<=9+i;++j) 		{ 			printf("%d ",n); 			n--; 		}  		for(j=9+i+1;j<19;++j) 			printf("%c ",SPACE);  		printf("\n"); 	} 	return 0; }

引用 9 楼 自信男孩的回复:while(l<=2*(9-l))         {             printf(" ");             i++;         } 这个循环是死循环，看一下你的逻辑，这个地方是不是改成i < 2 * (9-l)呢？ 哦。。。果然'字母容易出错就会误导我。

不要怕多敲几个字母，在公司你的代码要挨批的

引用 6 楼 user-4的回复:不要用这种似是而非的名字line和count ok。以后会记住的。c和l

不要用这种似是而非的名字line和count

引用 3 楼 user-4的回复:为什么要用大小写的两个i变量名呢？没有别的字母了吗？这种代码风格有走歪了的倾向 i是计数，l表示行数

一个是L（l）,一个是I（i）,真的不是故意的，都是书面体惹的祸。。

为什么要用大小写的两个i变量名呢？没有别的字母了吗？这种代码风格有走歪了的倾向

第四个位置的i*2，我知道错了，改为l*2，但还是不能运行

每行前面空2*（9-l）格，再开始输入1。然后17格之前偶位按+1递增输出，奇位按空格输出。后面反过来，知道第15＋2*l格。在后面输出空格，如果是第33格输出空格切换行，否则只输空格


Question: Format specifies type 'char *' but the argument has type 'char (*)[12]'如何解决

引用 1 楼 user-3 的回复:不要用&符号，order本来就是数组首地址

参考：https://baike.baidu.com/item/scanf/10773316?fr=aladdin#5_1  解决了就结贴，不要点赞。  CSDN论坛新手指南

不要用&符号，order本来就是数组首地址


Question: 求大佬教一下！！！c语言好难啊。。。

C语言很难？那你觉得哪种语言要容易一些呢？

贪心算法。 我们取第一棵树上取1根香蕉，我们可能还会获得第二棵树上的2根香蕉，但是我们会损失第三棵树上的4个香蕉，因为第二棵树上没有了2根香蕉； 代价1 + 2 - 4 = -1 我们从第二棵树上取1根香蕉，我们可能还会从第三棵树上取2棵香蕉，同时我们会在第一棵树上少取1/2棵香蕉；代价，1 + 2 - 0.5 = 2.5  所以，贪心并且聪明的人应该先取第2棵树和第3棵树的香蕉，再考虑取第一棵树和第二棵树的香蕉。  或者，可以这样思考。无论如何，我们都会从第二课树上取香蕉，假设取单位1， 则如果选择第一个方案，可以再从第一棵树上取0.5个香蕉。 但是如果选择方案2，可以再从第三棵树上取2个香蕉。


Question: 关于优化排序方法、降低程序运行时间的问题

引用 2 楼 Philomath丶的回复:排序上可以考虑使用一下C语言和C++中自带的快速排序。 即C语言中的qsort()和C++中的sort()，题主可以百度一下具体用法。 而且，虽然我没有仔细看你的代码，但是我见过的最慢的冒泡排序也就O（n^2）的复杂度而已。 我可以给你贴段示例代码，但是你也不一定要这样写 你也可以给每一类再定义一个类别编号，然后写排序函数cmp的时候多写一个就行了， 不用多开4个数组。  #include <iostream> #include <algorithm> #include <vector> using namespace std; struct node { 	int num, de, cai; }; int cmp(struct node a, struct node b) { 	if ((a.de + a.cai) != (b.de + b.cai)) 		return (a.de + a.cai) > (b.de + b.cai); 	else if (a.de != b.de) 		return a.de > b.de; 	else 		return a.num < b.num; } int main() { 	int n, low, high; 	scanf("%d %d %d", &n, &low, &high); 	vector<node> v[4]; 	node temp; 	int total = n; 	for (int i = 0; i < n; i++) { 		scanf("%d %d %d", &temp.num, &temp.de, &temp.cai); 		if (temp.de < low || temp.cai < low) 			total--; 		else if (temp.de >= high && temp.cai >= high) 			v[0].push_back(temp); 		else if (temp.de >= high && temp.cai < high) 			v[1].push_back(temp); 		else if (temp.de < high && temp.cai < high && temp.de >= temp.cai) 			v[2].push_back(temp); 		else 			v[3].push_back(temp); 	} 	printf("%d\n", total); 	for (int i = 0; i < 4; i++) { 		// 自带排序 		sort(v[i].begin(), v[i].end(), cmp); 		for (int j = 0; j < v[i].size(); j++) 			printf("%d %d %d\n", v[i][j].num, v[i][j].de, v[i][j].cai); 	} 	return 0; }  谢谢您的解答 因为我在排序的外边又套了一个for循环，所以复杂度才会是n3。 qsort我现在还不会，我之前看那个cmp的函数感觉有些吃力

引用 1 楼 黑白判官的回复:C语言的话用qsort C++的话可以用sort 都是自带的，到时候把条件写一下就好了 谢谢您的解答～qsort我还得再学习一下哈哈哈


Question: 我这个程序为啥会奔溃

也没说在哪里崩溃。也不知道 qsort(folder, sizeof(char*), folderSize, cmp);这个是干嘛，，，，，，，提问就要提供稍详细点信息，要不然谁看


Question: c语言

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

整数和字符串的转换函数是 itoa   atoi 你自己搜索一下


Question: 数组题型解答


Question: 请教大家一道C语言编程。 （计算机大一萌新。我很笨希望各位前辈多多指教）

不要贴图片，请发代码。CSDN论坛新手指南

输入示例和输出示例都不知道你写的什么东西。 题目说的输入2行，你只有1行。 题目说n个数不重复，你给的3组数据中有2组里面有重复的。 题目说交换，并没有减少个数，你的第2组数据怎么少了1个？

我知道可能错误很严重 麻烦请前辈指出并修改 感谢各位前辈


Question: 求个好心人解决问题

引用 2 楼 自信男孩 的回复：直接贴代码吧新手代码，可能有很多错误。。

引用 2 楼 自信男孩 的回复：直接贴代码吧代码我贴了，在下面

/*简单的通信录管理*/  #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h>  typedef struct Address_Book { 	char name[10];        /*姓名*/ 	char company[20];     /*公司单位*/ 	char position[10];    /*职位*/ 	char group[20];       /*群组*/ 	int phone_num[15];    /*手机号码*/ 	int company_num[15];  /*办公电话*/ 	char Email[20];       /*电子邮箱*/ 	char address[25];     /*通信地址*/ }AddBook;  void StartWork();         /*通信录管理系统开始工作准备*/ void EndWork();           /*通信录管理系统退出准备*/ void Storage();           /*存储*/ void Look_Up();           /*查阅*/ void To_Updata();         /*更新*/ void initiSystem();       /*初始化*/  FILE* fp = NULL;  void main() { 	char ch; 	StartWork(); 	/*菜单界面*/ 	while (1) 	{ 		system("cls"); 		printf("-—————————————————-\n"); 		printf("|     本程序由C语言废物自己开发    |\n"); 		printf("|* * * * * 通信录管理系统 * * * * *|\n"); 		printf("| 1- - - - -储存联系人信息- - - - -|\n"); 		printf("| 2- - - - -查阅联系人信息- - - - -|\n"); 		printf("| 3- - - - -更新联系人信息- - - - -|\n"); 		printf("| 4- - - - -初始化联系人信息- - - -|\n"); 		printf("| 5- - - - -退出程序- - - - - - - -|\n"); 		printf("|- - - - - -请选择功能 - - -（1~5）|\n"); 		printf("-—————————————————-\n"); 		ch = getchar(); 		if (ch == '5') 		{ 			printf("——退出管理系统，感谢您的使用！——\n"); 			break; 		} 		switch (ch) 		{ 		case '1':Storage(); break; 		case '2':Look_Up(); break; 		case '3':To_Updata(); break; 		case '4':initiSystem(); break; 		default:printf("输入了错误的功能号！\n"); break; 		} 		printf("按任意键继续执行!\n"); 		getch(); 		fflush(stdin); 	} 	EndWork(fp); } /*通信录管理系统开始工作准备*/ void StartWork() { 	AddBook contact; 	long len; 	fp = fopen("Contact.dat", "rb+"); 	if (fp == NULL) 	{ 		printf("不能打开文件Contact.dat!\n"); 		initiSystem(); 		printf("按任意键继续执行\n"); 		getch(); 		fflush(stdin); 	} 	else 	{ 		fseek(fp, 0, SEEK_END); 		len = ftell(fp); 		if (len > sizeof(AddBook)) 		{ 			fseek(fp, -sizeof(AddBook), SEEK_END); 			fread(&contact, sizeof(AddBook), 1, fp); 		} 		else if(len<0) 		{ 			printf("系统操作文件失败！\n"); 			getch(); 			exit(1); 		} 	} } /*通信录管理系统退出准备*/ void EndWork() { 	fclose(fp); } /*初始化系统*/ void initiSystem() { 	if (fp != NULL) 	{ 		fclose(fp); 		remove("Contact.dat"); 	} 	fp = fopen("Contact.dat", "wb+"); 	if (fp == NULL) 	{ 		printf("初始化失败!\n"); 		getch(); 		exit(1); 	} 	printf("初始化成功!\n"); } /*储存联系人信息*/ void Storage() { 	system("cls"); 	AddBook contact; 	printf("——————————*******请依次输入信息*******——————————\n"); 	printf("—姓名—公司单位—职位—群组—办公电话—手机—电子邮箱—通信地址信息\n"); 	scanf("%s", &contact.name); 	scanf("%s", &contact.company); 	scanf("%s", &contact.position); 	scanf("%s", &contact.group); 	scanf("%d", &contact.company_num); 	scanf("%d", &contact.phone_num); 	scanf("%s", &contact.Email); 	scanf("%s", &contact.address); 	fseek(fp, 0, SEEK_END); 	fwrite(&contact, sizeof(AddBook), 1, fp); 	printf("储存联系人%s成功!\n",contact.name); } /*查阅*/ void Look_Up() { 	int no_total = 0; 	AddBook contact; 	AddBook contact_Look_Up; 	printf("请输入你想要查询信息的联系人名字：");   //通过联系人名字搜索 	scanf("%s", &contact_Look_Up.name); 	fseek(fp, 0, SEEK_SET); 	fread(&contact, sizeof(AddBook), 1, fp); 	if (!feof(fp)) 	{ 		if (strcmp(contact.name,contact_Look_Up.name)==0) 		{ 			no_total = 1; 			printf("—姓名—公司单位—职位—群组—办公电话—手机—电子邮箱—通信地址信息\n"); 			printf("%-10s %-8s %-10s %-10s %d %d %-20s %-25s\n",contact.name,contact.company,contact.position,contact.group,contact.company_num,contact.phone_num,contact.Email,contact.address); 		} 		fread(&contact, sizeof(AddBook), 1, fp); 	} 	if (no_total == 0) 	{ 		printf("没有找到该联系人！\n"); 	} } /*更新*/ void To_Updata() { 	int no_total = 0; 	AddBook contact; 	AddBook contact_To_Updata; 	char ch; 	printf("请输入你要更新的联系人的名字："); 	scanf("%s", &contact_To_Updata.name); 	fseek(fp, 0, SEEK_SET); 	fread(&contact, sizeof(AddBook), 1, fp); 	if (!feof(fp)) 	{ 		if (strcmp(contact.name, contact_To_Updata.name) == 0) 		{ 			no_total = 1; 			while (1) 			{ 				system("cls"); 				printf("* * * 请选择你要更新的数据 * * *\n"); 				printf("1- - - - -姓名- - - - - - - - - \n"); 				printf("2- - - - -公司单位- - - - - - - \n"); 				printf("3- - - - -职位- - - - - - - - - \n"); 				printf("4- - - - -群组- - - - - - - - - \n"); 				printf("5- - - - -办公电话- - - - - - - \n"); 				printf("6- - - - -手机- - - - - - - - - \n"); 				printf("7- - - - -电子邮箱- - - - - - - \n"); 				printf("6- - - - -手机- - - - - - - - - \n"); 				printf("8- - - - -通信地址- - - - - - - \n"); 				printf("9- - - - -退出- - - - - - - - - \n"); 				printf("————请选择功能（1~9）————\n");  				ch = getchar(); 				if (ch == '9') 				{ 					printf("退出更新系统，再见！\n"); 					break; 				}  				switch (ch) 				{ 				case '1': 				{ 					printf("请输入更新后的名字："); 					scanf("%s", &contact_To_Updata.name); 					strcpy(contact.name, contact_To_Updata.name); 					break; 				} 				case '2': 				{ 					printf("请输入更新后的公司单位："); 					scanf("%s",&contact_To_Updata.company); 					strcpy(contact.company, contact_To_Updata.company); 					break; 				} 				case '3': 				{ 					printf("请输入更新后的职位："); 					scanf("%s", &contact_To_Updata.position); 					strcpy(contact.position, contact_To_Updata.position); 					break; 				} 				case '4': 				{ 					printf("请输入更新后的群组："); 					scanf("%s", &contact_To_Updata.group); 					strcpy(contact.group, contact_To_Updata.group); 					break; 				} 				case '5': 				{ 					printf("请输入更新后的办公电话："); 					scanf("%d", &contact_To_Updata.company_num); 					strcpy(contact.company_num, contact_To_Updata.company_num); 					break; 				} 				case '6': 				{ 					printf("请输入更新后的手机："); 					scanf("%d", &contact_To_Updata.phone_num); 					strcpy(contact.phone_num, contact_To_Updata.phone_num); 					break; 				} 				case '7': 				{ 					printf("请输入更新后的电子邮箱："); 					scanf("%s", &contact_To_Updata.Email); 					strcpy(contact.Email, contact_To_Updata.Email); 					break; 				} 				case '8': 				{ 					printf("请输入更新后的通信地址："); 					scanf("%s", &contact_To_Updata.address); 					strcpy(contact.address, contact_To_Updata.address); 					break; 				} 				default:printf("输入错误！");break; 				} 				if (no_total == 1) 				{ 					printf("修改成功！\n"); 				} 				printf("请按任意键执行："); 				getch(); 				fflush(stdin); 			} 		} 	} 	if (no_total == 0) 	{ 		printf("没有找到这个联系人！\n"); 	} 	fclose(fp); }

直接贴代码吧

提供可能需要的代码


Question: C指针-数组指针-指针数组

指针作为参数时是比较有效和节省空间的

引用 楼主 网字 的回复: 	double rates[5] = { 22.22,33.33,44.44,55.55,66.66 };//数组 	double * pd = rates;//指针 	double(*pds)[5] = &rates;//数组指针 	double *pdd[5] = { &rates[0], &rates[1], &rates[2], &rates[3], &rates[4] };//指针数组 	rates[0] = 10.00; 	pd[1] = 20.00; 	pds[2] = 30.00;//not allowed.         *pds[2] = 30.00;// 可编译通过，但不生效 	*pdd[3] = 40.00;  问题：大神，数组指针的用武之地在哪里？ 数组指针可以用来使用二维数组，就好比用普通指针操作一维数组类似


Question: 新手求解答，c语言数据结构！


Question: 关于1019-PAT(乙级) 数字黑洞，请教各位前辈

c!=4你能正确输出非递减的4位数吗

引用 12 楼 qq_28449187 的回复:[quote=引用 11 楼 黑白判官 的回复:] [quote=引用 10 楼 qq_28449187的回复:][quote=引用 9 楼 黑白判官 的回复:] [quote=引用 8 楼 qq_28449187的回复:][quote=引用 7 楼 黑白判官 的回复:] [quote=引用 4 楼 qq_28449187的回复:][quote=引用 3 楼 qq_28449187 的回复:] [quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果[/quote] 也就是说它里面不能保证每个值都是0[/quote] 我给2个函数里的a都赋初值a={NULL},还是错误的[/quote] int类型你赋NULL？ [/quote]int a[10]={0};这样吗？话说其实我觉得不是a的问题[/quote] 除了数组还有c，c的值得为4[/quote]哇噻真的对了，大佬好强！不过为什么一定要c等于4啊?[/quote]我懂了！！！谢谢大佬！！！

引用 11 楼 黑白判官 的回复:[quote=引用 10 楼 qq_28449187的回复:][quote=引用 9 楼 黑白判官 的回复:] [quote=引用 8 楼 qq_28449187的回复:][quote=引用 7 楼 黑白判官 的回复:] [quote=引用 4 楼 qq_28449187的回复:][quote=引用 3 楼 qq_28449187 的回复:] [quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果[/quote] 也就是说它里面不能保证每个值都是0[/quote] 我给2个函数里的a都赋初值a={NULL},还是错误的[/quote] int类型你赋NULL？ [/quote]int a[10]={0};这样吗？话说其实我觉得不是a的问题[/quote] 除了数组还有c，c的值得为4[/quote]哇噻真的对了，大佬好强！不过为什么一定要c等于4啊?

引用 10 楼 qq_28449187的回复:[quote=引用 9 楼 黑白判官 的回复:] [quote=引用 8 楼 qq_28449187的回复:][quote=引用 7 楼 黑白判官 的回复:] [quote=引用 4 楼 qq_28449187的回复:][quote=引用 3 楼 qq_28449187 的回复:] [quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果[/quote] 也就是说它里面不能保证每个值都是0[/quote] 我给2个函数里的a都赋初值a={NULL},还是错误的[/quote] int类型你赋NULL？ [/quote]int a[10]={0};这样吗？话说其实我觉得不是a的问题[/quote] 除了数组还有c，c的值得为4

引用 9 楼 黑白判官 的回复:[quote=引用 8 楼 qq_28449187的回复:][quote=引用 7 楼 黑白判官 的回复:] [quote=引用 4 楼 qq_28449187的回复:][quote=引用 3 楼 qq_28449187 的回复:] [quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果[/quote] 也就是说它里面不能保证每个值都是0[/quote] 我给2个函数里的a都赋初值a={NULL},还是错误的[/quote] int类型你赋NULL？ [/quote]int a[10]={0};这样吗？话说其实我觉得不是a的问题

引用 8 楼 qq_28449187的回复:[quote=引用 7 楼 黑白判官 的回复:] [quote=引用 4 楼 qq_28449187的回复:][quote=引用 3 楼 qq_28449187 的回复:] [quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果[/quote] 也就是说它里面不能保证每个值都是0[/quote] 我给2个函数里的a都赋初值a={NULL},还是错误的[/quote] int类型你赋NULL？

引用 7 楼 黑白判官 的回复:[quote=引用 4 楼 qq_28449187的回复:][quote=引用 3 楼 qq_28449187 的回复:] [quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果[/quote] 也就是说它里面不能保证每个值都是0[/quote] 我给2个函数里的a都赋初值a={NULL},还是错误的

引用 4 楼 qq_28449187的回复:[quote=引用 3 楼 qq_28449187 的回复:] [quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果[/quote] 也就是说它里面不能保证每个值都是0

引用 4 楼 qq_28449187的回复:[quote=引用 3 楼 qq_28449187 的回复:] [quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果[/quote] 但是你a那个数组a里面是没有初值的

引用 3 楼 qq_28449187 的回复:[quote=引用 1 楼 黑白判官 的回复:] 你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数[/quote] 996 0996 - 0699 = 0297 0972 - 0279 = 0693 0963 - 0369 = 0594 0954 - 0459 = 0495 这是测试结果

引用 1 楼 黑白判官 的回复:你那个两个函数有问题。如果 r 不是四位数，那个 while 循环次数就会少于4，那你最后的返还值就会错了。 你要么把数组赋初值，要么就规定它必须循环满四次才能结束 我在那个函数里面用c来记录了位数，应该没问题吧，我输入三位数也能运行出三位数黑洞数

/******************************************************************** 	Description: PAT(B)1019数字黑洞 	Score: 20 	Run Time: 2ms 	Author: user-2 	Id: pfdvnah 	Date: 2019-11-10 15:49:10 ********************************************************************/ #include <stdio.h> #include <stdlib.h>  #define N_LEN 4  void output_step(int result, int max, int min); int compare(const int* a, const int* b); int step(int result);  int main(void) { 	int n; 	// scanf_s("%d", &n); 	scanf("%d", &n); 	int result = n; 	do { 		result = step(result); 	} while (6174 != result && 0 != result); 	return 0; } void output_step(int result, int max, int min) { 	if (0 == result) { 		printf("%04d - %04d = 0000\n", max, min); 	} else { 		printf("%04d - ", max); 		printf("%04d = ", min); 		printf("%04d\n", result); 	} } int compare(const int* a, const int* b) { 	return (*a) < (*b) ? -1 : 1; } int step(int result) { 	int arr[N_LEN]; 	for (int i = 0; i < N_LEN; ++i) { 		arr[i] = result % 10; 		result /= 10; 	} 	qsort(arr, N_LEN, sizeof(int), compare); 	int max = 0; 	for (int i = N_LEN - 1; i >= 0; --i) { 		max = max * 10 + arr[i]; 	} 	int min = 0; 	for (int i = 0; i < N_LEN; ++i) { 		min = min * 10 + arr[i]; 	} 	result = max - min; 	output_step(result, max, min); 	return result; }


Question: c的疑问

当i=0时，执行 printf("%d", ++i); 此时，i的值变为1，之后在if循环中还要执行 for(i=0; i<=3; i++)  此时i的值变为2，所以再次执行时直接执行default语句了

第一次循环，case 0 的++i 执行后 i=1，然后for(;;i++)里面的 i++ 也要执行，i=2

for里边还有一个i++


Question: a=3,5这个表达式是什么意思?

a=3,5  输出3

a=(3,5)  输出5

逗号表达式 最终a=5

逗号运算符（comma operator）含有两个运算对象，按照从左向右的顺序依次求值。例如：  i=20, j=2*i  首先对逗号左侧的表达式求值，然后将求值结果丢弃掉，之后对逗号右侧的表达式求值。而逗号运算符真正的结果是右侧表达式的值。以上表达式的值是40，因为j=2*i的值是40。 以上节选自《C++之逗号运算符》 希望能够帮到你！

逗号表达式，1楼和楼主都不对！ a=3,5  它整体是一个逗号表达式，由逗号分成两个部分：a=3和5，前者没有什么问题，就是把幅值给a，5本身也是一个表达式，逗号表达式的整体值是5。前面好象说了一大堆废话，其实还得继续说下去，因为对于他们的使用不同得讨论一下： 第一种： a=3,5; 这种情况逗号表达式整体的值没有使用，所以逗号及5是没有屁用的，就相当于 a=3;  第二种： b=(a=3,5); 这个时候a是3而b是5！

#include<stdio.h> int main() {   int i,a;     i=(a=2*3,a*5),a+6;     printf("%d",a);      return 0; }


Question: 这题有个错误在哪呢？

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

错在b这个变量身上，但我感觉没有错，运行结果什么都没有，就只有一个按任意键继续

我知道错误了，b变量一直在变


Question: PTA中关于阶乘序列的两个语法

引用 4 楼 proorck2019的回复:编个函数求阶乘，再从for里边调用，结构上能好一点。 是的大佬我在用两种方法试

编个函数求阶乘，再从for里边调用，结构上能好一点。

引用 1 楼 qq_45798109的回复:第一个问题：这是一个循环，经过一次循环之后item已经不是1了 第二个问题：任何数乘以1都是他本身，所以有没有1可以说没有影响 感谢大佬祝你开心^_^

感谢大佬祝你开心^_^

引用 6 楼 user-3 的回复:有用函数的话，程序变简洁了，但是效率却低了，如果有时间限制的话，就不要用函数了嗦嘎，多谢大佬提醒！

有用函数的话，程序变简洁了，但是效率却低了，如果有时间限制的话，就不要用函数了


Question: 求解，大佬们

先除以十，很巧妙。 或者用好几个if-else。

自己改一下  #include <stdio.h> int main() { 	int n; 	scanf("%d", &n); 	if (n < 0 || n > 100) 		printf("输入有误！\n"); 	else { 		n /= 10; 		switch (n) { 		case 10: 		case 9: 			printf("优秀"); 			break; 		case 8: 			printf("良好"); 			break; 		case 7: 			printf("中等"); 			break; 		case 6: 			printf("及格"); 			break; 		default: 			printf("不及格"); 			break; 		} 	} 	return 0; }


Question: 中断秒表加蜂鸣器

没人会吗？


Question: c语言写一个选课系统

这是错误的图片

引用 6 楼 jiht594 的回复:467和496行错了, 我这已经改好了. 你看看 哦 说错了, 你先让我看你的, 我就让你看我的

467和496行错了, 我这已经改好了. 你看看

请截图出现错误的位置。。。。

不是有行号吗？你就不能将代码调整到那一行？

大概是前面少了或者错了个什么符号。 你要注意全角和半角符号。

请截图。。。

引用 2 楼 wowpH的回复:不是有行号吗？你就不能将代码调整到那一行？ 这行就是一个｛｝，他错误就显示在这行


Question: 又是思路相同，细节不同的两道题

这两种写法基本上没啥区别。另外，不建议第一种写法，建议这样：  while ((ch = getchar()) != '@')

引用 3 楼 proorck2019 的回复:while((ch=getchar())!=...) 这样似乎也行。 不是似乎也行，而是就是可以的。建议这种写法～

引用 6 楼 你坚果腿的回复:[quote=引用 2 楼 wowpH的回复:]不建议方法一。 为什么呀，这也是我在一个地方看到的，我平时都是用第二种去写[/quote] 第5行那样不便于阅读。

引用 2 楼 wowpH的回复:不建议方法一。 为什么呀，这也是我在一个地方看到的，我平时都是用第二种去写

引用 1 楼 user-6的回复:都是while循环，只是把结束循环的位置改变了 是的呢是的呢，不过我刚开始写的时候，没有想到另一个位置，所以就记下来了

引用 9 楼 wowpH的回复:[quote=引用 8 楼 你坚果腿 的回复:] SO嘎，谢谢啦，那以后还是多用第二种方法好啦 CSDN论坛新手指南 [/quote] 原来写个帖子那么多规矩呀，emmm，其实我只是写了个心得而已，见笑啦

引用 8 楼 你坚果腿 的回复:SO嘎，谢谢啦，那以后还是多用第二种方法好啦 CSDN论坛新手指南

引用 7 楼 wowpH的回复:[quote=引用 6 楼 你坚果腿的回复:][quote=引用 2 楼 wowpH的回复:]不建议方法一。 为什么呀，这也是我在一个地方看到的，我平时都是用第二种去写[/quote] 第5行那样不便于阅读。[/quote] SO嘎，谢谢啦，那以后还是多用第二种方法好啦

这样有什么问题吗？？

while((ch=getchar())!=...) 这样似乎也行。

不建议方法一。

都是while循环，只是把结束循环的位置改变了


Question: 一个简单的程序求助，出现projecttry.exe 中的 0x002a1427 处有未经处理的异常: 0xC0000005: 读取位置 0x00942000

while(a[b]!='/0') 反斜线，零


Question: c语言二维数组去重复值  为什么不对

引用 10 楼 proorck2019的回复:if(*(a+p+k)==*(a+i+j)){ 这行不能是a[p][k]吗？ 另外，二维数组应该是int**a。 传过来的实参是 a[0]    形参是int *a

引用 9 楼 proorck2019的回复:四层循环，把我给吓住了。 工作中，可别编这样的代码！ 好的老哥，我也知道不能写这么多循环

引用 8 楼 wowpH的回复:我在想是我语文不好，还是你语文不好。  数组去除重复值示例： 原始数据：1 2 3 1 2 4 5 去重后的：1 2 3 4 5 这是你的标题想要的效果。  输出重复数据示例： 原始数据：1 2 3 1 2 4 5 输出重复数据：1 2 这是你代码体现出来的效果（虽然你写错了，但是表达的是这个意思）  我没看懂你想要哪种？ 老哥是第一种。但是我想的是从a[0][0]作为基准，一次比较后面的元素是否和a[0][0]相同，然后第二次以a[0][1]作为基准，后面同理。但是效果不是这样

四层循环，把我给吓住了。 工作中，可别编这样的代码！

引用 6 楼 wowpH的回复:你这是输出重复的值吧。没看到哪儿“去除”了。 不是每次先选定一个元素，依次遍历看后面有哪个元素和它相同吗。最后打印出来？

你这是输出重复的值吧。没看到哪儿“去除”了。

引用 1 楼 user-3的回复:可否把代码发出来，这样方便查错 去掉一个二维数组里重复值

引用 1 楼 user-3的回复:可否把代码发出来，这样方便查错 int ContainSameElem(int *a,int m,int n){     int i,j,p=0,k=0;     while(p<m){         while(k<n){             for(i=0;i<m;i++){                 for(j=0;j<n;j++){                     if(*(a+p+k)==*(a+i+j)){                         printf("%d",*(a+p+k));                         return 1;                     }                     else{                         return 0;                     }                 }             }             k++;         }         p++;     } }

这不是人看的。CSDN论坛新手指南

可否把代码发出来，这样方便查错

算了，这个问题我解决不了。。。不要引用我了。

引用 14 楼 wowpH的回复:我有个问题，去掉之后，那个地方该咋办。。。。emmm 不用管，最后不是输出数组而是重复的元素。还有它的下标比如a[0][2]=13  a[2][0]=13   这样输出就行

引用 14 楼 wowpH 的回复:我有个问题，去掉之后，那个地方该咋办。。。。emmm 空出来的地方

我有个问题，去掉之后，那个地方该咋办。。。。emmm


Question: "输入一个分数，输出最简式",测试不对，不知道哪儿错了，求各位大神帮帮我，谢谢！

应该判断一下a，b的大小才行

测试不对，就将那个不对的结果写出来。以更快的找到问题。

还有你scanf函数用错了

我认为还可以优化一下，就是i小于等于min(a,b)

你写的这个如果ab恰好是整倍数关系的话你这个输出的不是整数，而是分母为一的分数，除了这个没有别的问题了吧


Question: 进制转换

建议你在纸上手动运算几次，熟练之后再编程序。


Question: 求解错误

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


Question: 新手求帮看一下代码

StackNode,*LinkStackPt;  前者是结构体类型，后者是结构体指针类型

引用 6 楼 宵暗的露米娅 的回复：[quote=引用 5 楼 dominis 的回复：][quote=引用 4 楼 宵暗的露米娅 的回复:] (*L)=(LinkStackPtr)malloc(sizeof(StackNode)); 分配内存的时候就不用*L,直接L就行把  改了以后，后面什么就没了[/quote]L不加*，你括号里的LinkStackPtr后加个*试一试[/quote]哦，没看到结构体那里已经加了*号...

引用 5 楼 dominis 的回复：[quote=引用 4 楼 宵暗的露米娅 的回复:] (*L)=(LinkStackPtr)malloc(sizeof(StackNode)); 分配内存的时候就不用*L,直接L就行把  改了以后，后面什么就没了[/quote]L不加*，你括号里的LinkStackPtr后加个*试一试

引用 4 楼 宵暗的露米娅 的回复:(*L)=(LinkStackPtr)malloc(sizeof(StackNode)); 分配内存的时候就不用*L,直接L就行把  改了以后，后面什么就没了

引用 1 楼 proorck2019 的回复:void InitStack(LinkStackPtr *L) 这一句似乎不用加* 你在typedef时已经加上了  改了以后 就什么都输不出来了..........


Question: c语言

结构体数组录入，然后后面的的问题一个个计算输出呗


Question: 关于while循环无法通过编译的问题

undefined reference to `WinMain' 期待有一天，编译器变得聪明了，直接告诉我们， “你main写错了”

引用 4 楼 與蘤舊縐的回复:[quote=引用 2 楼 weixin_45855436 的回复:] [quote=引用 1 楼 與蘤舊縐的回复:]  [Error] ld returned 1 exit status  这玩意似乎不是你的程序问题，重启电脑试试，如果不行重建项目或者文件后再重启再试试 谢谢您的回答... 但是我重启了、新建了个文件好像没啥用啊，还是无法通过编译[/quote]  是哦你的main写错了 不过我自己有过这样的经历，就算一点没错，也是这种错误，你把main改过来再试试，没准能行[/quote] 嗯嗯，长知识了，多谢～

引用 3 楼 qq_45798109的回复:你main写错了....不是mian md！woc！谢谢您了！

引用 2 楼 weixin_45855436 的回复:[quote=引用 1 楼 與蘤舊縐的回复:]  [Error] ld returned 1 exit status  这玩意似乎不是你的程序问题，重启电脑试试，如果不行重建项目或者文件后再重启再试试 谢谢您的回答... 但是我重启了、新建了个文件好像没啥用啊，还是无法通过编译[/quote]  是哦你的main写错了 不过我自己有过这样的经历，就算一点没错，也是这种错误，你把main改过来再试试，没准能行

你main写错了....不是mian

引用 1 楼 與蘤舊縐的回复:  [Error] ld returned 1 exit status  这玩意似乎不是你的程序问题，重启电脑试试，如果不行重建项目或者文件后再重启再试试 谢谢您的回答... 但是我重启了、新建了个文件好像没啥用啊，还是无法通过编译


Question: C语言，大佬帮帮忙

直接删除后面的位数，不是四舍五入，四舍五入得你自己实现


Question: PTA中关于完数题的两个迷惑小问题

先编写一个函数，判断一个数是不是，再循环调用这个函数从m到n， 这样写不容易出错。

引用 10 楼 qq_45798109的回复:就是说：就i=6来说第一个for循环结束j是等于5的不是3 大佬昨晚崩溃了所以没回哈哈哈哈，大佬您太强了，那么祝你天天开心

就是说：就i=6来说第一个for循环结束j是等于5的不是3

引用 7 楼 乔碧萝大魔王 的回复:[quote=引用 4 楼 qq_45798109的回复:]首先没看懂你第一个问题想表达什么意思 第二个问题你h没有初始化 大佬你太有才了，就是没初始化我补充一下第一个问题      假如 i 等于6，那么在的第一个for循环里面，j 等于1，2，3；那么在第二个for循环里面，因为k小于 j 岂不是k只能取2不能取3了吗；为什么运行结果还是能够取3？[/quote]虽然你那个循环得j=1,2,3但是在for (j = 1; j < i; j++)中j是从1取到5的4,5只是不满足下面if的条件而已j还是在自增的，只不过什么都不执行

引用 3 楼 weixin_45855436的回复:老哥你这是哪一道题目啊 老哥这是找完数那道题，楼下大佬完美解答了哈哈哈，谢谢老哥

引用 4 楼 qq_45798109的回复:首先没看懂你第一个问题想表达什么意思 第二个问题你h没有初始化 大佬你太有才了，就是没初始化我补充一下第一个问题      假如 i 等于6，那么在的第一个for循环里面，j 等于1，2，3；那么在第二个for循环里面，因为k小于 j 岂不是k只能取2不能取3了吗；为什么运行结果还是能够取3？

我看老哥的提问，也是饱受PAT折磨的菜鸟有志青年…

首先没看懂你第一个问题想表达什么意思 第二个问题你h没有初始化

老哥你这是哪一道题目啊

#include<stdio.h> #include<math.h> bool judge(int i) { 	int j, sum = 1; 	for (j = 2; j <= sqrt(i); j++) { 		if (i % j == 0) 			sum += j + i / j; 	} 	return i == sum; } int main(){ 	int n, m, i, j; 	scanf("%d%d", &m, &n); 	for (i = m; i <= n; i++) { 		if (judge(i)) { 			printf("%d = 1", i); 			for (j = 2; j < i; j++) { 				if (i % j == 0) 					printf(" + %d", j); 			} 			printf("\n"); 		} 	} 	return 0; }

好痛苦又漏字了，第一个问题中因为第二个for循环中k岂不是只能取2不能取3?


Question: 新手提问，小数点后显示问题

整数除以整数，结果可能是小数。 楼上正解。

楼主别光点赞啊，解决了就结贴。没解决就追问。。。。。 CSDN论坛新手指南

int/int只能得到int,可以做一个类型转换 修改语句： average=sum/(double)n;

sum也定义为double型的。


Question: 关于结构体数组赋值的问题求助

解决结构体赋值又分成： ⑴字符串赋值 ⑵数字赋值

先解决 结构体赋值 问题， 再解决 结构体数组赋值 问题。

引用 4 楼 weixin_45855436 的回复:[quote=引用 2 楼 gouyanfen 的回复:] 你这个有两个问题 第一 结构体元素 name num不应该设计为char 应该设计为 char 数组  typedef struct student{ char name[xx]; char num[xx];     int score; } Student_info; 第二 读入的时候用临时变量先存入，然后拷贝到对应的元素       for( i=0;i<n;i++){         scanf("%s %s %d",temp_name,temp_num,&temp_score);         strcpy(info[i].name,temp_name);         strcpy(info[i]. num,temp_num);         info[i].score=temp_score;      }  谢谢您的解答。我还有一些疑问： 0. 在 for 循环中的 scanf 内，可不可以使用 %s ，在name 和 num 中存储 字符串？ 1.如果 name 和 num 都是字符串的话，字符串的赋值可不可以不使用 strcpy, 而是直接用 “= ”？[/quote]  试了一下 好像不能哈哈哈哈

0.可以使用 1.不可以用=  引用 4 楼 weixin_45855436 的回复:[quote=引用 2 楼 gouyanfen 的回复:] 你这个有两个问题 第一 结构体元素 name num不应该设计为char 应该设计为 char 数组  typedef struct student{ char name[xx]; char num[xx];     int score; } Student_info; 第二 读入的时候用临时变量先存入，然后拷贝到对应的元素       for( i=0;i<n;i++){         scanf("%s %s %d",temp_name,temp_num,&temp_score);         strcpy(info[i].name,temp_name);         strcpy(info[i]. num,temp_num);         info[i].score=temp_score;      }  谢谢您的解答。我还有一些疑问： 0. 在 for 循环中的 scanf 内，可不可以使用 %s ，在name 和 num 中存储 字符串？ 1.如果 name 和 num 都是字符串的话，字符串的赋值可不可以不使用 strcpy, 而是直接用 “= ”？[/quote]

引用 2 楼 gouyanfen 的回复:你这个有两个问题 第一 结构体元素 name num不应该设计为char 应该设计为 char 数组  typedef struct student{ char name[xx]; char num[xx];     int score; } Student_info; 第二 读入的时候用临时变量先存入，然后拷贝到对应的元素       for( i=0;i<n;i++){         scanf("%s %s %d",temp_name,temp_num,&temp_score);         strcpy(info[i].name,temp_name);         strcpy(info[i]. num,temp_num);         info[i].score=temp_score;      }  谢谢您的解答。我还有一些疑问： 0. 在 for 循环中的 scanf 内，可不可以使用 %s ，在name 和 num 中存储 字符串？ 1.如果 name 和 num 都是字符串的话，字符串的赋值可不可以不使用 strcpy, 而是直接用 “= ”？

引用 1 楼 user-3 的回复:分三行就行了。  标题明了。 代码整洁。 问题明确。 附带说明。 基本礼貌。  要是都像你这样问问题就好了。新手也是有差距的。  hahah谢谢您~菜鸟被夸，受宠若惊


Question: 怎么算素数c语言

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

#include<stdio.h> #include <math.h>   int isprime(int num) { 	int i, rt;  	rt = (int)sqrt(num);  	for (i = 2; i <= rt; i++) 		if (num % i == 0) 			return 0; 	return 1; }  int main() { 	int m, n; 	int cnt = 0, tmp, i;  	scanf("%d %d", &m, &n);  	if (m > n) { 		tmp = m; 		m = n; 		n = tmp; 	}  	for (i = m; i <= n; i++) { 		if (isprime(i)) { 			printf("%d\t", i); 			cnt++; 		if (cnt % 10 == 0) 			putchar(10); 		} 	}  	return 0; }  供参考～

int k = 0; \\这个k用于判断是否为素数，不是为1，是则为0  scanf_s("%d", &n); \\然后输入需要判断的这个数字n  if (n == 1)\\输入的数字为1，则不是素数，所以k赋值1  k = 1;  for (i = 2; i < n / 2; i++) { \\循环让输入的n与 2到n/2的相除，看是否有余数  if (n % i == 0) {  //如果有可以除尽的数，则余数（n%i）等于1，则赋值给k=1，之后的break用于结束循环语句  k = 1;  break;  }  }  if (k == o) //如果在判断过程中n未被认为是素数，则k保持等于0，可判断n为素数；  printf("%d是素数", n);  else if(k==1)//如果k=1，说明n已被判断为不是素数。  printf("%d不是素数", n);

这里面i并没有定义，而且除以二并不能判断他是素数啊，带个数字进去就发现不对了。


Question: 测试结果有一处不对，请指点一二。

直接输入 -1 你没输出 按照题目要求要输出 0 0


Question: 函数实现字符串逆序(有指针)

#include <stdio.h> #define MAXS 20  void f( char *p ); void ReadString( char *s ); /* 由裁判实现，略去不表 */  int main() {     char s[MAXS];      ReadString(s);     f(s);     printf("%s\n", s);      return 0; }  void ReadString(char *s) {     char c;     char *p;     p = s;     while ((c = fgetc(stdin)) != EOF) {         if (c == '\n'|| c == '\r') {             *p++ = '\0';             break;         } else {             *p++ = c;         }     } }  void f(char *p) {     char *head, *tail;     char c;      head = p;     for (tail = head; *tail != '\0'; tail++)         ;     tail--;      for (; head < tail; head++, tail--) {         c = *head;         *head = *tail;         *tail = c;     } }

#include <stdio.h> #include <string.h>  #define MAXS 20  void f( char *p ); void ReadString( char *s ); /* 由裁判实现，略去不表 */  int main() {     char s[MAXS];      ReadString(s);     f(s);     printf("%s\n", s);      return 0; }  void ReadString(char *s) {     scanf("%s", s); }  void f( char *p ) {     int len, tmp, left, right;     len = strlen(p);     left = 0;     right = len-1;     while(left<right)     {         tmp = *(p+left);         *(p+left) = *(p+right);         *(p+right) = tmp;         left++;         right--;     } } 供参考～

while(left<right) 修改成小于等于 解决奇数长度错误 例如有三个字符，你自己推算试试

b = *(p + left); *(p + left) = *(p + right); *(p + right) = b;


Question: 通过mingw官网下载mingw的方式只能是用小程序安装吗？可以从官网下载完整包吗？

楼主问如何删帖，请看图（不能编辑，但是可以删除自己的）：

引用 51 楼 apkipa1 的回复:[quote=引用 50 楼 六道佩恩 的回复:] 我下了个mfc版的mingw，里面有c11的线程函数，只是头文件是c11thread.h；glibc也去找过，有c11线程的源码，它是用POSIX线程实现的，只是不知道怎么编译成windows版。 mingw 还有 mfc 版的？可以分享一下吗？ 此外，glibc 当然有 threads.h，可是它直到 2.28 才被引入，而主流 linux 发行版的 glibc 版本会比最新的 glibc 版本晚个好几年，所以 gcc、mingw 等目前要搞 C11 线程基本不可能(musl-gcc 倒是可以)。GitHub 上有人写了一个利用 posix API 实现的 threads.h，可以直接拷下来用。如果你要自己编译一个 mingw 的话，可能会有不少麻烦，这个我帮不了你。[/quote] https://gcc-mcf.lhmouse.com/mingw-w64-gcc-mcf_20191107_9.2.1_x64_335995a85bede0ebf58009061a9c73bf952a8922.7z 名字中带有mfc，但我不确定哈

引用 50 楼 六道佩恩 的回复:我下了个mfc版的mingw，里面有c11的线程函数，只是头文件是c11thread.h；glibc也去找过，有c11线程的源码，它是用POSIX线程实现的，只是不知道怎么编译成windows版。 mingw 还有 mfc 版的？可以分享一下吗？ 此外，glibc 当然有 threads.h，可是它直到 2.28 才被引入，而主流 linux 发行版的 glibc 版本会比最新的 glibc 版本晚个好几年，所以 gcc、mingw 等目前要搞 C11 线程基本不可能(musl-gcc 倒是可以)。GitHub 上有人写了一个利用 posix API 实现的 threads.h，可以直接拷下来用。如果你要自己编译一个 mingw 的话，可能会有不少麻烦，这个我帮不了你。

引用 48 楼 apkipa1 的回复:如果你的目的是使用 C11 的线程函数的话，那么洗洗睡吧，这玩意连 linux 的 gcc 都没有实现，更不可能指望在 windows 上实现了。 (注: linux gcc 没有实现是因为主流 glibc 的版本过老) 我下了个mfc版的mingw，里面有c11的线程函数，只是头文件是c11thread.h；glibc也去找过，有c11线程的源码，它是用POSIX线程实现的，只是不知道怎么编译成windows版。

非常感谢楼主，来学习学习

理论上是可以的

WSL,Yes!

我们的确是个很重要的人都是我自己选择过气的人的时候充电线

我也是这么觉得的啊啊

要用posix版本！win32版本，需要另外下载一个别人写的mingw-std-threads-master自己合进去的。  引用 28 楼 六道佩恩 的回复:[quote=引用 27 楼 liups 的回复:] 楼主要的离线包终于找到了： https://sourceforge.net/projects/mingw-w64/files/  请结合26楼进行版本选择！ 谢谢 额不过这里的包（seh）我之前已经测试过了，没有C11线程，唉[/quote]

引用 31 楼 六道佩恩 的回复:[quote=引用 29 楼 liups 的回复:] 看仔细点！是要有posix的！ POSIX一直都有啊，dev自带的MINGW都有POSIX线程[/quote] 好吧。不管你的需求是否满足了，总之是找到了完整离线包的下载方法！

一个第三方开源的c/c++编译器，好多开源代码会用到。可以去其他网站下，用的少，除非项目中的使用的开源库编译时会用到他，否则不会用这个东西。

应该可以的啊

应该是可以的

引用 39 楼 六道佩恩 的回复:[quote=引用 37 楼 taodm 的回复:] 要用posix版本！win32版本，需要另外下载一个别人写的mingw-std-threads-master自己合进去的。  [quote=引用 28 楼 六道佩恩 的回复:] [quote=引用 27 楼 liups 的回复:] 楼主要的离线包终于找到了： https://sourceforge.net/projects/mingw-w64/files/  请结合26楼进行版本选择！ 谢谢 额不过这里的包（seh）我之前已经测试过了，没有C11线程，唉[/quote][/quote] 我下载的是x86_64-posix-seh，这是POSIX版吧？没有C11线程啊[/quote]  引用 39 楼 六道佩恩 的回复:[quote=引用 37 楼 taodm 的回复:] 要用posix版本！win32版本，需要另外下载一个别人写的mingw-std-threads-master自己合进去的。  [quote=引用 28 楼 六道佩恩 的回复:] [quote=引用 27 楼 liups 的回复:] 楼主要的离线包终于找到了： https://sourceforge.net/projects/mingw-w64/files/  请结合26楼进行版本选择！ 谢谢 额不过这里的包（seh）我之前已经测试过了，没有C11线程，唉[/quote][/quote] 我下载的是x86_64-posix-seh，这是POSIX版吧？没有C11线程啊[/quote] 我感觉是不是你的多线程使用试不对，或者看的书只适用于旧版的gcc?

引用 37 楼 taodm 的回复:要用posix版本！win32版本，需要另外下载一个别人写的mingw-std-threads-master自己合进去的。  [quote=引用 28 楼 六道佩恩 的回复:] [quote=引用 27 楼 liups 的回复:] 楼主要的离线包终于找到了： https://sourceforge.net/projects/mingw-w64/files/  请结合26楼进行版本选择！ 谢谢 额不过这里的包（seh）我之前已经测试过了，没有C11线程，唉[/quote][/quote] 我下载的是x86_64-posix-seh，这是POSIX版吧？没有C11线程啊

安装包：http://www.onlinedown.net/soft/577868.htm

网上有完整离线包下载，应该是官网上提供的sourceforge网站的链接。 i686-8.1.0-release-win32-sjlj-rt_v6-rev0.7z类似这样的名字，47M左右 官网就到8.1，还没有最新的gcc9的版本

引用 29 楼 liups 的回复:看仔细点！是要有posix的！ POSIX一直都有啊，dev自带的MINGW都有POSIX线程


Question: C语言，求素数

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

在第一个for循环里首先对lable=0赋值，相当于对lable重新赋值，以便对后面的素数判断做基础

已经解决问题了，，，，，，


Question: 初学指针...关于一些字符指针指向的新手迷惑..

引用 6 楼 advance_coder的回复:这个题目不严谨  // 第一个参数需要定义为const,因为函数内部不会对他进行修改  // 目标存放地址的实际大小(maxsize)要有，防止缓存溢出  //  maxsize定义为无符号类型是因为缓存长度不可能小于零,不小心输入负数，编译器也会有警告 char* strmcpy(const char* t, int m, char* s, unsigned int maxsize) {     // 源指针为NULL.数据不存在     // 目标地址为NULL,数据无法拷贝     if (t==NULL || s == NULL)     {          return NULL;      }       int len = strlen(t);       if (len==0 || m >= len)      {           return NULL;      }       const char* start = t+m;       // 字符串的结束符是0x00      // 预留一个字节给结束符0x00      maxsize--;      while(start[0] || maxsize)      {            s[0]=start[0];            s++;            start++;       }        // 目标缓存长度不够       if (start[0] != 0x00)       {            return NULL;       }        s[0]=0x00;       // 注意以下代码不需要       // s++;        return s; }  int main(const char* argv[], int argn) {         char source[] = "wait to be cpoyed string";         char dest[256]="";         char* res = NULL;         res = strmcpy(source, 10, dest,256);         if (res == NULL)         {                printf("拷贝失败\n");                return 0;          }           // 计算dest中字符串长度          int len = res - dest;           // 也可以如下          int lens = strlen(dest);          assert(len != lens);         return 0; } 补充一下你的疑惑，t = t+m;是对t指针做偏移。

改变定义首地址就己经不是原来的串了，简单的可以运用这样的操作，动态内存控制的时候，你会把自己搞晕。

能得到正确结果吗？

指针本来就是可以修改的啊，strmcpy里面的t和main里面的t其实不是一个东西。 另外说一个问题，判断t[i]是不是0还不够严谨，如果t的长度比m小怎么处理？


Question: 老显示我错了，可书上就是这样的呀！

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

引用 3 楼 proorck2019的回复:缩进不对算错误吗？ if-else-return左移。 重启了一下软件，然后好了

引用 1 楼 qq_45798109的回复:你确定书上没有花括号？ 重启了一下软件，然后好了

从for循环看，我猜是你抄错代码了

缩进不对算错误吗？ if-else-return左移。

每个说书上就是这样的，最后都会被打脸。  建议多比较几遍。

你确定书上没有花括号？


Question: C语言：关于void*和int之间强制转换的问题

警告不影响程序运行  但是第一种写法没有警告，却只会运行线程2,不知道是不是传参出现了问题

两种方式应该都是可以的，会有什么样的警告呢？

14行和50行问题： 如果分别是：   不会有警告，但是程序第一个线程运行完了以后会卡住，不向下运行。  如果分别是：     会有警告，提示强制转换的问题，但是程序运行正常，没问题。 难道第一种转换方式不应该是对的吗？但是为什么运行会出错？

第一种访问非法地址，第二种指针值转化为int


Question: 指针填空

解决了就结贴。

1：p=s;p[0]!='\0';p++ 2：p[0]==a 3：p[0]=b  代码不要截图。CSDN论坛新手指南


Question: 求大佬帮帮忙

引用 3 楼 liups的回复:[quote=引用 2 楼 weixin_45853927 的回复:] [quote=引用 1 楼 user-2的回复:]该熟悉的是你，不是我们。  不试试，怎么知道不会呢？ 不是，这个是题目，我不会做然后直接复制来这里问[/quote] 就是让你自己做，不做怎么能熟悉呢！[/quote] 关键是不会，弄不懂

引用 2 楼 weixin_45853927 的回复:[quote=引用 1 楼 user-2的回复:]该熟悉的是你，不是我们。  不试试，怎么知道不会呢？ 不是，这个是题目，我不会做然后直接复制来这里问[/quote] 就是让你自己做，不做怎么能熟悉呢！

引用 1 楼 user-2的回复:该熟悉的是你，不是我们。  不试试，怎么知道不会呢？ 不是，这个是题目，我不会做然后直接复制来这里问

该熟悉的是你，不是我们。  不试试，怎么知道不会呢？


Question: 十进制怎么转换成二进制

引用 8 楼 weixin_45858258的回复:输入星期几的第一个字母来判断一下是星期几，如果第一个字母一样，则继续判断第二个字母。 你贴错题了吧。。。。

引用 6 楼 weixin_45858258 的回复:这个要怎么改呢你写的这个想干嘛

这个要怎么改呢

#include<stdio.h> int main() { 	float a, b, c//定义 	; 	int number; 	switch(number)//开始计算 	{ 	case 1:c=a+b; 		printf("计算结果"); 		break; 	case 2:c=a-b; 		break; 	case 3:c=a*b; 		brea 	case 4:c=a/b; 		break; } printf("%c",a,b,c); return 0; }

十进制转16进制  string str="0123456789ABCDEF" void dectohex(int n) {     if (n >=0 && n < 16)         cout << str[n];     else {         dectooct(n / 16);         cout << str[n % 16];     } }

十进制转八进制  void dectooct(int n) {     if (n >=0 && n < 8)         cout << n;     else {         dectooct(n / 8);         cout << n % 8;     } }

void dectooct(int n) { 	if (n >= 0 && n < 8) 		cout << n; 	else { 		dectooct(n / 8); 		cout << n % 8; 	} }


Question: 这个要怎么改啊，请各位大神搭把手

手动实现一个 有限状态机。

手动实现一个 有限状态机。

好好学习一下，数据类型有哪些？如何输入？if语句怎么写？else是什么样的？分号的使用

你这写的是什么啊？看过书了吗？


Question: PTA中有关阶乘序列的问题

引用 7 楼 user-3的回复:自己i和j都搞乱了，main函数里的for循环用的是j不是i 哇，好有道理，那今晚我回去输入答案试试，哈哈哈哈，多谢大佬

引用 10 楼 SuperDay的回复:那么楼主的程序到底输出了什么？ Sorry啊,刚下课，输入5，输出5

那么楼主的程序到底输出了什么？

引用 6 楼 SuperDay 的回复:[quote=引用 4 楼 qq_45798109的回复:]应该不是溢出的问题吧，我就是用的int类型通过的  #include <iostream> using namespace std;  int jiecheng(int n) { 	return n == 1 ? 1 : n * jiecheng(n - 1); }  int main() { 	int n; 	cin >> n; 	int sum = 0; 	for (int i = 1; i <= n; ++i) { 		sum += jiecheng(i); 	} 	cout << sum; 	return 0; } 试过12阶乘再累加吗？[/quote] 超过20的数确实会溢出，但是对于那道题来说int类型就足够了

自己i和j都搞乱了，main函数里的for循环用的是j不是i

引用 4 楼 qq_45798109的回复:应该不是溢出的问题吧，我就是用的int类型通过的  #include <iostream> using namespace std;  int jiecheng(int n) { 	return n == 1 ? 1 : n * jiecheng(n - 1); }  int main() { 	int n; 	cin >> n; 	int sum = 0; 	for (int i = 1; i <= n; ++i) { 		sum += jiecheng(i); 	} 	cout << sum; 	return 0; } 试过12阶乘再累加吗？

引用 4 楼 qq_45798109的回复:应该不是溢出的问题吧，我就是用的int类型通过的  #include <iostream> using namespace std;  int jiecheng(int n) { 	return n == 1 ? 1 : n * jiecheng(n - 1); }  int main() { 	int n; 	cin >> n; 	int sum = 0; 	for (int i = 1; i <= n; ++i) { 		sum += jiecheng(i); 	} 	cout << sum; 	return 0; } 大佬你的语言俺不熟，如果不是溢出问题那是啥问题呢

引用 1 楼 SuperDay的回复:int类型估计会溢出，改成long long类型 好的，今晚我回去改下答案看看，多谢大佬

int类型估计会溢出，改成long long类型


Question: 二叉树的创建，求大佬看看我哪里错了

f == 'Y' || f == 'y'

复制粘贴也会错的吗？ 还能再乱点吗？

函数运行了一半就自己结束了，不懂为什么

if(!(f=='Y'||'y'))	{	  这一行有错 f=='Y' || f=='y'  需要两个f

ch=getchar();输入字符完成之后，还有一个回车符'\n'，后面scanf("%c",&f);接收到的实际是这个回车符  #include<stdio.h> #include<stdlib.h>  using namespace std;  typedef struct BinaryTreeNode {     char a;     struct BinaryTreeNode *l; //左右孩子指针     struct BinaryTreeNode *r; }BinaryTreeNode;  BinaryTreeNode * CreateBinaryTree() {     char ch,f;      BinaryTreeNode *node=NULL;     node=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));      printf("请输入节点值\n");     scanf("%c",&ch);     f = getchar();     node->a = ch;      printf("该节点是否为子叶(Y or N)");     scanf("%c",&ch);     f = getchar();      if((ch == 'Y')||(ch == 'y'))     {         node->l = CreateBinaryTree();         node->r = CreateBinaryTree();     }     else     {         node->l=NULL;         node->r=NULL;     }     return node; }  int main() {     CreateBinaryTree(); }


Question: 输入n个正整数，输出其中的负数，正数，0

只要会用最基本的语法，这个题目不难，自己动手写写吧。 如果要吃着碗饭，就要去努力～

不是都用中文写清楚了吗  一步一步来呗

int a[100]; for (i = 0; i < n; i++) {     scanf("%d", &a[i]);     if (a[i] > 0)     {         posNum++;     }     else if (a[i] == 0)     {         zeroNum++;     }     else     {         negNum++;     } }


Question: 初学者ball ball各位大佬

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

谢谢楼上各位大佬的指导呀

把判断i%6的判断放到循环里

#include<stdio.h> int main(){ 	int i; 	for(i=1;i<=100;i++){ 		printf("%d",i); 		if(i%6==0){ 			printf("\n"); 		} 	} 	return 0; }

你需要将if语句放入for循环中哦


Question: 二叉树非递归遍历求助

int Empty_Stack(LinkStack *S) { 	if (S->top == NULL) 		return 1; 	else 		return 0; }


Question: 求救！c语言的除法的四则运算。除法总是有问题

该不会是整型之间做加减乘除只能得到整型，所以错了吗

大概是除法所得出来的两个浮点数就是不对不知道为什么。是因为我的除法公式写错了吗？

话说这个会沉吗