Question: 请问冒泡排序法中的for的作用

引用 3 楼 壹抹尘埃的回复:冒泡排序，本身就是由双层循环实现的。其中外层循环控制排序轮数，一般为要排序的数组长度减1次，因为最后一次循环只剩下一个数组元素不需要对比了。内层循环主要对比数组中每个临近元素的大小，以确定是否交换位置，对比和交换次数随排序轮数而减少。 意思是我删掉了外层循环的话，只给一个数组元素排了序是吗？所以要外层循环才能把所有数组元素都排序完，要完成整个数组的排序的话，外层循环控制排序的次数要与排序的数组元素个数相同才能全部排完是吗

这就是双层循环的，这个程序缩进没学好，上一行一个缩回来，并且不加花括号也不是好习惯

建议在第二层循环执行完之后把所有的数组元素打印出来，看一下每次第二层循环之后数组元素有什么区别。 这样就能看出第一层循环是不是多余的～

你去掉试试不就知道了么？ 冒泡排序只用一次循环，无法变成有序的

跟双重循环for｛for｛｝｝没区别，不带花括号的话默认下一条语句为他的语句块

我也是网上查了很多，都是这样做。而我觉得标记的第一个for语句完全是个摆设...真不知道有什么作用，删掉效果应该一样吧？可偏偏就有区别。两个for语句紧挨在一起也不是我认识的双重循环，真的特别懵

引用 9 楼 qq_45914920 的回复:[quote=引用 8 楼 壹抹尘埃的回复:][quote=引用 7 楼 qq_45914920 的回复:] [quote=引用 3 楼 壹抹尘埃的回复:]冒泡排序，本身就是由双层循环实现的。其中外层循环控制排序轮数，一般为要排序的数组长度减1次，因为最后一次循环只剩下一个数组元素不需要对比了。内层循环主要对比数组中每个临近元素的大小，以确定是否交换位置，对比和交换次数随排序轮数而减少。 意思是我删掉了外层循环的话，只给一个数组元素排了序是吗？所以要外层循环才能把所有数组元素都排序完，要完成整个数组的排序的话，外层循环控制排序的次数要与排序的数组元素个数相同才能全部排完是吗[/quote] 你看一下你的输入。87654321，你删掉外层循环后。仅仅就是 8 7 比较大小进行互换位置，互换之后 ， 8 6再接着比大小互换位置。依次进行比大小判定和位置互换。如此的循环有且只有一次，在进行完这一次的循环后，只有最后一位数是正确的。因此你需要加入外层循环来控制循环次数。具体的我在上面说的很清楚了[/quote] 那没错了 感谢大佬的详细解答！[/quote] 嗯呢，没啥问题的话就把帖子结了。

引用 8 楼 壹抹尘埃的回复:[quote=引用 7 楼 qq_45914920 的回复:] [quote=引用 3 楼 壹抹尘埃的回复:]冒泡排序，本身就是由双层循环实现的。其中外层循环控制排序轮数，一般为要排序的数组长度减1次，因为最后一次循环只剩下一个数组元素不需要对比了。内层循环主要对比数组中每个临近元素的大小，以确定是否交换位置，对比和交换次数随排序轮数而减少。 意思是我删掉了外层循环的话，只给一个数组元素排了序是吗？所以要外层循环才能把所有数组元素都排序完，要完成整个数组的排序的话，外层循环控制排序的次数要与排序的数组元素个数相同才能全部排完是吗[/quote] 你看一下你的输入。87654321，你删掉外层循环后。仅仅就是 8 7 比较大小进行互换位置，互换之后 ， 8 6再接着比大小互换位置。依次进行比大小判定和位置互换。如此的循环有且只有一次，在进行完这一次的循环后，只有最后一位数是正确的。因此你需要加入外层循环来控制循环次数。具体的我在上面说的很清楚了[/quote] 那没错了 感谢大佬的详细解答！

引用 7 楼 qq_45914920 的回复:[quote=引用 3 楼 壹抹尘埃的回复:]冒泡排序，本身就是由双层循环实现的。其中外层循环控制排序轮数，一般为要排序的数组长度减1次，因为最后一次循环只剩下一个数组元素不需要对比了。内层循环主要对比数组中每个临近元素的大小，以确定是否交换位置，对比和交换次数随排序轮数而减少。 意思是我删掉了外层循环的话，只给一个数组元素排了序是吗？所以要外层循环才能把所有数组元素都排序完，要完成整个数组的排序的话，外层循环控制排序的次数要与排序的数组元素个数相同才能全部排完是吗[/quote] 你看一下你的输入。87654321，你删掉外层循环后。仅仅就是 8 7 比较大小进行互换位置，互换之后 ， 8 6再接着比大小互换位置。依次进行比大小判定和位置互换。如此的循环有且只有一次，在进行完这一次的循环后，只有最后一位数是正确的。因此你需要加入外层循环来控制循环次数。具体的我在上面说的很清楚了


Question: 王道顺序表第七题

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

应该是的，楼主可以运行一下看看


Question: 输入两数m,n,求两个正整数m,n的最大公约数和最小公倍数。请看下我写的代码哪有问题,谢谢啦。

好的，知道了，感谢各位大哥。

/**  * @file    gcd.c  * @brief   计算 m, n 的最大公约数和最小公倍数  */  #include <stdio.h>  unsigned int gcd(unsigned int m, unsigned int n) {     unsigned int r;      while (n > 0) {         r = m % n;         m = n;         n = r;     }     return m; }  int main(int argc, char *argv[]) {     int m, n;     int d;      while (scanf("%u%u", &m, &n) == 2) {         d = gcd(m, n);         printf("%u %u\n", d, m / d * n);     }     return 0; }

你n的  int m, n, a, b, t;     scanf("%d,%d", &m, &n);     if (m <= 0 || n <= 0)     {         printf("Input error! \n");     }     else     {         if (m < n)         {             t = m;             m = n;             n = t;         }         a = m;         b = n;         do         {             t = a % b;             a = b;             b = t;         } while (b != 0);     }          printf("最大公约数是%d\n", a);     printf("最小公倍数是%d\n", m*n / a);

编译错误or运行问题说清楚发上来


Question: 大佬求救，为什么输出的最后一位是-858993460？

请问你当时怎么解决的哇 我也是后面几个数是负的

#include <stdio.h>  #define MAX 100  int calculatePrime(int lim, int aa[MAX]) {     int i, k=0;     for (i = 2; i <= lim; i++) {         int t = 1, j;         for (j = 1; j <= i; j++) {             if (i % j == 0)                 t = t * j;         }         if (t == i) {             aa[k++] = i;         }     }     //for (i = 0;i<MAX; i++) {     for (i = 0;i<k; i++) {    //注意有效值是k个～         printf("%d ", aa[i]);         if (aa[i] <=0)break;     }     return 0; }  int main() {     int lim;     int aa[MAX];     printf("Input lim:\n");     scanf_s("%d", &lim);     printf("All the prime numbers which are less than or equal to lim :\n");     calculatePrime(lim, aa);     return 0; } 供参考～

int aa[MAX] = {0}; 初始化一下。

你这个程序中有两个问题，第一个是你没有给aa初始化，第二个是你的calculatePrime函数中，最后打印的时候应该先判断是否小于0，如果小于等于0,break；然后再打印


Question: C语言初步学习求教！稍有不同的猜数游戏

这种肯定是需要字符串的，整数不适合


Question: C语言

引用 5 楼 user-1的回复:要用网页版来结贴，手机不行的 谢了，兄弟，爱你哦，，，

可以无满意结贴。。。

贴子，撤不回来

我发现错误了，待会儿再发一下

要用网页版来结贴，手机不行的

引用 3 楼 user-1的回复:可以无满意结贴。。。 在哪儿结束？？？？？


Question: 怎么把指针变量p2中的字符串赋值到p1中，程序运行到while循环中的赋值时就提示写入位置 0x00FE5858 时发生访问冲突。

引用 5 楼 自信男孩 的回复:[quote=引用 2 楼 真相重于对错 的回复:] char *p1="ABCDEF"; ===》 char p1[] =ABCDEF"; ================= P2 同理 这样简单的修改是不行的，注意  引用 4 楼 dajkhsdawe 的回复:[quote=引用 2 楼 真相重于对错 的回复:] char *p1="ABCDEF"; ===》 char p1[] =ABCDEF"; ================= P2 同理 不使用数组可以实现字符的复制吗    通过指针变量可以实现字符的复制到另一个指针变量中，这个可以实现吗    [/quote]  实现不了，因为p1, p2都是指针，那么指向的内容又都是字符串常量，不可以修改。复制肯定有写的操作，因此不可以实现。但是p1若是从malloc申请的空间，是可以读写的。  #include<stdio.h> int main(void) {     char p1[] = "ABCDEF";     char *p2 = "abc";     char *string1 = p1;     char *string2 = p2;     while (*string2 != '\0')     {         *string1++ = *string2++;     }     *string1 = '\0';     //printf("%s\n", string1);    //string1已经指向了字符串末尾，因此不能再通过string1输出了，可以考虑把string1再指向p1， 然后在用string1输出是可以的。     printf("%s\n", p1); } 供参考～[/quote] 明白了  感谢感谢

char *p1="ABCDEF"; char *p2 = "abc"; p1, p2都是左值，怎么复制呢？

引用 2 楼 真相重于对错 的回复:char *p1="ABCDEF"; ===》 char p1[] =ABCDEF"; ================= P2 同理 这样简单的修改是不行的，注意  引用 4 楼 dajkhsdawe 的回复:[quote=引用 2 楼 真相重于对错 的回复:] char *p1="ABCDEF"; ===》 char p1[] =ABCDEF"; ================= P2 同理 不使用数组可以实现字符的复制吗    通过指针变量可以实现字符的复制到另一个指针变量中，这个可以实现吗    [/quote]  实现不了，因为p1, p2都是指针，那么指向的内容又都是字符串常量，不可以修改。复制肯定有写的操作，因此不可以实现。但是p1若是从malloc申请的空间，是可以读写的。  #include<stdio.h> int main(void) {     char p1[] = "ABCDEF";     char *p2 = "abc";     char *string1 = p1;     char *string2 = p2;     while (*string2 != '\0')     {         *string1++ = *string2++;     }     *string1 = '\0';     //printf("%s\n", string1);    //string1已经指向了字符串末尾，因此不能再通过string1输出了，可以考虑把string1再指向p1， 然后在用string1输出是可以的。     printf("%s\n", p1); } 供参考～

引用 2 楼 真相重于对错 的回复:char *p1="ABCDEF"; ===》 char p1[] =ABCDEF"; ================= P2 同理 不使用数组可以实现字符的复制吗    通过指针变量可以实现字符的复制到另一个指针变量中，这个可以实现吗

引用 1 楼 user-4 的回复:能不能跟踪一下看看是在哪个位置上出问题的？ while语句中的*string1++ = *string2++;提示写入地址访问发生冲突

能不能跟踪一下看看是在哪个位置上出问题的？


第一个不懂得地方刚才突然就明白了，但是第二个不懂的地方还是不懂，求教

if(s[i])找到对应的字符了，就输出前一个字符，否则输出原来的字符


Question: 代码改错

strcpy_s(wordT, strlen(str) +1, str); 建议查一下strcpy_s函数，在vs下strcpy_s不支持两个参数；

看了一遍，自己重新写了一份，但是有个错误， #define _SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<assert.h>                //库  int saveword(char str[]);//定义saveword   char wordT[100][100]; int count[100] = { 0 }; int q = 0;  int main(void) {                                //main 	int a = 0;//存储一句话中所以英文单词个数 	char str[100] = "an a ab abc a 9,9 a a,cza"; 	//char str[200];//定义一个字符串，用来存放句子 	//gets_s(str);//输入str 	//puts(str);//输出检测str是否正常 	int strLEN;//定义strLEN,用来存放str长度 	strLEN = strlen(str);//strlen函数，字符串长度 	//printf("%d", strLEN);//检测strLEN是否正常 	for (int i = 0; i < strLEN; i++)//统计一句话中所以的英文单词，循环小于句子长度 	{ 		if (isalpha(str[i]) != 0 && isalpha(str[i + 1]) == 0) //如果i是英文，i+1不是英文，则判断为一个单词 		{ 			a++; 		} 	} 	printf("%d\n", a); //输出全部单词数量 	//====分离单词，存储== 	char temp[100];  	int templen = 0; 	for (int i = 0; i < strLEN; i++) 	{ 		if (isalpha(str[i]) != 0) 		{ 			temp[templen] = str[i]; 			templen++; 		} 		else if (templen > 0) 		{ 			temp[templen] = '\0'; 			saveword(temp); 			templen = 0; 		} 	} 	//puts(temp); 	for (int i = 0; i < q; i++) { 		printf("Word: %s, Count: %d\n", wordT[i], count[i]); 	} }  int saveword(char str[]) {                    //saveword 	int i; 	for (int i = 0; i < 100; i++) 	{ 		if (strcmp(wordT[i], str) == 0) 		{ 			count[i]++; 			return 0; 		} 	} 	strcpy_s(wordT, str); 	count[q]++; 	q++; 	return 1; }  strcpy_s(wordT, str);  这句话报错？？是什么原因？  错误 c2660

你先看看wordNum是多少


Question: 求推荐靠谱的c语言编译器

不是大佬，但是学一门语言，根本不需要一个月，基本要求就是涉及到的语法都会写会调试，完成一定的需求，不涉及太复杂的算法都能搞定，学习语言这样的要求已经足够了

引用 1 楼 SuperDay的回复:中文报错？楼主是猴子请来的逗比吗？初学者找个简单的工具就好了，不要那么挑剔！不要对什么都不满意！你学不好语言不是工具的错，就是你不行！简单的dev就好了，不要把时间浪费在熟悉新工具上面，只是学习一门语言而已，你以为你要搞一个操作系统出来吗？ 您是大佬，

目前我用的是CodeBlocks，出错的那一行用红色方块标记，自己找错误原因。还有VC++6.0，学校上机用的，出错会在下面英文提示。


Question: 求解为什么运行的程序里面有一个随机值？

引用 6 楼 bsnow 的回复： for (j = 0; j < 5; j++)  你sum2的循环次数有问题啊。      for (j = 0; j < 5; j++)     {         sum2 = 0;         for (i = 0; i < 3; i++)         {             sum2 += c[i][j];         }         c[i][j] = (sum2) / 3;     } 谢谢

引用 7 楼 自信男孩 的回复：[quote=引用 4 楼 Arthur169 的回复:] [quote=引用 2 楼 自信男孩 的回复：]float c[4][5] = {0}, sum1, sum2; 程序没问题的，最后一个是一个随机数，因为c没有初始化，如果c初始化为0，那么输出结果最后一个是0.  通过查看你的程序，你的程序里没有对c[3][4]这个元素赋值的，所以这个位置的元素输出的是随机数。还是不行诶 那个位置会输出0[/quote] 你没明白我的意思呢，你没有对这个位置的元素赋值，原来初始化为0了，所以最后输出还是0.[/quote]好的 谢谢

引用 3 楼 user-3 的回复：c[i][j] = sum1; 这行代码，这个时候i = 0, j = 5, 这样操作好吗？还是不行诶

引用 4 楼 Arthur169 的回复:[quote=引用 2 楼 自信男孩 的回复：]float c[4][5] = {0}, sum1, sum2; 程序没问题的，最后一个是一个随机数，因为c没有初始化，如果c初始化为0，那么输出结果最后一个是0.  通过查看你的程序，你的程序里没有对c[3][4]这个元素赋值的，所以这个位置的元素输出的是随机数。还是不行诶 那个位置会输出0[/quote] 你没明白我的意思呢，你没有对这个位置的元素赋值，原来初始化为0了，所以最后输出还是0.

引用 2 楼 自信男孩 的回复：float c[4][5] = {0}, sum1, sum2; 程序没问题的，最后一个是一个随机数，因为c没有初始化，如果c初始化为0，那么输出结果最后一个是0.  通过查看你的程序，你的程序里没有对c[3][4]这个元素赋值的，所以这个位置的元素输出的是随机数。还是不行诶 那个位置会输出0


Question: 地震数据处理中叠加速度谱的具体制作过程

我会做不等于你会做啊，C币有什么用，不稀罕


Question: 自编车号

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

#include <stdio.h> #include <string.h> #include <ctype.h>  #define N 5   int main() {      int i;     char str[N+1], cnt = 0;      scanf("%s", str);      if (strlen(str) < N || strlen(str) > N) {         printf("no!\n");         return -1;     }      if (!isdigit(str[N-1])) {    //last bit must be digit         printf("no!\n");         return -1;     }      for (i = 0; i < N; i++)         if (islower(str[i])) {             printf("no!\n");             return -1;         }         if (isupper(str[i]) && str[i] != 'I' && str[i] != 'O')             cnt++;      if (cnt < 2) {         printf("no!\n");         return -1;     }      printf("ok!\n");   } 进一步优化～ 供参考～

#include <stdio.h> #include <string.h> #include <ctype.h>  #define N 5   int main() {      int i;     char str[N+1], cnt = 0;      scanf("%s", str);      if (strlen(str) < N) {         printf("no!\n");         return -1;     }      if (!isdigit(str[N-1])) {    //last bit must be digit         printf("no!\n");         return -1;     }      for (i = 0; i < N; i++)         if (isupper(str[i]) && str[i] != 'I' && str[i] != 'O')             cnt++;      if (cnt < 2) {         printf("no!\n");         return -1;     }      printf("ok!\n");       /*     int i,s,x,y,flag;     char P[N+1];     scanf("%s",P);     if((P[N-1]>'9')||(P[N-1]<'0'))     {         flag=0;     }     else     {         x=0;         y=0;         for(i=0;i<(N-1);i++)         {             if((P[i]>='A')&&(P[i]<='Z')&&(P[i]!='I')&&(P[i]!='O'))                 x++;         }          for(i=0;i<(N+1);i++)         {             if((P[i]>='0')&&(P[i]<='9'))                 y++;         }         if(x<=4&&y<=4&&x>=2)         {             flag=1;         }         else         {             flag=0;         }     }     if(flag)     {         printf("ok.\n");     }     else     {         printf("no.\n");     }     */ } 供参考～  把每个限制条件判断一下，不需要太复杂的～

应该少了一个判断， x+y是否等于4  如果出现了小写字母或者其他非法符号的情况下     x+y<4 也是非法的输入吧

printf("%s\n",flag?"ok":"no"); 最后一段这样改。

简单一点：  #include <stdio.h>  int main() {   char b[] = "ABCDEFGHJKLMNPQRSTUVWXYZ0123456789", n[6], i, j;    for (i = 0; i < 6 && (j = getchar()) != 10;) n[i++] = j;   if (i != 5 || j != 10) puts("no.");   else   {     for (i = j = 0; i < 5; n[i++] = j, j = 0) while (b[j] && n[i] != b[j]) j++;     if (n[4] > 23 && n[4] < 34) for (i = 0; i < 4; n[i++] < 24 ? j++ : 0);     j > 1 ? puts("ok.") : puts("no.");   }    return 0; }

有什么问题吗？还请楼主明示！


Question: 求解呀 大一新生期末大作业之一（用C语言噢）

可以看一下这篇文章《C语言大作业之超市管理系统》 https://www.weupgo.cn/?p=545，有源码有解释

可以看一下这篇文章《C语言大作业之超市管理系统》 https://www.weupgo.cn/?p=545，他解释的挺好的

引用 4 楼 與蘤舊縐 的回复：引用 3 楼 CQUPT-YYJ 的回复:[quote=引用 2 楼 與蘤舊縐 的回复：]这迷宫也太简单了吧，深度优先和广度优先都可以做，用不着动用A*大法没学到什么优先  深度优先或者广度优先的思想，递归实现，最不动脑子的做法了，没学过的话查一下马上就会 你要有兴趣的话可以查一下A*，游戏常用的寻路算法，效率比上面那俩高多了，写起来略麻烦点[/quote]好 谢谢了

引用 4 楼 與蘤舊縐 的回复：引用 3 楼 CQUPT-YYJ 的回复:[quote=引用 2 楼 與蘤舊縐 的回复：]这迷宫也太简单了吧，深度优先和广度优先都可以做，用不着动用A*大法没学到什么优先  深度优先或者广度优先的思想，递归实现，最不动脑子的做法了，没学过的话查一下马上就会 你要有兴趣的话可以查一下A*，游戏常用的寻路算法，效率比上面那俩高多了，写起来略麻烦点[/quote]👌 🙏了

引用 3 楼 CQUPT-YYJ 的回复:引用 2 楼 與蘤舊縐 的回复：这迷宫也太简单了吧，深度优先和广度优先都可以做，用不着动用A*大法没学到什么优先  深度优先或者广度优先的思想，递归实现，最不动脑子的做法了，没学过的话查一下马上就会 你要有兴趣的话可以查一下A*，游戏常用的寻路算法，效率比上面那俩高多了，写起来略麻烦点

这迷宫也太简单了吧，深度优先和广度优先都可以做，用不着动用A*大法

这图画的真不错啊，等楼主写程序出来看看


Question: 求大神帮助

重建项目，重启电脑，多半就好了，不是你的代码问题


Question: 大佬救我啊，我才大一，老师教学进度不一样但是oj截止时间一样，今晚就没了

引用 14 楼 Wayward：) 的回复:[quote=引用 13 楼 Wayward：) 的回复:] 这有点水啊，乘着上厕所的时间，给你码出来。。。  #include<cstdio> bool is(int number){ 	int sum = 0,copy = number; 	while(number){ 		int d = number % 10; 		sum += d * d * d; 		number /= 10; 	} 	return (sum == copy); } int main(){ 	int m,n,ok = 0; 	scanf("%d%d",&m,&n); 	if(m > n){ 		int t = m; 		m = n; 		n =t; 	} 	while(m <= n){ 		if(is(m)) { 			printf("%d\n",m); 			ok = 1;	 		} 		m++; 	} 	if(!ok) printf("NO\n"); 	return 0; }    好像还不太对，没有用任何技巧  #include<cstdio> bool is(int number){ 	if(!(number >= 100 && number <= 999)) return 0; 	int sum = 0,copy = number; 	while(number){ 		int d = number % 10; 		sum += d * d * d; 		number /= 10; 	} 	return (sum == copy); } int main(){ 	int m,n,ok = 0; 	scanf("%d%d",&m,&n); 	if(m > n){ 		int t = m; 		m = n; 		n =t; 	} 	while(m <= n){ 		if(is(m)) { 			printf("%d\n",m); 			ok = 1;	 		} 		m++; 	} 	if(!ok) printf("NO\n"); 	return 0; }  [/quote] 多谢大佬，虽然那次作业已经结束了，不过我也还是可以看看学习一下

引用 11 楼 自信男孩 的回复:[quote=引用 9 楼 kakaka_shao 的回复:] [quote=引用 8 楼 自信男孩 的回复:] 平时不努力，临时抱佛脚～ 就礼拜六礼拜天两天时间，还有体测半天，电协活动半天，晚自习一个晚上，还有其他作业，根本就没有平时了，谈何努力[/quote] 你的时间自己决定，事情总有轻重缓急，你分不清楚那个是重点吗？既然不把老师布置的作业作为重点，那即使做不出来 也不关系呢，其他事情比较优先，先处理其他的就好了，只要你努力的方向，你认为方向对了就好了。没有说你在其他方面不努力， 只是在编程上而已～[/quote] 嗯，我会继续努力的。只是这里礼拜事太多，有点手忙脚乱分配不好时间了

慢慢搜，总能看到希望的

引用 9 楼 kakaka_shao 的回复:[quote=引用 8 楼 自信男孩 的回复:] 平时不努力，临时抱佛脚～ 就礼拜六礼拜天两天时间，还有体测半天，电协活动半天，晚自习一个晚上，还有其他作业，根本就没有平时了，谈何努力[/quote] 你的时间自己决定，事情总有轻重缓急，你分不清楚那个是重点吗？既然不把老师布置的作业作为重点，那即使做不出来 也不关系呢，其他事情比较优先，先处理其他的就好了，只要你努力的方向，你认为方向对了就好了。没有说你在其他方面不努力， 只是在编程上而已～

引用 13 楼 Wayward：) 的回复:这有点水啊，乘着上厕所的时间，给你码出来。。。  #include<cstdio> bool is(int number){ 	int sum = 0,copy = number; 	while(number){ 		int d = number % 10; 		sum += d * d * d; 		number /= 10; 	} 	return (sum == copy); } int main(){ 	int m,n,ok = 0; 	scanf("%d%d",&m,&n); 	if(m > n){ 		int t = m; 		m = n; 		n =t; 	} 	while(m <= n){ 		if(is(m)) { 			printf("%d\n",m); 			ok = 1;	 		} 		m++; 	} 	if(!ok) printf("NO\n"); 	return 0; }    好像还不太对，没有用任何技巧  #include<cstdio> bool is(int number){ 	if(!(number >= 100 && number <= 999)) return 0; 	int sum = 0,copy = number; 	while(number){ 		int d = number % 10; 		sum += d * d * d; 		number /= 10; 	} 	return (sum == copy); } int main(){ 	int m,n,ok = 0; 	scanf("%d%d",&m,&n); 	if(m > n){ 		int t = m; 		m = n; 		n =t; 	} 	while(m <= n){ 		if(is(m)) { 			printf("%d\n",m); 			ok = 1;	 		} 		m++; 	} 	if(!ok) printf("NO\n"); 	return 0; }

引用 6 楼 kakaka_shao 的回复:[quote=引用 4 楼 liups 的回复:] 直接搜索吧，网上肯定有现成的 改了点题目[/quote] 那就没了吧，反正大家都没了。老师会处理的

平时不努力，临时抱佛脚～

大一的？  俺家娃初一的信息课上的同学都会做这个题    大学的日子看来是越来越好混了

引用 8 楼 自信男孩 的回复:平时不努力，临时抱佛脚～ 就礼拜六礼拜天两天时间，还有体测半天，电协活动半天，晚自习一个晚上，还有其他作业，根本就没有平时了，谈何努力

引用 4 楼 liups 的回复:直接搜索吧，网上肯定有现成的 改了点题目

引用 3 楼 qq_45798109 的回复:[quote=引用 2 楼 kakaka_shao的回复:]同学好像也没几个会的，尴尬了 不慌，总会有第一个吃到螃蟹的人，然后。。。。然后大家就都有螃蟹吃了[/quote]  好了，别的宿舍人来找我们抄了，然而我们也不会

直接搜索吧，网上肯定有现成的

引用 2 楼 kakaka_shao的回复:同学好像也没几个会的，尴尬了 不慌，总会有第一个吃到螃蟹的人，然后。。。。然后大家就都有螃蟹吃了

同学好像也没几个会的，尴尬了

搞不定，就找找身边同学抄作业咯


Question: c语言输出图案

第一个很好搞，第二个算好行数和*号关系，第三个控制好空格和行数的关系

第一个很好搞，第二个算好行数和*哥关系，第三个控制好空格和行数的关系

初学更要自己动手写！

引用 1 楼 user-2的回复:这么简单的题都不会做吗？你也敢发上来 那这位给大佬解答一下呗，刚开始学

这么简单的题都不会做吗？你也敢发上来


Question: 求教为什么这个会出现警告错误，然后无法正常输入数据

#include <stdio.h> #include <stdlib.h> #include <string.h> #define initial 100 #define increased 10  typedef int ElemType; typedef struct taglist {     ElemType *base;     int length;     int size; }List;  void input(ElemType*l) {     scanf("%d",l); }  void visit(ElemType*l) {     printf("%d ",*l); }  void create(List*l,ElemType n) {     ElemType s,*p;     p=l->base=(ElemType*)malloc(initial*sizeof(ElemType));     l->length=n;     l->size=initial;     //for (;n<0;n--)     for (;n >=0;n--)     {         input(&s);         *p++=s;     } }  void list(List*l) {     int i;     ElemType *p=l->base;     //for (i=1;i<=l->length;i++)     for (i=0;i<l->length;i++)         visit(p++); } int insert(List*l,int i,ElemType e) {     ElemType *base,*p,*q;     if (i<1||i>l->length+1)         return 0;     if (l->length>=l->size)     {         l->size+=increased;         base=(ElemType*)realloc(l->base,l->size*sizeof(ElemType));         l->base=base;     }     q=l->base+i-1;     for (p=l->base+l->length-1;p>=q;--p)         *(p+1)=*p;     *q=e;     ++(l->length);     return 1; }  //void paixu(List*l,ElemType a) void paixu(List*l) {     //ElemType i,*q;     ElemType i, tmp;     ElemType *p=l->base;     //for (i=1;i<=l->length;i++)     for (i=0;i<l->length;i++)     {         if(*p>*(p+1))         {             tmp=*(p+1);             *(p+1)=*p;             *p = tmp;             p++;         }     } } int get(List*l,int i,ElemType *e) {     if(i<1||i>l->length)         return 0;     if (e!=NULL)*e=*(l->base+i-1);     return 1; }  int main() {     //int i,n,*q,m,x,e,a,y;     int i,n,m,x,e,a,y;      List *q;      q = (List *)malloc(sizeof(List));     if (!q)         return -1;     scanf("%d",&n);     //create(*q,n);     create(q, n);     scanf("%d",&m);     //paixu(q, a);     paixu(q);   //冗余的a     for (i=1;i<x;i++)    //x拿来的，初始化在哪？     {         //int *b,*c;         int b, c;         //get(q,i,*b);         get(q,i, &b);         //get(q,i,*c);         get(q,i, &c);         //if (*b<=m&&*c>=m)         if (b<=m&&c>=m)            y=i;         break;     }     insert(q,y,e);     list(q);     return 0; }  供参考～  程序里还有问题，比如x是做什么的，在哪赋值（初始化）的等等

引用 2 楼 proorck2019的回复:[quote=引用 1 楼 qq_45798109的回复:]scanf("%d",&l); 这里没错，l是个指针。[/quote] 没注意，打扰了。。。

引用 1 楼 qq_45798109的回复:scanf("%d",&l); 这里没错，l是个指针。

scanf("%d",&l);


Question: 求解一个c语言知识点

好的谢谢你们，非常感谢

引用 4 楼 liups 的回复:你这个不叫递归，请注意这点！ 原理吗，看这里（来自北大 郭炜 新标准C++）：  更正，是递归（报歉没看清楚）

你这个不叫递归，请注意这点！ 原理吗，看这里（来自北大 郭炜 新标准C++）：

mysqrt  递归函数，自己调用自己。

引用 1 楼 user-3的回复:那么，有什么问题吗？？？ 就是它表达的含义是什么呢

那么，有什么问题吗？？？


Question: 为什么显示结果中score都是0啊，求解！

我已经发现哪里错了，嘿嘿

不好意思，我也不知道复制进去就这样了

代码不友好，难以回答。


Question: 输不出去，请大神指点错误！！！

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

要学会看提示信息，错误信息等待，看不懂可以求助翻译软件

怎么可能能输出，程序有一个error，先解决了这个error，程序正常编译通过了才可能输出。

大于号不对，用英文的。


Question: 数据结构代码问题

嗯嗯，对的得取地址，我脑子一时懵住了，

引用 2 楼 Pink_Piggy 的回复:我已经用Init_LinkList将head初始化了呀 建议去看看形参和实参的区别。你这样根本改变不了head的值。

if (head == NULL) exit(0); 这个判断哪里来的，传递过来的head还是没有初始化嘛，编译器提示没有初始化，你还是没有初始化呢  void Init_LinkList(LinkList *head)  {  assert(head != NULL); *head = (LinkList)malloc(sizeof(**head)); if (*head == NULL)      exit(0);    (*head)->next = NULL;  (*head)->data.num = 0;  } 供参考～  调用时注意head前加&； 即： Init_LinkList(&head);

好的好的，谢谢你啦

head传递到函数里面，并不会返回回来的，好好读书

引用 3 楼 SuperDay的回复:[quote=引用 2 楼 Pink_Piggy的回复:]我已经用Init_LinkList将head初始化了呀 这个函数并不能修改head的值[/quote] void Init_LinkList(LinkList head)  {  	assert(head != NULL);  	if (head == NULL) exit(0);    	head->next = NULL;  	head->data.num = 0;  }  这这这，我觉得没毛病嘛，哎呀，好难啊

引用 2 楼 Pink_Piggy的回复:我已经用Init_LinkList将head初始化了呀 这个函数并不能修改head的值

应该有一句head=...,你的代码里没有啊。


Question: 求各位大哥看看哪里错了，最后一个测试点总是不过，心态崩了wwww

引用 5 楼 SuperDay 的回复：也就是1M而已，不应该出问题的这个二维数组用malloc二级指针分配的 我刚才试了 电脑直接黑屏 强制关机

也就是1M而已，不应该出问题的

求大哥解救

引用 2 楼 proorck2019 的回复：是不是因为s太大了？改用malloc？不行 这样大的数组用malloc我电脑直接黑屏

是不是因为s太大了？改用malloc？

投的c语言板块，因为只有输入输出流用的cpp


Question: 萌新问题呀 太难了求大神给我解答一下

大一这个三个数应该是用冒泡法

写的不对发出来，程序写好了再去补流程图

引用 1 楼 user-2的回复:这么简单的问题也好意思发出来，楼主是怎么混到大学里面的？ 考进去的呀 之前对这个一点也不懂 然后大一刚开学学这些还不是特别了解 现在就知道要用if函数来写 但感觉写的不对 然后我程序匡图我也不知道是咋画呀

这么简单的问题也好意思发出来，楼主是怎么混到大学里面的？


Question: 关于C语言的大数运算

10^25=2^83，需要83位二进制数，long long是几位？

也就是两个long long，不需要数组的


Question: 哪里有错啊

恭喜恭喜，可以选择无满意结贴

已解决，蟹蟹                蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤


Question: 拜托各位大佬啦

引用 3 楼 lin5161678 的回复:[quote=引用 2 楼 自信男孩 的回复:] struct number { int val; int time; //次数 }; 可以考虑用结构体，代码建议自己写写 time不太适合做变量名 已经有标准库函数是这个名字了  虽然用在这里不会导致出错  [/quote] 那就改一下，没什么问题吧。解决编译错误是最基本的～

#include<iostream> using namespace std; int getin(); class test { 	int num; 	int * date; public: 	test() :num(0), date(NULL) {} 	test(int n, int da[]); 	void stor(); 	//friend ostream & operator<<(ostream &os, const test & st); 	void tj()const; 	void getn(); 	~test() { delete[]date; }; };  test::test(int n, int da[]) { 	num = n; 	date = da; } void test::getn() { 	do { 		num = getin(); 		if (num <= 1) 			cout << "整数的个数太少,重新输入\n";  	} while (num <= 1); 	date = new  int[num]; 	for (int i = 0; i < num; i++) 		date[i] = getin();  } void test::stor() { 	for (int i = 0; i < num; i++) 		cout << "  " << date[i]; 	int tema, temb, tem;  	for (int i = 0, j = num-1; i < j; i++, j--) 	{ 		for (int f = i; f < j; f++) 		{ 			if (date[i]>date[f]) 			{ 				tema = date[i]; 				date[i] = date[f]; 				date[f] = tema; 			} 			if (date[j] < date[f]) 			{ 				temb = date[j]; 				date[j] = date[f]; 				date[f] = temb; 			} 		} 	} 	cout << "stor" << endl; 	for (int i = 0; i < num; i++) 		cout << "  " << date[i]; 	cout << endl; } void test::tj()const { 	int i, flag, tem, n = 0; 	for (i = 0; i < num; i++) 	{ 		n = 0; 		flag = 0; 		tem = date[i]; 		for (int k = 0; k < i; k++) 			if(tem == date[k])//判断统计首数是否统计过 		{ flag = 1; break; }//统计过进入下一次循环 		if (flag == 1)continue; 		for (int j = i; j < num; j++) 			if (tem == date[j]) 				n++;//统计数目 		cout << date[i] << ":" << n << endl; 	} } int getin() { 	int temp = 0; 	cin >> temp; 	if (!cin) 	{ 		cout << "输入错误！\n"; 		cin.clear(); 		cin.ignore(1024, '\n'); 		getin(); 	} 	else if (temp > 100000) 	{ 		cout << "请输入小于100000的整数\n"; 		cin.ignore(1024, '\n');  	} 	else 		return temp; } int main() { 	test ts; 	ts.getn(); 	ts.stor(); 	ts.tj(); 	return 0; } 试着做了一下，刚开始学，学艺不精·请大佬指点

引用 2 楼 自信男孩 的回复:struct number { int val; int time; //次数 }; 可以考虑用结构体，代码建议自己写写 time不太适合做变量名 已经有标准库函数是这个名字了  虽然用在这里不会导致出错

排序会不会，写先排序之后，再输出，然后调整一下输出格式，先上代码看看吧


Question: 大佬这怎么办啊

在printf后面加一条语句c = 0;就可以了。淡然这条语句和printf都属于循环体内。

所以要重开一个函数吗

每次循环c都需要清0，才能准确统计


Question: c语言完全二叉树算法题求助

完全二叉树第 k 层有 2^(k-1) 个结点。直接双层循环，外层遍历层数，里层统计该层的和，记录最大值就解决了。


Question: c语言数组函数

引用 1 楼 自信男孩的回复:你的max和min没有初始化； 可以试着做一下修改：max = min = 0;即指向第一个数组的下表；然后n从1开始循环～ 请问是加在第4行吗

max = min = a[0]

谢谢谢谢

#include<stdio.h> void MaxMinExchang(int a[], int n) { 	int max = 0; 	int min = 0; 	for (int i = 0; i < n; i++) 	{ 		if (a[i] > a[max]) 		{ 			max = i; 		} 		else 		{ 			if (a[i] < a[min]) 			{ 				min = i; 			} 		} 	}  	int t = a[max]; 	a[max] = a[min]; 	a[min] = t; } int main() { 	int a[10]; 	int n; 	printf("Input 10 numbers:"); 	for (n = 0; n < 10; ++n) 	{ 		scanf("%d", &a[n]); 	} 	printf("Exchange results:"); 	MaxMinExchang(a, 10); 	for (n = 0; n < 10; ++n) 	{ 		printf("%4d", a[n]); 	} 	return 0; }  以下是VS2015调试结果

能帮我改一下吗，实在搞不明白

引用 3 楼 ?Victor.?? 的回复:[quote=引用 1 楼 自信男孩的回复:]你的max和min没有初始化； 可以试着做一下修改：max = min = 0;即指向第一个数组的下表；然后n从1开始循环～ 请问是加在第4行吗[/quote] 就是在进入循环之前赋值为0


Question: c语言

先自己写写吧，不是特别难的问题～+


Question: 九宫格输入法c语言

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

一次输入之后  循环遍历字符串  字符串遍历结束  输出结果   注意输入字符串要空格也要读到字符串里面

引用 2 楼 user-3 的回复:while(scanf("%s", &n) != EOF)不对 题目只有1次输入 不用循环输入

while(scanf("%s", &n) != EOF)

while(scanf("%s", n) != EOF)


Question: C语言求助  找100内的素数

#include<stdio.h> int main() { 	int x; 	int i; 	int insprm=1; 	for(x=0;x<=100;x++) 	{ 		for(i=2;i<x;i++){ 			if(x%i==0){ 				insprm=0; 				break; 			} 		} 		//if(insprm=1){ 		if(x >= 2 && insprm==1){ 			printf("%d  ",x); 		} 		insprm = 1; 	}   	return 0; } 供参考～

引用 2 楼 世中仙 千般留恋是往年的回复:#include<stdio.h> main() {     int a=3,b=2;     int num,c;     printf("2 ");     for(a=3;a<100;a++)     {         num=0;         for(b=2;b<a;b++)          {             c=!(a%b);             num+=c;         }         if(num==0)         {             he+=a;             printf("%d ",a);         }         else ;     }     return 0; } 没有收好尾，多了个空格。。。 供参考。 本来还求了个素数之和，没删干净。。。

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


Question: 求解两道题

如果是求值，为啥不自己编辑，编译运行一下呢

希望大家帮帮忙吧

第一题0,5 第二题4

引用 3 楼 自信男孩的回复:如果是求值，为啥不自己编辑，编译运行一下呢 知道运行结果，但不知道为什么是这结果

引用 2 楼 與蘤舊縐的回复:建议你debug或者按着循环手写推一下，这没什么好说的吧，最前面列一行变量，行表示循环次数，一行一行写下去，另外~~这书写的代码略显 知道运行结果，但不知道为什么是这结果


Question: 数据结构c语言编程

引用 4 楼 qq_45849145 的回复:[quote=引用 1 楼 liups的回复:]建议看书然后自己做，实在不想做的耐心去网上搜索，肯定能找到的。大家凭什么帮你完成 作业 网上搜到的内容质量参差不齐，希望在这里得到一些借鉴和参考，有什么不可以呢？让你帮我做作业了？宁如果有空去做点有意义的事情吧，不要在这里当大喷子咯[/quote] 你牛

谢谢谢谢谢谢谢谢谢谢谢谢你啦

引用 1 楼 liups的回复:建议看书然后自己做，实在不想做的耐心去网上搜索，肯定能找到的。大家凭什么帮你完成 作业 网上搜到的内容质量参差不齐，希望在这里得到一些借鉴和参考，有什么不可以呢？让你帮我做作业了？宁如果有空去做点有意义的事情吧，不要在这里当大喷子咯

参考博客： https://blog.csdn.net/user-2/article/details/101795960


Question: 编写两个功能函数，使它们互相调用

学到了，谢谢您！！！

引用 8 楼 张天星的回复:[quote=引用 7 楼 菜鸡新手gsy 的回复:] 确实像您说的这样从f1到f2后不能再回来了，所以我改了一下，谢谢您！！！ 先修正一下，我说错了，这个不是回调。我是看着互相调用四个字，脑海中突然冒出回调两个字，简直了。 。。它的名字是？？我靠，应该叫递归？突然间我搞不清楚这个应该叫什么了。 但是思考的逻辑和递归是一样的。 互相之间的调用，必须有一个调用的条件（递归条件），和停止调用的条件（基线条件）。 递归条件确保两个方法在需要的时候可以循环，比如你f2永远调用不了f1 然后，基线条件就是不调用的条件。 来回两次调用之后，必须改变n的值。 而这个n的值，必须在某个时候停止循环。[/quote] int f1(int n); int f2(int n); int f1(int n) { 	if(n%2!=0) 		printf("奇数\n"); 	else 		f2(n); 	return 0; } int f2(int n) { 	if(n%2==0) 		printf("偶数\n"); 	    n=n/2; 		printf("除二后:"); 		f1(n); 	return 0;  } int main() { 	int n; 	printf("输入一个数:"); 	scanf("%d",&n); 	f1(n); 	return 0; }     这是我改正的

引用 7 楼 菜鸡新手gsy 的回复:确实像您说的这样从f1到f2后不能再回来了，所以我改了一下，谢谢您！！！ 先修正一下，我说错了，这个不是回调。我是看着互相调用四个字，脑海中突然冒出回调两个字，简直了。 。。它的名字是？？我靠，应该叫递归？突然间我搞不清楚这个应该叫什么了。 但是思考的逻辑和递归是一样的。 互相之间的调用，必须有一个调用的条件（递归条件），和停止调用的条件（基线条件）。 递归条件确保两个方法在需要的时候可以循环，比如你f2永远调用不了f1 然后，基线条件就是不调用的条件。 来回两次调用之后，必须改变n的值。 而这个n的值，必须在某个时候停止循环。

引用 5 楼 菜鸡新手gsy的回复:[quote=引用 3 楼 张天星的回复:]从f1到f2之后，f2不可能再到f1，因为你是偶数就在f1结束了，是偶数就在f2结束了。 从f2到不了f1 然后，你想做什么？ 这两种函数对调，一般是用在回调函数上，你是学习相关内容么？ 刚学习c语言，老师留的作业是两个函数互相调用[/quote] 确实像您说的这样从f1到f2后不能再回来了，所以我改了一下，谢谢您！！！

引用 4 楼 user-2的回复:是的，不过这样写程序大有问题 我也觉得很有问题，然后改了一下

引用 3 楼 张天星的回复:从f1到f2之后，f2不可能再到f1，因为你是偶数就在f1结束了，是偶数就在f2结束了。 从f2到不了f1 然后，你想做什么？ 这两种函数对调，一般是用在回调函数上，你是学习相关内容么？ 刚学习c语言，老师留的作业是两个函数互相调用

是的，不过这样写程序大有问题

有人吗！！！！！！！！！

我C语言好差


Question: 这是什么问题？他说：之前缺；

case 2之后，要写case 3和case 4，不要偷懒图省事


Question: 求问一个c程问题

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

兄弟你这个代码块缩进是真的要命

打印一下日志或者是断点调试一下，看看到哪里

算法是有点长

貌似是算法的问题

我感觉是内存泄漏

学习了，需要仔细检查

程序没什么问题，逐条追踪一下

当时写过一个学生管理系统，差不多大部分功能和你一样，也是读取文件， 查找，删除……

基本上都有解决的方案了

find的x不是char*，少了一个0x00 删除的话，加个判空，虽然有内存泄露但不会导致崩溃

加一。。。。。。。。。。。。

你这种代码出错概率真的太高了。你结构体里的data就是祸乱之源。结构体里定义一个指针，太容易出错了。然后还把一个const char赋给它，也许将来在自己不知道的情况下还尝试释放指针。

条理不太清晰

dele函数里有一个内存泄露

嗯嗯 但是真的感觉令人头秃

找不出问题就调试鸭，调试是最好的解决办法

都是高手啊！

真脑壳痛╯﹏╰

有那位大神解出来的话，跪服


Question: C语言颠倒句子顺序

引用 8 楼 user-1的回复:你不说都没注意看了，哪能写在一起啊？有时候一下子读入三个键，只读到一个，少一行又不能多赚钱，有什么好处 我明白了，十分感谢😁

引用 5 楼 user-1的回复:有可能啊，break肯定不对了，至于逻辑对不对，要去调试一下吧 结果对了，不过我还做了别的调整，其中一个就是把getchar提前: for (……){ ch=getchar (); if (ch=='.'||……) …… } 请问是不是不能像我原先的程序那样把getchar放if里？

有可能啊，break肯定不对了，至于逻辑对不对，要去调试一下吧

引用 3 楼 user-1的回复:if里面break，外面是单循环，就不再循环了，不就完了吗？ 啊对，是我犯蠢了，是不是改成continue就可以了？

if里面break，外面是单循环，就不再循环了，不就完了吗？

引用 1 楼 user-1的回复:第二个if根本就不对吧？ 不对吗？第二个if是在扫描空格，请问具体是哪里有问题？

第二个if根本就不对吧？


Question: 为什么要判断等于\0？（具体问题在代码中说明着）

引用 3 楼 qq_45814010 的回复:[quote=引用 1 楼 qq_45798109的回复:]\0是字符串结束标志，后面都没有字符了还比啥 结束了数组就没了，就自动停止比较了，还需要加上比较\0吗？[/quote]什么数组没了 什么自动停止? 编程没有自动的事情 怎么停怎么走都是代码说了算

引用 3 楼 qq_45814010 的回复:[quote=引用 1 楼 qq_45798109的回复:]\0是字符串结束标志，后面都没有字符了还比啥 结束了数组就没了，就自动停止比较了，还需要加上比较\0吗？[/quote] 可是，有时候，你定义了100个数组长度，字符只有30个。 你不判断\0，那么你会把32后面的所有位置继续比对。。。。 指不定你取出来的是什么乱码

引用 1 楼 qq_45798109的回复:\0是字符串结束标志，后面都没有字符了还比啥 结束了数组就没了，就自动停止比较了，还需要加上比较\0吗？

判断小于80是为了防止内存越界， 判断\0是字符串结束标志， 这两个都要判断。

\0是字符串结束标志，后面都没有字符了还比啥


Question: c语言字符二维数组

两层循环输出你要输出的字符就好了


Question: Linux Top 和ps的cpu占用率不一致？总计和各核的cpu使用率不一致是怎么回事？

引用 1 楼 user-1 的回复:因为统计的方法不一样，你看看这个文章：https://blog.csdn.net/aspnet_lyc/article/details/56280017确实不一样


Question: 素数质因数分解

至少人家一个算法弄通了啊，关效率啥事？我看楼主真是不可教也，自己慢慢去弄吧

我博客里面有篇叫从埃筛到欧拉筛，是讲素筛的，你可以看看

引用 12 楼 Macarons_i的回复:可以给你写一个o(n)复杂度的质因数分解 哦哦，这个我不太懂 ，刚学不久

错了到现在还没看出来，你看n的整除性，还是看m的整除性？m根本就是多余的变量

可以给你写一个o(n)复杂度的质因数分解

大哥，你这是n方的复杂度，当然不可能运行三位数以上的

引用 7 楼 SuperDay的回复:还有，一般1表示true，0表示false，你这个-1和1算是创新吗？在循环里面： if(n % i == 0)return 0; 循环外面： return 1; 不是很清晰吗？弄个a干嘛？多余的变量 我意思随便什么值拿来做返回值都行，所以就弄了个自己容易看懂的

引用 5 楼 qq_45798109的回复:[quote=引用 3 楼 无名之辈321的回复:][quote=引用 1 楼 qq_45798109的回复:]我不知道你写的这个循环有什么意义你是想写n%i==0吧 for (i = m; i >= 2; i--) 	{ 		if (m % i == 0) 			a++; 		break; 	} 这个函数是判断素数的，没啥问题，是那个主函数里面分解非素数的质因数，我写出来只能运行1-99的数，100及以上就不行了，就这想不通[/quote] 没问题吗？i=m,m%i有意义吗？[/quote] 有意义啊，i从m值开始自减，m/每次i的值没问题吧

引用 6 楼 SuperDay的回复:看你们写程序感觉好累啊，弄个m干嘛？多出一个不必要的变量。  for(i = sqrt(n); i >= 2; -- i) 这样不是妥妥的吗？ 刚学不久，还没有学会太多的简便写法

引用 3 楼 无名之辈321的回复:[quote=引用 1 楼 qq_45798109的回复:]我不知道你写的这个循环有什么意义你是想写n%i==0吧 for (i = m; i >= 2; i--) 	{ 		if (m % i == 0) 			a++; 		break; 	} 这个函数是判断素数的，没啥问题，是那个主函数里面分解非素数的质因数，我写出来只能运行1-99的数，100及以上就不行了，就这想不通[/quote] 没问题吗？i=m,m%i有意义吗？

引用 2 楼 SuperDay的回复:楼主，你这个程序到底是想干嘛呢？素数还需要分解吗？真是古今奇谈啊 打错了，是非素数分解质因数

引用 1 楼 qq_45798109的回复:我不知道你写的这个循环有什么意义你是想写n%i==0吧 for (i = m; i >= 2; i--) 	{ 		if (m % i == 0) 			a++; 		break; 	} 这个函数是判断素数的，没啥问题，是那个主函数里面分解非素数的质因数，我写出来只能运行1-99的数，100及以上就不行了，就这想不通

楼主，你这个程序到底是想干嘛呢？素数还需要分解吗？真是古今奇谈啊


Question: #C 这一题感觉有点BUG啊，有人能做出来吗？

引用 5 楼 wowpH 的回复:a[counter-1]=temp这么写确实不好，反正不是习惯的写法。  合成了多位数，只不过怎么合成的过程没写而已。“数据入temp”就是这个操作。 不是我习惯的写法。

也就是个flag而已。话说你就想看着，也不想把它打进去运行看看吗？纸上谈兵没有意义

引用 2 楼 user-2 的回复:流程都已经这么清晰了，就不能先把代码写出来再说吗？每次见到一些帖子都让我无语啊，这些初学者简直就是一个手指头都不想动啊！ 如果str中第一个字符为非数字的话程序可能会崩，即便不崩 a[counter-1]=temp 也是一个错误的操作；如果连续两个及两个以上都是数字的话数字会丢失，而且也并没有合成一个多位数..... 真看不明白具体要求是什么。

来个大哥帮帮忙啊


Question: c语言，急求

问题解决了，谢谢你

你的函数没有调用呢，直接发代码吧。给你调试一下


Question: 为什么数字输入字符数组要多输入一位空间咦

scanf_s对于%c缺少一个参数，即 scanf_s("%c", &a[i], 1);

引用 2 楼 qq_41754686的回复:最后面多出来的一个空间用来存放数组结束标志‘0’或者‘’\0“ 我分布调试发现是b0保存了回车

最后面多出来的一个空间用来存放数组结束标志‘0’或者‘’\0“

看不懂你想表达什么


Question: Visual C++编译时 expression:stream!=NULL

引用 6 楼 棉猴的回复:if((fp=fopen(fname,"r"))==NULL)//=改成==试试 OK，问题解决了，多谢

if((fp=fopen(fname,"r"))=NULL)   {      printf("Error!--Can't open file.");      getchar();      exit(1);   }   else{       scanner_example(fp);//-----------fp是NULL-------   } 导致 void scanner_example(FILE *fp) {     char ch;      int i,c;     ch=fgetc(fp);//------fp是NULL，所以报错！----------    ....... }

应该是文件流那里有问题。 if((fp=fopen(fname,"r"))=NULL)  r改成rb试试

引用 1 楼 棉猴的回复:把完整代码贴出来吧。另外VC++6.0是我的最爱，没有之一 2楼是我发的完整的源代码

#include<stdlib.h> #include<stdio.h> #include<ctype.h> #include<string.h> #include<math.h> #define MAX_KEY_NUMBER 20 #define KEY_WORD_END "waiting for your expanding" #define ID 6 #define INT 7 #define LT 8 #define LE 9 #define EQ 10 #define NE 11 #define GT 12 #define GE 13 #define IS 14 #define PL 15 #define MI 16 #define MU 17 #define DI 18 #define UCON 19 char TOKEN[20]; int lookup(char*);  void out(int, char*);  void report_error(); void scanner_example(FILE *fp) {     char ch;      int i,c;     ch=fgetc(fp); 	int checkdot=0;      int checke=0;     int t;     t=fgetc(fp);  	fseek(fp,-1,1);    while(t!=EOF)   {      if(isalpha(ch))  	  {       TOKEN[0]=ch;  	  ch=fgetc(fp); 	  i=1;     while(isalnum(ch)) 	 {       TOKEN[i]=ch; 	  i++;  	  ch=fgetc(fp); 	  }       TOKEN[i]='\0';       fseek(fp,-1,1);        c=lookup(TOKEN);      if(c==0)  		  out(ID, TOKEN);  	 else out(c," "); 	 }      else if(isdigit(ch)) 	 {       TOKEN[0]=ch;  	  ch=fgetc(fp); 	  i=1;    while (isdigit(ch))    {       TOKEN[i]=ch;  	  i++;  	  ch=fgetc(fp);  	  }       TOKEN[i]='\0';       fseek(fp,-1,1);       out(INT,TOKEN); 	}     else     if(isdigit(ch)) 	{       TOKEN[0]=ch;       ch=fgetc(fp);       i=1;     while(isdigit(ch)||ch=='.'||ch=='E'||ch=='e')  	{ 		if (ch=='.'){checkdot=1;} 		else if(ch=='e'||ch=='E') 		{       checke=1;        TOKEN[i]=ch;       i++;       ch=fgetc(fp);     if(ch=='+') 	{ 		TOKEN[i]=ch; 		i++;         ch=fgetc(fp); 	  {       TOKEN[i]=ch;       i++;       ch=fgetc(fp);        continue; 	  } 	 }     else     { 	  TOKEN[i]=ch;       i++;       ch=fgetc(fp); 	  {       TOKEN[i]=ch;       i++;       ch=fgetc(fp);       continue; 	  } 	 }     if (ch=='-') 	{ 	  TOKEN[i]=ch; 	  i++;       ch=fgetc(fp); 	 {       TOKEN[i]=ch;       i++;       ch=fgetc(fp);       continue;       } 	}       TOKEN[i]=ch; 	  i++;       ch=fgetc(fp); 	  }       TOKEN[i]='\0';       fseek(fp,-1,1);    if(checkdot==1) 	{       out(UCON,TOKEN); 	  }    else if (checke==1) 	{       out(UCON,TOKEN); 	  }     else       out(INT,TOKEN); 	  } 	 }     else     switch (ch)  	{       case '<': ch= fgetc(fp);      if (ch=='=') out(LE, " ");       else if (ch=='>') out(NE, " ");      else 	 {       fseek(fp,-1,1); 	  TOKEN[i]=ch;       i++;       ch=fgetc(fp);       out(LT," ");  	  }       break;       case '=': out(EQ," "); break;       case ':': ch=fgetc(fp);      if(ch=='=') out(IS," ");      else  	 {       fseek(fp,-1,1);       report_error(); 	  }       break;       case '>': ch=fgetc(fp);      if (ch=='=') out(GE, " ");      else 	 {       fseek(fp,-1,1);       out(GT," "); 	  }       break;       case '+':out(PL," ");break;       case '-':out(MI," ");break;       case '*':out(MU," ");break;       case '/':out(DI," ");break;       case '\n': break;       case ' ': break;       case '\t': break;       default: report_error();break; 	  }       ch=fgetc(fp);       t=fgetc(fp);       fseek (fp,-1,1); 	  }     return;  }   char *KeyWordTable[MAX_KEY_NUMBER]={"begin","end","if","then","else",KEY_WORD_END};  int lookup(char *token)  {     int n= 0;     while(strcmp(KeyWordTable[n],KEY_WORD_END))  	{      if (!strcmp(KeyWordTable[n],token)) 	  {       return n+1;        break; 	  }       n++; 	  }       return 0;  	 }     void report_error() 	{      printf("error");  	 }     void out(int c, char* v) 	{       char *cl="";      switch (c) 	 {       case  1: cl="BEGIN"; break;       case  2: cl="END"; break;       case  3: cl="IF"; break;       case  4: cl="THEN"; break;       case  5: cl="ELSE"; break;       case  6: cl="ID"; break;       case  7: cl="INT"; break;       case  8: cl="LT"; break;        case  9: cl="LE"; break;       case  10: cl="EQ"; break;       case  11: cl="NE"; break;       case  12: cl="GT"; break;       case  13: cl="GE"; break;       case  14: cl="IS"; break;        case  15: cl="PL"; break;       case  16: cl="MI"; break;       case  17: cl="MU"; break;       case  18: cl="DI"; break;       case  19: cl="UCON"; break; 	  }       printf("(%s,%s)\n",cl,v); 	  } int main(void) {   char *fname="file.txt";   FILE *fp;   if((fp=fopen(fname,"r"))=NULL)   {      printf("Error!--Can't open file.");      getchar();      exit(1); 	  }   else{       scanner_example(fp); 	  }    fclose(fp);    return 1;  }

把完整代码贴出来吧。另外VC++6.0是我的最爱，没有之一


Question: pta平台上的题目，不知道哪里错了，请问哪位大佬知道，指导一下下。

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

问题在于你的分解因子的算法上要改进 就是求因子的循环次数太多了     对于一个整数n，最大的因子是n/2（如果n为偶数）， 那么大于n/2的循环有必要吗，减少这部分循环，速度就提升了一倍     类似大于n/3的因子又有几个呢？。。。。。  自己找一下求素数的算法先，可以把n先分解成若干个素数的乘积，这些素数肯定都是不大于sqrt（10000）=100的 100以内的素数甚至不需计算，直接打表都行啊  而后，所有的因子，就是这些素数之间的不重复的组合数了，哪怕穷举速度也都足够通过测试了

你这个都是超时的，说明算法还需要改进提高效率

引用 3 楼 寻开心的回复:可以一次性把sqrt(10000）以内的所有素数都计算出来，或者直接敲进去 然后针对这个素数表来做分解，找到最小因子，然后再组合 额，这个，说真的，不懂

引用 1 楼 user-3的回复:你这个都是超时的，说明算法还需要改进提高效率 哦哦，那就是说没什么错误，就只是算法需要改进对吧？


Question: 求救啊大佬


Question: c语言函数调用

#include<stdio.h> int fact(int i); int main() { 	int i, sum, a, n; 	sum = 0; 	scanf("%d", &n); 	for (i = 1; i <= n; i++) 	{ 		a = fact(i); 		if (a == -1) 			printf("error!"); 		else 			sum = sum + a;		 	} 	printf("%d\n", sum); 	return 0; }  int fact(int i) { 	if (i<0) 		return -1; 	if (i == 0) 		return 1; 	if (i >= 1) 		return (i*fact(i - 1)); }

不是已经实现了吗？

你现在不就是把i给fact传参了


Question: C语言编码求思路

谁说<>=是三目运算符的？它们是双目运算符。也就是说，不能连用。e.g.  if(0<=age<=3) 变成 if(0<=age && age <= 3)

引用 2 楼 SuperDay 的回复:就是if else if else，都没看过书吗？ #include <stdio.h> int main() { 	int age; 	printf("enter your age:"); 	scanf("%d",&age); 	if (0<=age<=3) 		printf("可以免票"}; 	else if (4<age<=12)  		printf("需要买半票"); 	else if(age>12) 		printf("需要买全票"); 	printf("%d岁",age); 	return 0; } 结果： enter your age：6 可以免票6岁   我实在是搞不懂了。

引用 18 楼 SuperDay的回复:多动点脑子，否则这种程序都要搞半天，真的是要放弃了 好的，我会努力学习的

多动点脑子，否则这种程序都要搞半天，真的是要放弃了

引用 16 楼 SuperDay的回复:这种问题你都问得出来啊，printf放在最前面啊！很无语啊 不懂就问嘛，谢谢大佬解答，麻烦了。

这种问题你都问得出来啊，printf放在最前面啊！很无语啊

引用 14 楼 SuperDay的回复:3>=age都不需要了，其它差不多了 那它显示的结果是：需要购买半票6岁，怎么才能把6岁放到前面。

3>=age都不需要了，其它差不多了

引用 12 楼 SuperDay 的回复:晕，age > 12 下面是age >= 4 再下面最好判断age >= 0否则错误输入 总共就三个表达式，搞了一晚上都搞不好怎么回事？ #include <stdio.h> int main() { 	int age; 	printf("enter your age:"); 	scanf("%d",&age); 	if (age>12) 		printf("需要买全票"); 	else if (age>=4)  		printf("需要买半票"); 	else if(3>=age) 		printf("可以免票"); 	else if(age>=0) 		printf("可以免票"); 	printf("%d岁",age); 	return 0; } 是这样吧

引用 10 楼 SuperDay 的回复:真的是无语了，不是说大于12写到最前面吗？ 还有，你干嘛对0<=age<=3情有独钟啊？C语言不支持比较表达式连写！ #include <stdio.h> int main() { 	int age; 	printf("enter your age:"); 	scanf("%d",&age); 	if (12>age) 		printf("需要买全票"); 	else if (age>4)  		printf("需要买半票"); 	else if(3>=age) 		printf("可以免票"); 	printf("%d岁",age); 	 }

引用 8 楼 SuperDay 的回复:if(a > 12) {...} else if(a > 4) {这里a不需要写出来<=12，因为else就已经限制了这个条件，所以每个else只需要一个逻辑表达式就够了} #include <stdio.h> int main() { 	int age; 	printf("enter your age:"); 	scanf("%d",&age); 	if (0<=age<=3) 		printf("可以免票"); 	else if (age>4)  		printf("需要买半票"); 	else if(age>12) 		printf("需要买全票"); 	printf("%d岁",age); 	return 0; }  当我输入 6 的时候它还是显示可以免票，它应该显示需要购买半票，它就执行printf（“可以免票”）；不执行下面的printf，为什么，我哪里错了吗？

引用 6 楼 SuperDay的回复:这种可以先从>12开始写，else if就不需要再写明<=12了，每次只要写一个>就够了 我比较笨，理解不了你的意思，能说仔细一些吗？

图中的分析已经说的相当清楚了，伪代码都给你了，自己先写写，出现问题再部

就是if else if else，都没看过书吗？

图中的分析已经说的相当清楚了，甚至给出了部分代码


Question: C语言

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

内层循环不需要的，并且花括号没匹配好

print  不是printf

引用 1 楼 这是一个正经昵称 的回复:print  不是printf 大概是python用多了


Question: 求救

这是c语言的编程题。。

不就是个统计元音字母的程序吗？

先把图摆正，脖子不好扛不住。


Question: ASCII码转换问题

第一个字符A是你自己输入的，第二行的字符A是putchar输出的

引用 1 楼 user-1的回复:字符变量c接受了一个你输入的字符'A' 字符变量d=c+32，即c的ASCII码加32，对应字符'a' putchar(c);    输出字符变量c的值 printf("\n%d\n",c);   按%d的格式输出c的值，即输出值的ASCII码 下同 我理解了你说的，但我还有一点不明白。就是那一个语句输出那一个字符，比如第一个'A'是哪一个语句输出的，请帮忙解释，我对这个的理解有些混乱。

引用 3 楼 user-1的回复:第一个字符A是你自己输入的，第二行的字符A是putchar输出的 经我细细推敲，步步摸索……搞懂了。


Question: c语言

自己作业自己写。


Question: c语言 编程从键盘上输入5个整数,求去掉最大值和最小值以后那些元素的平均值

引用 3 楼 user-2的回复:[quote=引用 2 楼 weixin_45914264 的回复:] [quote=引用 1 楼 user-2的回复:]这么急的话，先动手写一下呗 我写了 总是写不完整 [/quote] 你可以代码贴出来，会有人帮忙改错[/quote] 好的谢谢你

引用 2 楼 weixin_45914264 的回复:[quote=引用 1 楼 user-2的回复:]这么急的话，先动手写一下呗 我写了 总是写不完整 [/quote] 你可以代码贴出来，会有人帮忙改错

引用 1 楼 user-2的回复:这么急的话，先动手写一下呗 我写了 总是写不完整

这么急的话，先动手写一下呗


Question: c语言实现任意n个数排序

#include <stdio.h> #include <stdalign.h> #include <stdlib.h>  int sort(int*,int);  int main(void) { 	int n, *p, i;  	printf("请输入要排序的数："); 	scanf("%d",&n);  	p=(int*)calloc(n,sizeof(int));  	if(p==NULL) 	{ 		printf("分配失败！"); 		exit(1); 	}  	printf("请输入要排序的数："); 	for(i=0;i<n;i++) 	{ 		scanf("%d",p+i); 	}  	//int sort(p,n); 	sort(p,n);  	printf("升序排列为："); 	for(i=0;i<n;i++) 	{ 		printf("%d  ",*(p+i)); 	}  	free(p);  	return 0;  }  int sort(int *p,int n) { 	int i, j, temp;  	for(i=0;i<n;i++) 	{ 		for(j=0;j<n-i-1;j++) 		{ 			if(*(p+j)>*(p+j+1)) 			{ 				temp=*(p+j); 				*(p+j)=*(p+j+1); 				*(p+j+1)=temp; 			} 		} 	} }  供参考～  注意函数调用和函数声明的区别～


Question: 简单运算问题

结果是1，因为>的优先级大于!=，因此先计算5>4，结果为1，继续判断1!=2，结果为1（true）

结果是1，因为>的优先级大于!=，因此先计算5>4，结果为0，继续判断0!=2，结果为1（true）


Question: 数据结构


Question: 求解啊

既然都有括号，那运算优选级就显而易见了，先把z赋值为4，然后判断y==z，而y=0，z=4，两者不相等，所以右值就变成了0，最后的运算就是x*=0;得到的结果就是0，反之如果y的值和z赋值相同，右值就是1


Question: 问大佬们一个问题

主要是x/2=z这个表达式就很奇怪不是吗

y=x/2=z；你这是把z赋值给x/2吗？？你觉得可以把一个变量赋值给一个表达式吗

你这是把实型数据赋给了整型数据，如果用等号的话应该用两个等号的吧？


Question: 请人指点一下进制之间怎么转换。。。还有124d是什么意思？

迷魂法，d是十进制的首字母，但是C语言里没有这样的语法，因此选A吧。 unsigned int b = 124u;这里的124u表示124是无符号数。但是没见过124d，表示十进制的；  i %= 4;B项的不好说，也就是也可能是7呗，个人认为这个答案存在歧义性。0， 1都是没问题的～

B 0124  是八进制  D 124d 是非法

没这样写过，你可以试试，有可能是非法的

引用 7 楼 wowpH 的回复:第二题选A，-3，-2，-1，0，1，2，3 谢谢大哥，感觉您教了我好多

引用 6 楼 SuperDay 的回复:太简单了反而不敢选吗？题目有够弱智的 那124d又是啥意思嘞？

第二题选A，-3，-2，-1，0，1，2，3

太简单了反而不敢选吗？题目有够弱智的

选A那就是文字游戏了，没意思

引用 2 楼 S_GKCYY 的回复:[quote=引用 1 楼 與蘤舊縐 的回复:] 1应该是D，124d表示十进制的124，d表示十进制 2那就不好说吧，这选项给的让人无语 我选d但是不对。。。[/quote]  不是D他还选A不成

A不是最明显的吗？第二题无语了

引用 1 楼 與蘤舊縐 的回复:1应该是D，124d表示十进制的124，d表示十进制 2那就不好说吧，这选项给的让人无语 我选d但是不对。。。


Question: 求助:输出1到1000中所有个位数的立方等于本身的数

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

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

#include <stdio.h>  int main() {     int a=0,b=0,c=0;     while(a<=9)     {         c++;         if(c*c*c==100*a+10*b+c)             printf("%d\n",100*a+10*b+c);         //if(c=9)         if(c==9)         {             c=0;             b++;              //if(b=9)             if(b==9)             {                 c=0;                 b=0;                 a++;             }         }     } } 供参考～


Question: 如何才能实现从下部跳出到上部的循环，而不用goto语句

char t_date[15];      while(1)     {         if(gets(t_date)[0]=='\0');         else if(strlen(t_date)<7) printf("error\n");         else break;     }     printf("reault=%s\n",t_date); 试试我这段，比你的精简一点

试着在goto语句的地方用continue;从头开始执行了。但是gets需要放到循环体内才行～

while (xxx) {     while (xxx)     {          break;     } }


Question: 请教大家一个c语言的问题

引用 3 楼 自信男孩的回复:定义在循环体内的变量，其作用域是循环体内。因此，再循环外是无效的。 好的，那我知道了，谢谢

定义在循环体内的变量，其作用域是循环体内。因此，再循环外是无效的。

引用 1 楼 user-3的回复:[quote=引用 楼主 maxiangyu_ 的回复:] 变量i定义在循环语句中，因此i在循环体内不可见，这是紫书上说的，但是我上网看了三四个人的解释，我感觉从他们的解释中应该是（在循环体外不可见，因为i是定义在循环体内，这样在循环体外的话就相当于没有i这个变量，在循环体外printf（“%d\n”,i）是会报错的，即在循环外不可见）    不知道我的想法对不没毛病  循环体外不可见 怎么了 [/quote] 那就行，那应该是书上写错了，你看一下照片，书上写的是循环体内不可见

引用 楼主 maxiangyu_ 的回复:变量i定义在循环语句中，因此i在循环体内不可见，这是紫书上说的，但是我上网看了三四个人的解释，我感觉从他们的解释中应该是（在循环体外不可见，因为i是定义在循环体内，这样在循环体外的话就相当于没有i这个变量，在循环体外printf（“%d\n”,i）是会报错的，即在循环外不可见）    不知道我的想法对不没毛病  循环体外不可见 怎么了


Question: 新生求解

double比float精度更高而已


Question: 字符串中单词逆序（i love china 变为i evol anihc）怎么做？

拿空格来当分词符号，然后逆序输出即可  #include<cstdio> #include<string> #include<cstring> #include<iostream> using namespace std;  int main() { 	string line; 	getline(cin, line); 	int i = 0; // 起始点 	for (int j = 0; j < line.length(); j++) { 		if (j == line.length() - 1 || line[j] == ' ') { 			// 开始分割和翻转 			int k = (j == line.length() - 1) ? j : j - 1; 			for (; k >= i; k--) printf("%c", line[k]); 			(j == line.length() - 1) ? printf("\n") : printf(" "); 			i = j + 1; // 更换起点 		} 	} 	return 0; } /* I love china */

二维字符数组存储，第二维直接for循环逆序输出


Question: 帮忙看下哪里不对啊

sum要初始化 sum=0.

引用 1 楼 user-2的回复:sum=0最好初始化一下 并且，是编译问题，运行问题，要说清楚，编译错误提示信息，运行结果什么发上来看看，不然人家还要去弄你的程序才知道，不是耽误时间吗？ 哦哦好的，我照你的改了一下，然后好了，谢谢你

哦哦好的，我照你的改了一下，然后好了，谢谢你


Question: 关于数字金字塔的一段小代码陷入死循环了

引用 13 楼 SuperDay的回复:引用 12 楼 乔碧萝大魔王的回复:[quote=引用 11 楼 SuperDay的回复:][quote=引用 10 楼 乔碧萝大魔王的回复:][quote=引用 8 楼 qq_45798109的回复:][quote=引用 7 楼 乔碧萝大魔王的回复:][quote=引用 5 楼 qq_45798109的回复:][quote=引用 4 楼 乔碧萝大魔王的回复:][quote=引用 2 楼 qq_45798109 的回复:] while(i)只要i不是零就一直循环。。【欲哭无泪】我怎么把i--忘了呢。。。。。 i--的话循环里i的值就变了呀[/quote] 大佬说的好有道理，我再想想[/quote] for循环有时候要比while好用[/quote] 俺知道了，多谢大佬提点，大佬天天开心啊[/quote] 看到你积极学习，有进步了，就会开心[/quote] 承蒙关照，大佬真是个好大佬[/quote] 不是什么大佬，就是搬砖而已[/quote] 谦虚的大佬必成大业

引用 12 楼 乔碧萝大魔王的回复:引用 11 楼 SuperDay的回复:[quote=引用 10 楼 乔碧萝大魔王的回复:][quote=引用 8 楼 qq_45798109的回复:][quote=引用 7 楼 乔碧萝大魔王的回复:][quote=引用 5 楼 qq_45798109的回复:][quote=引用 4 楼 乔碧萝大魔王的回复:][quote=引用 2 楼 qq_45798109 的回复:] while(i)只要i不是零就一直循环。。【欲哭无泪】我怎么把i--忘了呢。。。。。 i--的话循环里i的值就变了呀[/quote] 大佬说的好有道理，我再想想[/quote] for循环有时候要比while好用[/quote] 俺知道了，多谢大佬提点，大佬天天开心啊[/quote] 看到你积极学习，有进步了，就会开心[/quote] 承蒙关照，大佬真是个好大佬[/quote] 不是什么大佬，就是搬砖而已

引用 11 楼 SuperDay的回复:引用 10 楼 乔碧萝大魔王的回复:[quote=引用 8 楼 qq_45798109的回复:][quote=引用 7 楼 乔碧萝大魔王的回复:][quote=引用 5 楼 qq_45798109的回复:][quote=引用 4 楼 乔碧萝大魔王的回复:][quote=引用 2 楼 qq_45798109 的回复:] while(i)只要i不是零就一直循环。。【欲哭无泪】我怎么把i--忘了呢。。。。。 i--的话循环里i的值就变了呀[/quote] 大佬说的好有道理，我再想想[/quote] for循环有时候要比while好用[/quote] 俺知道了，多谢大佬提点，大佬天天开心啊[/quote] 看到你积极学习，有进步了，就会开心[/quote] 承蒙关照，大佬真是个好大佬

引用 10 楼 乔碧萝大魔王的回复:引用 8 楼 qq_45798109的回复:[quote=引用 7 楼 乔碧萝大魔王的回复:][quote=引用 5 楼 qq_45798109的回复:][quote=引用 4 楼 乔碧萝大魔王的回复:][quote=引用 2 楼 qq_45798109 的回复:] while(i)只要i不是零就一直循环。。【欲哭无泪】我怎么把i--忘了呢。。。。。 i--的话循环里i的值就变了呀[/quote] 大佬说的好有道理，我再想想[/quote] for循环有时候要比while好用[/quote] 俺知道了，多谢大佬提点，大佬天天开心啊[/quote] 看到你积极学习，有进步了，就会开心

引用 8 楼 qq_45798109的回复:引用 7 楼 乔碧萝大魔王的回复:[quote=引用 5 楼 qq_45798109的回复:][quote=引用 4 楼 乔碧萝大魔王的回复:][quote=引用 2 楼 qq_45798109 的回复:] while(i)只要i不是零就一直循环。。【欲哭无泪】我怎么把i--忘了呢。。。。。 i--的话循环里i的值就变了呀[/quote] 大佬说的好有道理，我再想想[/quote] for循环有时候要比while好用[/quote] 俺知道了，多谢大佬提点，大佬天天开心啊

俺知道了，多谢大佬提点，大佬天天开心啊

引用 7 楼 乔碧萝大魔王的回复:引用 5 楼 qq_45798109的回复:[quote=引用 4 楼 乔碧萝大魔王的回复:][quote=引用 2 楼 qq_45798109 的回复:] while(i)只要i不是零就一直循环。。【欲哭无泪】我怎么把i--忘了呢。。。。。 i--的话循环里i的值就变了呀[/quote] 大佬说的好有道理，我再想想[/quote] for循环有时候要比while好用

引用 5 楼 qq_45798109的回复:引用 4 楼 乔碧萝大魔王的回复:[quote=引用 2 楼 qq_45798109 的回复:] while(i)只要i不是零就一直循环。。【欲哭无泪】我怎么把i--忘了呢。。。。。 i--的话循环里i的值就变了呀[/quote] 大佬说的好有道理，我再想想

大佬说的好有道理，我再想想

引用 4 楼 乔碧萝大魔王的回复:引用 2 楼 qq_45798109 的回复:while(i)只要i不是零就一直循环。。【欲哭无泪】我怎么把i--忘了呢。。。。。 i--的话循环里i的值就变了呀

引用 1 楼 SuperDay的回复:while循环里面，变量都没修改，循环条件都不变，当然是死循环了 大佬你又救了我明白了，又是个弱智错误，大佬祝福你

while(i)只要i不是零就一直循环。。

while循环里面，变量都没修改，循环条件都不变，当然是死循环了


Question: 字符数组的一个小问题

是的，gets是读一整行，直到遇到回车或者EOF，或者超过字符串的范围

引用 1 楼 SuperDay 的回复:字符串遇到空格就结束了 不过用gets()好像可以用空格

引用 2 楼 qq_45798109 的回复:scanf遇到空格换行TAB都会结束 谢谢，我看了看课件，的确是这样

scanf遇到空格换行TAB都会结束

字符串遇到空格就结束了


Question: 提问

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

建议你好好学学语文

每输入一个数输出对应个数的星号


Question: 蓝桥杯试题，c语言运行没有结果

引用 6 楼 黄哥Python培训 的回复:大概是你写的代码时间复杂度太高，还在计算中。 请参考下面的代码。 感谢大佬提供思路和解法

大概是你写的代码时间复杂度太高，还在计算中。 请参考下面的代码。

引用 4 楼 棉猴 的回复:#include<stdio.h> int isok(int t) { 	int m = 1000; 	while (m>0) 	{ 		if (t / m == 2 || t / m == 4) 			return 1; 		else { 			t = t%m; 			m /= 10;//-----------t /=10改为m /=10---------------- 		}  	} 	return 0;  } int main() { 	int i, j, k; 	int count = 0; 	for (i = 1; i<2019; i++) 	{ 		if (isok(i)) 			continue;  		for (j = 1; j<2019; j++) 		{ 			 			if (isok(j) || i+j>=2019)//---添加判断规则，减少计算量----------- 				continue;  			for (k = 1; k<2019; k++) 			{ 				if (isok(k) || i+j+k>2019)//---添加判断规则，减少计算量----------- 					continue;  				if (i + j + k == 2019) 				{ 					printf("%d+%d+%d=2019\n", i, j, k);//-----添加显示，避免假死状态------------ 					count++; 				}  			} 		} 	}  	printf("%d\n", count); 	return 0; } 以下是VS2015调试结果 count的值最后要除以6因为不能重复算，但这个结果也不对，正确答案是40785

引用 2 楼 悲伤的小霉 的回复:下课了，回去试一下，retune，你写反了吧还是不行，运行没有结果

下课了，回去试一下，retune，你写反了吧

int legal(int x) {     while (x > 0) {         if (x % 10 == 2 || x % 10 == 4) {             return 0;         }         x /= 10;     }     return 1; }


Question: 数组空间大小对程序有什么影响

引用 1 楼 user-1 的回复:越界而已。 数组下标是从0开始的 谢谢了好像突然又懂了

越界而已。 数组下标是从0开始的


Question: 删除字符串中指定字符

全局变量和静态变量自动初期化为0，数组元素也全是0，不设置也不会被“烫”，函数内的非静态变量称为自动变量，自动变量不会自动初期化，里面默认都是“垃圾值”

烫烫烫 是调试状态，看到这个一般就是越界了。

字符串没有初始化，必须以‘\0’结尾

哪有什么自动之说，功能都是用代码堆出来的！字符串遇到'\0'才认为是结束的，不加上结束符，就会一直找下去，直到碰巧出现一个结束符为止，期间如果遇到不可打印的字符，就会显示出乱码


Question: 初入递归函数写法，不是很明白它的返回机制...难道递归语句以下的语句都要在递归完成之后才能实现吗？？

我想知道你所说的打断指的是什么呢？递归调用和普通函数一样，返回机制一样，并且都是返回之后才能执行剩下的语句。我觉得楼主的描述太乱了，不知道想问什么问题


Question: 一个语法小问题，自闭的我又来了

引用 2 楼 乔碧萝大魔王 的回复:引用 1 楼 这是一个正经昵称 的回复:if() {return} 了，那能过了if条件的不就是else？第一次见，哎，谢谢大佬，大佬一生平安啊 学习，可能很多时候正好就是个见怪不怪的过程

if() {return} 了，那能过了if条件的不就是else？


Question: 一个求素数的小问题

引用 2 楼 user-3的回复:if(prime(m)==1){ //没有花括号就变成了数字累加  为什么没有在count++;//只有在为真的条件下才会累加 后面加上} 你这代码我觉得应该是编译都过不了的，花括号对不齐，编译器必定过不了 我明白了，谢谢大佬，吐血(  •̆ ᵕ •̆ )◞♡

引用 7 楼 SuperDay的回复:都是要练出来的，要学会归纳总结 好的，含泪答谢，，被粗心搞死了

都是要练出来的，要学会归纳总结

引用 2 楼 user-3的回复:if(prime(m)==1){ //没有花括号就变成了数字累加  为什么没有在count++;//只有在为真的条件下才会累加 后面加上} 你这代码我觉得应该是编译都过不了的，花括号对不齐，编译器必定过不了 也不是过不了就是很菜

引用 3 楼 qq_45798109的回复:sum==2.... 我要自闭了，谢谢大佬

引用 1 楼 SuperDay的回复:sum == 2 孩子，你太粗心了，虽然你很努力，但是要用心 啊，吐了一地的血，谢谢大佬！！！大佬一生平安

sum == 2 孩子，你太粗心了，虽然你很努力，但是要用心


Question: 大佬们，救救孩子吧，急急急

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

应当自救，授人以鱼不如授人以渔


Question: 大佬们，求救啊

建立一个struct，以struct里面的平均成绩为关键字进行排序即可，这是数据结构里面基数排序的方法


Question: 代码没法运行

引用 1 楼 qq_45798109的回复:scanf...&n 大佬我脑瘫了。大佬一生平安

scanf...&n


Question: 问问大佬们为什么这个代码会运行超时

for循环，if  else语句后都加上花括号，即使后面跟的只有一行代码，养成良好的代码习惯

if(b%j==0)这个条件不需要加花括号吗，这样的话break不是一直会执行，然后条件也没满足就break，导致b的值不会变，死循环

请问为什么是这个。。。

if(b%j == 0){b--;break;}


Question: 求大佬解答一下

Queue *q = (Queue *)malloc(sizeof(Queue));

有malloc，没有molloc，另外需要引入stdlib.h头文件～  另外，建议贴出完整代码和错误提示信息～


Question: 下面两题不会。。。。请讲解一下

int a = 10,b; 00C2139E  mov         dword ptr [a],0Ah   	b = sizeof(a++); 00C213A5  mov         dword ptr [b],4   	return 0; 00C213AC  xor         eax,eax   刚看的汇编。 我写的b = sizeof(a++) 直接被解释成了mov ... 4操作。

sizeof是一个编译时刻就起效果的运算符，在其内的任何运算都没有意义。 百度搜来的

D 10 这个应该多看看书，就很容易得到答案

sizeof(); 是个宏操作，可能++操作没有执行。

引用 1 楼 datoulaile123的回复:1.D 当单字节整数，相当于c的数值就是-1 2.我以为是11，运行后发现是10，坐等他人回复。。 因为他输出的是i, 不是i++

引用 24 楼 轩渊 的回复:搜到sizeof是Pascal的一种内存容量度量函数：C语言中判断数据类型或者表达式长度符；不是一个函数，字节数的计算在程序编译时进行，而不是在程序执行的过程中才计算出来! 所以可能只在程序编译时判断了i++的类型返回字节大小，程序运行时并没有执行i++ 对，是的

引用 19 楼 S_GKCYY 的回复:[quote=引用 17 楼 u012441962 的回复:] sizeof运行于预处理阶段吧 自学的伤不起。。。预处理又是在哪讲的？书上有吗？[/quote] 这块的知识需要看编译原理了，sizeof是个运算符，类似于+ -号这种，C语言是编译的时候，就将sizeof的结果翻译成数字了（个人理解），所以你运行的时候这里sizeof(i++)这里只是一个编译的时候将结果翻译出来的数字，并没有进行++这个运算。

引用 21 楼 u012441962 的回复:[quote=引用 19 楼 S_GKCYY 的回复:] [quote=引用 17 楼 u012441962 的回复:] sizeof运行于预处理阶段吧 自学的伤不起。。。预处理又是在哪讲的？书上有吗？[/quote] 这块的知识需要看编译原理了，sizeof是个运算符，类似于+ -号这种，C语言是编译的时候，就将sizeof的结果翻译成数字了（个人理解），所以你运行的时候这里sizeof(i++)这里只是一个编译的时候将结果翻译出来的数字，并没有进行++这个运算。[/quote] 我想学c语言然后搞软件测试，编译原理是要会的是吗？

引用 21 楼 u012441962 的回复:[quote=引用 19 楼 S_GKCYY 的回复:] [quote=引用 17 楼 u012441962 的回复:] sizeof运行于预处理阶段吧 自学的伤不起。。。预处理又是在哪讲的？书上有吗？[/quote] 这块的知识需要看编译原理了，sizeof是个运算符，类似于+ -号这种，C语言是编译的时候，就将sizeof的结果翻译成数字了（个人理解），所以你运行的时候这里sizeof(i++)这里只是一个编译的时候将结果翻译出来的数字，并没有进行++这个运算。[/quote] 谢谢

引用 12 楼 自信男孩 的回复:[quote=引用 11 楼 自信男孩 的回复:] 第一个答案是-1；因为-1输出是%d，类型隐式提升； 第二个答案是10；需要注意的是sizeof不是函数，而是宏定义，因此宏定义在预编译阶段直接赋值，不在程序运行中执行。 需要更正一下，sizeof是计算类型的长度，因此不参与运算；sizeof()是运算符，由于在编译时计算，因此sizeof不能用来返回动态分配的内存空间的大小；不能说是宏定义，但是确实在编译时计算[/quote] +1

引用 17 楼 u012441962 的回复:sizeof运行于预处理阶段吧 自学的伤不起。。。预处理又是在哪讲的？书上有吗？

https://blog.csdn.net/wzy198852/article/details/7246836 补了一下sizeof的课，谢谢各位。可以直接理解为sizeof()括号里的内容不参与运算吗

sizeof运行于预处理阶段吧

谭浩强的书？……

引用 10 楼 qq_45798109 的回复:sizeof的操作数是一个表达式的话，这个表达式时不会被计算的 感觉你说的对，但忘了为啥。。。

sizeof()在哪一章讲的呢？我刚开始学，请帮忙指出。

引用 11 楼 自信男孩 的回复:第一个答案是-1；因为-1输出是%d，类型隐式提升； 第二个答案是10；需要注意的是sizeof不是函数，而是宏定义，因此宏定义在预编译阶段直接赋值，不在程序运行中执行。  这位仁兄说的应该比较准确。

引用 11 楼 自信男孩 的回复:第一个答案是-1；因为-1输出是%d，类型隐式提升； 第二个答案是10；需要注意的是sizeof不是函数，而是宏定义，因此宏定义在预编译阶段直接赋值，不在程序运行中执行。 需要更正一下，sizeof是计算类型的长度，因此不参与运算；sizeof()是运算符，由于在编译时计算，因此sizeof不能用来返回动态分配的内存空间的大小；不能说是宏定义，但是确实在编译时计算


Question: c语言点滴知识积累

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


Question: C++编程：编写一个程序，给定一个整数，将从1到整数的所有数字相加(包括1和整数)

按要求写程序即可  /*-  * Copyright (C), 1999-2019, mymtom.  *                     _                *  ____  _   _ ____ _| |_ ___  ____    * |    \| | | |    (_   _) _ \|    \   * | | | | |_| | | | || || |_| | | | |  * |_|_|_|\__  |_|_|_| \__)___/|_|_|_|  *       (____/                         *  * https://bbs.csdn.net/topics/395126735  */  /**  * @file    sum.cpp  * @brief     */  #include <iostream> using namespace std;  #include <stdlib.h>  static int sum(int last) {     int total;      total = 0;     for (int number = 1; number <= last; number++) {         if (number % 5 == 0 || number % 7 == 0)             continue;         total += number;     }     return total; }  int main(void) {     string line;      while (getline(cin, line)) {         cout << sum(atoi(line.c_str())) << endl;     }      return 0; }

然后呢 你的代码呢?


Question: 帮我看下问题在哪？

冒泡排序的时候有问题，即交换j和j+1对应的数据交换时应该是t = parr[i]; 楼主写成parr[i] = t;

引用 2 楼 datoulaile123的回复:打个断点(代码前点鼠标或者当前行按F9)，按下F5开始调试，按F10跳转到下一行，调试看下数据，是哪步的数据开始出错的 现在弄好了，谢谢，我记住这个方法了

引用 1 楼 寻开心的回复:parr[j] = t; parr[j] = parr[j+1] parr[j+1] = t  这个是交换数据吗？  好好想想，这个要怎么写 好了，我知道了，谢谢


Question: C primer plus第三章的第一道编程题

#include <limits.h>  里面有int最大和最小的定义    INT_MAX和INT_MIN 对最大再加1， 最小再减1就可以看到溢出的效果  IEEE754浮点数的表示方法。      float类型数据的表示范围为-3.4*10^38～+3.4*10^38。      double为-1.7*10^-308~1.7*10^308      long double为-1.2*10^-4932~1.2*10^4932. 把他们乘以10，再输出就看到浮点溢出


Question: C语言 统计句子中元音字母的个数(PTA上的题）/ 统计单词的长度

第二个问题 #include<stdio.h> int main() { 	char ch,count=0; 	scanf("%c",&ch); 	int bSpace=0; 	while (ch!='.') { 		if (ch != ' ') {//  			count++; 			bSpace=0; 		} else { 			if ( 0 == bSpace && count ) { // 遇到第一个空格  				printf("%d ", count); 				count = 0; 				bSpace = 1; 			} 		} 		scanf("%c",&ch); 	} 	return 0; }

#include <stdio.h> #include <string.h> int main(int argc, const char * argv[]) {     char word[100];     int  i;     int n=1;     do     {         char c='.';         scanf("%s",word);         i=(int)strlen(word);         if(word[i-1]==c)         {if(i>1)             {                printf("%d\n",i-1);             }              n=0;         }         else{             printf("%d ",i);         }     }while(n);     return 0; }


Question: 求代码

pick_num函数第二参数要 int * n 啊，   传递 count变量的指针才能把结果带回来， 作为返回参数使用  如果函数的形参和实参的作用还没有理解， 还是先去多研究一下用一个函数交换两个变量内容的基础问题吧

引用 6 楼 薄情⁽ⁿᵔᵕᵔⁿ⁾的回复:[quote=引用 5 楼 寻开心的回复:]c++ 到 c，简单改造一下就可以了  c里面没有c++的bool类型， pick_num函数，只要把bool替换成int，用0代替flase，1代替true 主函数改造一下输入和输出就可以了  #include <stdio.h> #include <string.h>  void pick_num(const char* str, int* n, unsigned int* outArray) { int count = 0;// 找到的数量 unsigned int value = 0,  i=0; int  bFind = 0; // 当前是否在处理数字 for (i = 0; i < strlen(str); i++) { if (str[i] >= '0' && str[i] <= '9') { if (bFind) value *= 10; value += str[i] - '0'; bFind = 1; } else if (bFind){ // 遇到非字符，输出数字 bFind = 0; outArray[count] = value; count  ++; value = 0; } } if (bFind) { outArray[count++] = value;  // 字符串以数字结束的 } *n = count; }   int main() {     printf("Please input a string:");     char s[200];     gets(s);     int count;     unsigned int outArray[100];     pick_num(s, &count, outArray);     printf("total num:%d\n" , count);     for (int i = 0; i < count; i++)         printf("%d ", outArray[i]);     return 0; } 里面那个取地址符号有什么用呢？[/quote] &count这个，，，，，，，

引用 5 楼 寻开心的回复:c++ 到 c，简单改造一下就可以了  c里面没有c++的bool类型， pick_num函数，只要把bool替换成int，用0代替flase，1代替true 主函数改造一下输入和输出就可以了  #include <stdio.h> #include <string.h>  void pick_num(const char* str, int* n, unsigned int* outArray) { int count = 0;// 找到的数量 unsigned int value = 0,  i=0; int  bFind = 0; // 当前是否在处理数字 for (i = 0; i < strlen(str); i++) { if (str[i] >= '0' && str[i] <= '9') { if (bFind) value *= 10; value += str[i] - '0'; bFind = 1; } else if (bFind){ // 遇到非字符，输出数字 bFind = 0; outArray[count] = value; count  ++; value = 0; } } if (bFind) { outArray[count++] = value;  // 字符串以数字结束的 } *n = count; }   int main() {     printf("Please input a string:");     char s[200];     gets(s);     int count;     unsigned int outArray[100];     pick_num(s, &count, outArray);     printf("total num:%d\n" , count);     for (int i = 0; i < count; i++)         printf("%d ", outArray[i]);     return 0; } 里面那个取地址符号有什么用呢？

引用 3 楼 黄哥Python培训 的回复:大概是这样的，太晚了，请自己参考着去修改吧 没有仔细检查。     上面的代码，应该修改为

#include <iostream> #include <string> using namespace std;  void pick_num(const char* str, int* n, unsigned int* outArray) { 	int count = 0;// 找到的数量 	unsigned int value = 0,  i=0; 	bool bFind = false; // 当前是否在处理数字 	for (i = 0; i < strlen(str); i++) { 		if (str[i] >= '0' && str[i] <= '9') { 			if (bFind) 				value *= 10; 			value += str[i] - '0'; 			bFind = true; 		} else if (bFind){ // 遇到非字符，输出数字 			bFind = false; 			outArray[count] = value; 			count  ++; 			value = 0; 		} 	} 	if (bFind) { 		outArray[count++] = value;  // 字符串以数字结束的 	} 	*n = count; }   int main() {     std::cout << "Please input a string:"; 	string s; 	getline(cin, s); 	int count; 	unsigned int outArray[100]; 	pick_num(s.c_str(), &count, outArray); 	cout << "total num:" << count << endl; 	for (int i = 0; i < count; i++)  		cout << outArray[i] << " "; 	return 0; }

大概是这样的，太晚了，请自己参考着去修改吧 没有仔细检查。

大佬可以是c语言吗？没学过c++


Question: 这有什么问题？用Dev没问题，用visual C就有问题了。

#include <stdio.h> #include <stdlib.h>  void m(int *p,int n);  int main() {     int i,x;     int *a = NULL;      printf("您需要输入数据的个数为：");     scanf("%d",&x);      //int a[x];     a = (int *)malloc(sizeof(int) * x);     if (!a) {         printf("Malloc error!\n");         return -1;     }      printf("请输入数据:");     for(i=0;i<x;i++)         scanf("%d", &a[i]);      m(a,x);      free(a);     return 0; }  void m(int *p,int n) {     int i,j,t;      printf("输入的数据为:");     for(i=0;i<n;i++)         printf("%4d",*(p+i));      printf("\n");      //for(i=1;i<n;i++)     for(i=0;i<n;i++)     {         for(j=0;j < n - 1 - i;j++)         {             if(*(p+j) > *(p+j+1))             {                 t=*(p+j);                 *(p+j)=*(p+j+1);                 *(p+j+1)=t;             }         }     }      printf("排序后的数为：");     for(i=0;i<n;i++)         printf("%4d",*(p+i));  }  供参考～

是不是有两个文件，c1.exe这名字一看感觉是你自己编译出来的，不是编译器的

c标准的问题吧  int a[x] 这里， 有的 不支持动态的x，要求必须是静态数值

VC没有装好。请搜索那个:cl.exe什么的

编译器不一样，有些函数的写法不一样，如果是编译报错，那很正常，如果是运行报错，那就有点麻烦了

vc不支持C99的动态数组语法。


Question: 这有问题吗？

有什么问题，编译会有提示信息，运行输入输出，结果怎样。问问题都喜欢这么问的吗？

关于对齐的话你第一个输出的是中文的：第二个是英文的:会出现上下两行输出没有对齐的情况

没复制到。。重新弄一下

最后一行加一个右花括号

asdsvfdb


Question: 程序中为什么会出现这种错误呢，好像和程序本身无关，主要因为打开两个文件的原因

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

引用 1 楼 自信男孩的回复:printf末尾应该用分号;，楼主是不是用冒号了。 好像是这个原因，谢谢啦

printf末尾应该用分号;，楼主是不是用冒号了。


Question: x++和++x的区别和应用

优先级和结合性综合看，另外再研究一下未定义行为。然后就OK了  建议：首先找一本可靠的书（谭的书不可靠），按书上的来，不要自己乱总结，最后去网上找标准或对标准的分析。  补充：不要说我在XXX  IDE(编译器)下面结果是这样的，所以就XXX。必须按标准来

x++  +  ++x = ？你猜不着 x++和++x都是表达式（而x是变量），就像x+1一样，表达式有功能和值两个部分，x+1的功能是将x加1，它的值是x+1 同理x++和++x的功能都是使x自增1，不同的是前者的值为x自增前的值，后者的值为x自增后的值，你可以看做这是规定，没有什么先后顺序，当然为了记住它们的值要这么理解也无所谓 连用自增和自减是不可取的，编译器不一样结果不一样，很难说到底是怎么个运算顺序，所以有些语言干脆限制自增自减只能单用

😨😨😨啊……全理解错了吗，那应该是怎么样的啊

全错  x++  +  ++x .....是未定义行为  结果没意义  你的解析也是错的

论坛是用来讨论问题的，你发帖的话最后都会被各种问题刷下去的，记笔记的话建议你写博客，手机版付费专栏那边可以写博客，博客很方便以后查看

X++ + ++X 每个编译器不同,得出的结果是不同的, 例的时候 可以用X++; ++X; 尽量不写 X++ + ++X 这样的吧


Question: C语言中不可以用scanf语句定义字符数组吗？

引用 2 楼 qq_45674693 的回复:[quote=引用 1 楼 自信男孩的回复:]楼主的描述本身就有问题呢，scanf怎么可以定义字符数组呢？它可以给字符数组赋值（通过接收标准输入的内容）。  楼主的scanf使用有问题，改成如下：  scanf("%c", &a[i]); //或 scanf("%c", a+i); 第一种&a[i]肯定不行的啊，a[i]本来就是数组，不用加引号的[/quote]自己试过再说话 基础差不是问题  大家都是从新手来的 基础差还听不进人话就奇葩了  另外 a[i]不是数组

引用 1 楼 自信男孩的回复:楼主的描述本身就有问题呢，scanf怎么可以定义字符数组呢？它可以给字符数组赋值（通过接收标准输入的内容）。  楼主的scanf使用有问题，改成如下：  scanf("%c", &a[i]); //或 scanf("%c", a+i); 第一种&a[i]肯定不行的啊，a[i]本来就是数组，不用加引号的


Question: 顺序查找｜二分查找Day-3


Question: 谁能教教我谢谢@

int fab(int n) {     if (n == 1)         return 0;     if (n == 2)         return 1;      return 4 * fab(n-1) - 5 * fab(n-2); } 可能越界～可以考虑用double或unsigned long long


Question: 谢谢。。。。。。

可以动手写写啊，这种有通项公式的用递归很容易写  int F(int n) { 	if (n == 1) 		return 0; 	else if (n == 2) 		return 1; 	return 4 * F(n - 1) - 5 * F(n - 2); }


Question: c语言输不出结果

int narcissistic(int number)//判断是否为水仙花数 {     int bit_num = 0, i, j;     int sum = 0, num[16] = {0}, tmp;      tmp = number;     i = 0;      for(;tmp > 0; tmp /= 10)     {         num[i++] = tmp % 10;         bit_num++;     }     if (bit_num <= 2)         return 0;      //printf("%d %d %d\n", num[0], num[1], num[2]);     for (i = 0; i < bit_num; i++) {         tmp = 1;         for (j = 0; j < bit_num; j++)             tmp *= num[i];         sum += tmp;     }     //printf("bit_num = %d, sum = %d\n", bit_num, sum);     if(number == sum)         return 1;      return 0; } 支持多位的水仙花数。  但是注意输入的数据不要超过int表示的最大数（正整数）。

#include <stdio.h>  int narcissistic( int number );  void PrintN( int m, int n );  int main() {     int m, n;     scanf("%d %d", &m, &n);     if ( narcissistic(m) )         printf("%d is a narcissistic number\n", m);     PrintN(m, n);     if ( narcissistic(n) )         printf("%d is a narcissistic number\n", n);     return 0; }  int narcissistic(int number)//判断是否为水仙花数 {     int i=0, j;     int a=1,b=1,c=1,d=1;     int sum,num[4] = {0}, tmp;      tmp = number;     for(;tmp>0;tmp/=10)     {         num[i] = tmp%10;         i++;     }     for(j=1;j<=i;j++)     {         a*=num[0];         b*=num[1];         c*=num[2];         d*=num[3];     }     sum=a+b+c+d;     if(number==sum)         return 1;     else         return 0; } void PrintN( int m, int n )//输出(m,n)之间的水仙花数 {     int i;     for(i=m;i<n;i++)     {         //if(narcissistic(i+1))         if(narcissistic(i))             //printf("%d\n",i+1);             printf("%d\n",i);     }     return; } 供参考～  注意number已经做计算了，最后number为0了，所以后面再与number比较已经没意义了。因此用tmp代替number做分解。  其他问题建议楼主对比代码找一下原因。

经试验发现第47行代码 for(i=m;i<n;i++) 应改为 for(i=m;i<n-1;i++) ，因为在主函数中已经有了输出最大值的情况  if ( narcissistic(n) )         printf("%d is a narcissistic number\n", n);。非常感谢

引用 2 楼 qq_45798109的回复:建议你把代码贴出来，这样比较方便别人调试 大佬，贴出来了，实在是想不通为什么不会有结果。

#include <stdio.h> int narcissistic( int number ); void PrintN( int m, int n ); int main() {     int m, n;     scanf("%d %d", &m, &n);     if ( narcissistic(m) )      printf("%d is a narcissistic number\n", m);     PrintN(m, n);     if ( narcissistic(n) )      printf("%d is a narcissistic number\n", n);     return 0; } int narcissistic(int number)//判断是否为水仙花数 {     int i=0,a=1,b=1,c=1,d=1,j,sum,num[4];     for(;number>0;number/=10)     {         num[i]=number%10;         i++;     }     for(j=1;j<=i;j++)     {         a*=num[0];         b*=num[1];         c*=num[2];         d*=num[3];     }     sum=a+b+c+d;     if(number==sum)         return 1;     else                                                        return 0; } void PrintN( int m, int n )//输出(m,n)之间的水仙花数 {        int i;     for(i=m;i<n;i++)     {         if(narcissistic(i+1))             printf("%d\n",i+1);     } return; }

建议你把代码贴出来，这样比较方便别人调试

逐步调试，从scanf的返回值开始。


Question: C语言结构体

抱歉打错了 struct stu{     int x,y; } stu a[n]; for( int i=0;i<n;++i) if(a[i].x满足条件)     输出a[i].y;

好的，谢谢，我知道了，

可以的,比如 struct a{     int x,y; }  if(a.x满足条件)     输出a.y;


Question: c语言问题

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

用两个for循环和scanf与printf函数就可以

引用 8 楼 努力升本的码畜的回复:[quote=引用 7 楼 yma16的回复:]#include<stdio.h> #define maxsize 8 int main() {     int n=-1,student[maxsize];     while(++n<maxsize)     {         printf("请输入%d号学生成绩:\n",n+1);         scanf("%d",&student[n]);     }     printf("学号\t成绩\n");     for(int i=0; i<maxsize; ++i)     {         printf("%d\t%d\n",i+1,student[i]);;     }     return 0; }//关注私信无偿解决简单问题 非常感谢，那个n＝-1改为n＝0，＋＋n改为n＋＋可以吗[/quote] 可以但是这样那样不好，数组下标是从0开始，那样改的话下标为0的就没用到会浪费内存

引用 7 楼 yma16的回复:#include<stdio.h> #define maxsize 8 int main() {     int n=-1,student[maxsize];     while(++n<maxsize)     {         printf("请输入%d号学生成绩:\n",n+1);         scanf("%d",&student[n]);     }     printf("学号\t成绩\n");     for(int i=0; i<maxsize; ++i)     {         printf("%d\t%d\n",i+1,student[i]);;     }     return 0; }//关注私信无偿解决简单问题 非常感谢，那个n＝-1改为n＝0，＋＋n改为n＋＋可以吗

关注私信帮忙解决简单问题

#include<stdio.h> int main(void) {     int n=-1,student[5];     while(++n<5)     {         printf("请输入%d号学生成绩:\n",n+1);         scanf("%d",&student[n]);     }     printf("学号\t成绩\n");     for(int i=0; i<5; ++i)     {         printf("%d\t%d\n",i+1,student[i]);;     }     return 0; }

引用 2 楼 yma16的回复:帮我点赞blink我给你参考答案 已经点赞，请讲请讲

引用 1 楼 user-4的回复:for循环就可以。 for可以实现一个一个输入吗，能具体说说吗

帮我点赞blink我给你参考答案

for循环就可以。


Question: 指针

都是空指针，不过指向的类型不一样，一个是 char， 一个是 int。

引用 6 楼 Donald_Shallwing 的回复:指针的本质都是地址，而地址都是一个整型的数，所以任何指针实际上都是只是一个整型的数； 指针的类型决定了指针所操作的那片空间的大小，而所有类型指针在运行时所占用的空间是一样的，与计算机的地址编址方式有关，与操作的变量无关。对象这种可以这样说 函数指针不是

char *p表示此时指针p操作的空间的大小是一个bytes，int *p表示此时指针p操作的空间是4个bytes的大小

在计算p+1的时候，不一样。 printf %p p+1

char*p1=NULL int*p2=NULL //首先p1、p2是两个变量。 //因为他们都是指针类型。所以他们本身占4字节（其实与环境、编译器的设置等等相关。不过这里暂时不用多虑，没有特别强调的情况下一般你就认为是32位/4字节就够了）。也就是在内存的某一处有4个字节存放p1的值（其本体）。某一处存放有p2的值（其本体）。 这里先打个比方，我把这p1、p2比喻为目录中的某两条目录 //上面说到的值是什么？是地址（因为是指针），也就是上面的两条目录写在后面的页数（比如：p1-32页。p2-86页）。让你根据页数去找到你想要的东西。 //那么char* 和int*又有什么区别呢？ char* p1是告诉你，32页开始共1页（字节）是你需要的。int*p2是告诉你86页开始共4页（字节）是你需要的 //最后废话一句。是你定义的指针类型。意味着告诉编译器。去哪里，取多少容量的数据

个人鄙见： 看到一个指针要想到：    1：指针指向的类型    2：指针的类型    3：指针指向的内存区域（指针的值）    4：指针本身所占据的内存区  仅供参考。

类型不一样，指向的内容长度不一样（p+1偏移的字节数）； 最好自己写个简单程序熟悉一下，把地址和位置偏移长度打印出来，这样更好的了解他们的区别～


Question: strlen使用

strlen(数组名)

输入5个单词，调用strlen获得每一个的长度，比较一下就行了啊


Question: 求解C语言

引用 2 楼 qq_45896193 的回复:[quote=引用 1 楼 qq_45798109的回复:]while里面其实是一个判断句true或false 但是C/C++中可以用0表示false，不是零的数都是true 那括号里的数是小数的话就是ture吗？[/quote] 对于浮点数与0的比较，建议从网上搜一下；  比如while (fabs(x) > 1e-6) //若小于1e-6则认为是0.

当然你也要精度问题，我说的不是零是对计算机读入的值来说的，比如你设一个float f=0.000000000001对计算机来说他就是0

引用 3 楼 qq_45798109的回复:对，只要不是零就行。。 哦哦，谢谢你啊。。。。。

对，只要不是零就行。。

引用 1 楼 qq_45798109的回复:while里面其实是一个判断句true或false 但是C/C++中可以用0表示false，不是零的数都是true 那括号里的数是小数的话就是ture吗？


Question: 多个for循环出现结果

第一题，完全没必要用这么多的循环去写啊，完全可以这样： #include <stdio.h>  int main(int argc, char **argv){ 	 	int total; 	int i, count = 0; 	int value[9] = {1, 10, 21, 34, 70, 100, 350, 1225, 1500}; 	 	scanf("%d", &total); 	 	for(i=8; ; i--){ 		count += total/value[i]; 		total %= value[i]; 		if(total==0) 			break; 	}   	printf("%d", count);  	return 0; }


Question: for循环问题

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

个人认为for循环是所有循环中出错率最小的，毕竟它的初始值，判断条件，还有自增或自减一开始就设置好了。只要你思路足够清晰就不会出错


Question: 初学者想要给我师傅要c语言emm

引用 3 楼 Wayward：)的回复:兄弟，这应该是一个初中生就会的题吧？！ 还是自己动手写一写吧 职高学的  没怎么懂

兄弟，这应该是一个初中生就会的题吧？！ 还是自己动手写一写吧

写报错了再问吧，直接伸手不是好习惯

看了下这5道题，都是非常非常基础的，如果你想学习c，个人建议你自己敲代码写写，如果只是应付，百度下这代码应该都能有


Question: 请问这题目 怎么编写英寸换厘米

OKKKKKKKK谢了

不写代码 任务是：       “定义程序的目标”  和         “设计程序”

你就当a是b的2.54倍写代码不就行了


Question: 大佬我想知道我写的小小编程到底错在哪了

引用 8 楼 寻开心的回复:#include<stdio.h> int main() {     double e=1,item;     int i=1,n;         printf("Input n:");         scanf("%d",&n);         while(i){             item=1;             item*=i;             i--;     }  // 你这个while放到for的外面； while结束之后item就是固定值了，再放到for里面有啥用啊          for(i=1;i<=n;i++){             e=e+1.0/item;                    } // 按照公式，item是阶乘，每次要变化的啊， 这里item被你写成了固定，那怎么可能对。 必须从while里面搬家回来         printf("e=%.4f\n",e);         return 0;  } 大佬你这回答太精辟了完美的解决了我的问题，非常感谢大佬

引用 2 楼 寻开心的回复: 上个帖子都把完整的代码都给你了呀  #include<stdio.h> int main(int n, void ** argv ) {     double e=1,item=1;     int i;     printf("Input n:");     scanf("%d",&n);          for(i=1;i<=n;i++){             e=e+1.0/item;                  printf("%lf\n", e); 			item *= i+1;               }         printf("e=%.4f\n",e);//这个输入10，输出11；         return 0;  } 大佬你的代码我试过了确实对，但是博大精深我还得花半个小时了解，现在我先把我的那个改了谢谢大佬

引用 1 楼 user-3的回复:while和for循环嵌套使用，还有你i=1，i--，那你的while循环不就只进一次了吗 大佬你说的好像很对，但是那怎么把i赋予初值让它有意义

大佬你说的好像很对，但是那怎么把i赋予初值让它有意义

怎么还没搞定啊？一个循环就可以了啊


Question: 习题求助

楼上方法不错  引用 1 楼 user-3 的回复:strcpy(str1+strlen(str1), str2);

strcpy(str1+strlen(str1), str2);


Question: 求编程结果，有人会做嘛

引用 3 楼 寻开心 的回复:第三个图 眼花 你营养跟不上  说了要节制点

引用 1 楼 proorck2019 的回复:第一个，i<=10，.   越界啦，不能有等号  第二个图，最少也要把自定义函数需要搬家到主函数前面去，或者提前声明   第三个图 眼花

第二个，   sum+a[i];

第一个，i<=10，


Question: Leetcode 085 最大矩形面积 提交时 heap buffer overflow错误

调试方法： 首先确定哪里没有错，然后逐步缩小范围，找出错误。


Question: 小弟求指教

引用 4 楼 user-2的回复:说了不行就是不行啦，if妥妥的不写，非要给自己找麻烦。 好嘞😄😄😄😄😄😄😄😄😄

说了不行就是不行啦，if妥妥的不写，非要给自己找麻烦。

引用 1 楼 user-2的回复:不行的，为啥不用if啊？ 这个switch是只能一个数字和字符当开关吗

这个switch是只能一个数字和字符当开关吗

不行的，为啥不用if啊？


Question: 关于一重循环的编程题我想知道我错在哪了

引用 3 楼 45045399的回复:while(i) { item*=i; i--}中i的值未初始化，这样会导致读出的数具有不确定性 嗦嘎，大佬牛逼，惭愧啊

引用 1 楼 寻开心的回复:你的item放到for循环外面就是固定值了啊， 本来应该是i!的 大佬你太强了，膜拜

一层循环，这样就好了         printf("Input n:");         scanf("%d",&n);          for(i=1;i<=n;i++){             e=e+1.0/item;                  item *= i+1;               }         printf("e=%.4f\n",e);//这个输入10，输出11；

你的item放到for循环外面就是固定值了啊， 本来应该是i!的


Question: PTA炮弹打蚊子，测试点2和测试点4 答案错误 帮忙看看怎么回事

你把边缘都放上蚊子看看结果，虽然定义的是二维数据，但是在分配内存时却是连续的，也就是说可以用一维来访问，当你对XY进行加1或减1时，不一定访问了数组外的内存空间，还有可能是数组内的内存空间，如果目标位置没有蚊子，不影响结果，但是目标位置有蚊子时（实际应该是打不到的），结果就错了

引用 1 楼 user-1 的回复:scanf("%d%d",&x,&y);//炮弹坐标          if(c[x][y]==1)         {             c[x][y]=0;//命中，剩余生命值为一半的情况下，直接消灭          }         else         {             c[x][y]-=2;//命中，剩余生命值-2，如果生命值满，则消灭，若没有蚊子，对应数值-2，不影响后续判断          }         c[x][y-1]-=1;         c[x][y+1]-=1;         c[x-1][y]-=1;         c[x+1][y]-=1;//对上下左右四个方向-1生命值   1、你的整个代码没有下标越界的判断，那么假定你输入的坐标不存在下标越界问题，但是对于 c[x][y-1]-=1;         c[x][y+1]-=1;         c[x-1][y]-=1;         c[x+1][y]-=1;//对上必须判断下标是否越界，如果不判断，当你输入的坐标是二维平面的边缘时，数据就会计算错误。可以了，我知道越界编译器不会警告也不会报错，但是，为什么我实际调试的时候选择了边缘的坐标后输出结果并没有出错？我起初是判断了边缘情况的，后来发现越界后输出结果也是一致的就没有判断了，直接硬解


Question: c语言main函数问题

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

引用 6 楼 盘古大大帝 的回复:0x20个字节 0x23个字节是怎么看出来的 0x0000413433323110存储的是：0x0000413433323130相减就是0x20

引用 1 楼 user-5 的回复：argv是char*数组 每个元素都是指针  第一个元素的地址 和 argv的地址一样是 0x0000413433323110 第一个元素存的数据是  是 30 31 32 33 34 41 00 00 小端模式 对应的地址是  0x0000413433323130 argv后面 0x20 个字节 就是 argv[0]  就是第三行的 31 43 00.... 字符串0结尾 后面的数据不用管  所以程序名是 0x31 0x43 0x00表示的字符串 1C 备注 要大写   后面的以此类推  第一个参数存的指针是 0x00413433323133 是argv后面0x23个字节 从第一行的 30 31 32.... 开始数 数到 0x23 是第三行的第四个数字30 00... 0结尾 后面不用管  第一个参数字符串数据的是 30 00 就是0  后面就不继续说了0x20个字节 0x23个字节是怎么看出来的

首先64位系统的指针是8字节的，所以每个地址可存储8字节的数据。 argv的第一个参数为程序名，从地址上看应该是小端存储的方式，argv[0]应该是"01234A"，也就是程序名字。 argv[1]是"31234A" argv[2]是"51234A" 第二行的后8字节全是\0，说明没有参数，那么参数到此处就不传了。

是滴哦，我搞错了。

那个不是标识符啊， 是编译出来的执行文件名字

标识符不是不能以数字开头吗？ 1C岂不不合法？ ......


Question: 用C语言将个十位互换

引用 8 楼 wowpH的回复:。。。题目说的是用带参的宏吧。 是啊，我用了宏参啊，只是后面执行的时候有点小问题

引用 6 楼 SuperDay的回复:这样交换可能会有问题，可以定义一个语句块，用中间变量来交换 刚学c语言的我完全听不懂

引用 4 楼 这是一个正经昵称的回复:%02d 凑够6个字 谢谢我照这样弄出来了

。。。题目说的是用带参的宏吧。

引用 5 楼 壹抹尘埃的回复:[quote=引用 2 楼 qq_45904094 的回复:] [quote=引用 1 楼 壹抹尘埃的回复:] int x,a,b,c;  scanf("%d",&x);  a=x%10; //取个位  b=x/10%10; //取十位   c=x/100; //十位以上的      x = c*100+10*a+b; //交换个/十位  printf("%d\n",x);   return 0; 谢谢你啊，不过我的作业要求不是这样的[/quote] 给你个思路，剩下的就简单了。也可以这样做 int x，y；  y= (x%10)*10 + (int)(x/10); return y；[/quote] 好的，谢谢啦！！！！！！

这样交换可能会有问题，可以定义一个语句块，用中间变量来交换

引用 2 楼 qq_45904094 的回复:[quote=引用 1 楼 壹抹尘埃的回复:] int x,a,b,c;  scanf("%d",&x);  a=x%10; //取个位  b=x/10%10; //取十位   c=x/100; //十位以上的      x = c*100+10*a+b; //交换个/十位  printf("%d\n",x);   return 0; 谢谢你啊，不过我的作业要求不是这样的[/quote] 给你个思路，剩下的就简单了。也可以这样做 int x，y；  y= (x%10)*10 + (int)(x/10); return y；

%02d 凑够6个字

引用 1 楼 壹抹尘埃的回复:int x,a,b,c;  scanf("%d",&x);  a=x%10; //取个位  b=x/10%10; //取十位   c=x/100; //十位以上的      x = c*100+10*a+b; //交换个/十位  printf("%d\n",x);   return 0; 谢谢你啊，不过我的作业要求不是这样的😂


Question: C语言题目（关于单词统计）

十分感谢！


Question: C语言编程

cd4017   cd4511   数码管   按键  led

你这个问题不是更应该去电子发烧友之类的网站吗


Question: 关于PTA中的一个语法问题

引用 2 楼 SuperDay的回复:楼主，又见到你了！你没看到main函数里面已经判断了m和n了吗？ 大佬你好啊，问了个愚蠢问题，好丢脸啊

大佬你好啊，问了个愚蠢问题，好丢脸啊

引用 1 楼 user-2的回复:(m,n)是开区间 [m,n]是闭区间 这是高数的内容 3、因为恰好m和n不是水仙花数 哎呀我三天前看出来了挖坟又忘了，好丢脸，多谢大佬指点

楼主，又见到你了！你没看到main函数里面已经判断了m和n了吗？


Question: 求问鸭

参考文档： https://blog.csdn.net/Donald_Shallwing/article/details/99734501

不建议这么提问题，你这不是提问而是求人代写～

问啥问题咯 ，“朋友们你们觉得这个题目怎么样？简单的话要不顺便帮我做了，还要注释的那种”。


Question: 输出结果求解释

switch没有break，第一次case0之后执行了两条语句（case0，case1）

switch中没有break，因此当如输入0时都会执行～


Question: 救救孩子吧

斐波那契数列： 项：0  1  2  3  4  5  6 值：0  1  1  2  3  5  8  找规律会找吧

for循环中有个n，肯定是参数啊，填在1 2的地方肯定是填斐波那契数列的通项公式


Question: C语言void函数中的return

佩服你的钻研精神，最后一行后，函数就结束了，当然不用写return; 中间写return , 是为了不执行后面的代码。

刚才看了个贴，说的是xcode没return编译报错

只能写return，后面不能写返回值？？？？？

不论是void还是int都可以写return,根据实际情况吧。只不过void的函数里，return；后面不跟数据

return就是用来返回值的，void无返回值所以不用最后写return，其他如int，总得返回个int类型的值，不然就和函数定义不符了，所以才加return int。


Question: 万恶的vscode

markdown神器现在瘸了一条腿

有用这么高级的东西，我只会用VS

手动置顶

引用 5 楼 user-2 的回复:之前用的那个markdown all in one感觉有的显示不是很好  显示用另外的插件，自带的显示令人难受

之前用的那个markdown all in one感觉有的显示不是很好

这个markdown很好用吗？我来下载试试


Question: switch怎么写范围判断

没听说，写程序不要怕麻烦，怕麻烦可以去当领导，不用写程序

引用 3 楼 SuperDay的回复:没听说，没必要，少折腾 我觉着用if判断范围太麻烦了 switch不能范围判断吗

引用 1 楼 SuperDay的回复:最新的C++标准吗？编译器不支持吧 case 0: case 1: case 2: case 3:     ...     break; 写的是c程序 别人说...是gcc方言

switch不支持这种范围的判断，乖乖的if else if ...吧

没有哦，C有没这种方法的，只能按部就班一个一个写出来，可以使用2楼的写法

建议这么写：  switch (i) {     case 0:     case 1:     case 2:      . . .      break; 不能用省略号，比如7~9则要：case 7: case 8: case 9:都写出来


Question: 送分儿题

这个和精度有关系吗 不是只和while括号里是否为0有关吗

引用 3 楼 寻开心的回复:给初学者的问题哎   目的就是要立即while里面的那个东西到底是什么  Quesstion1: float f = 1.3 while ( f-2 ) {      cout << "what?";    // 这一句会输出吗？ 为什么 }   Quession 2:   float f = 1.3;   int n = f-2;   while( n ) {        cout << "what?";  // 会运行不    ｝；  Quesstion 3：   float f = 1.3；   float d= f-2;   while ( d ) {         cout << "what?" // 这句会执行bu    }  根本问题就是， while语句括号里面的到底是什么 ？ Q1能运行，Q2不能运行，Q3能运行。 Q2之所以不能运行是因为n是整形变量，运算后的结果会舍去小数部分，最终结果为零。在循环条件中0即false，非0即true。 所以：Q1能运行，Q2不能运行，Q3能运行。

算了。不玩了。结贴。  本来就是想说明一下while（） 括号里面的表达式是和返回的类型做同类型下0的比较的事儿  都没兴趣参与

f-2是while判断的，对于整型数据表达是f-2若为0，则不执行若非0，则执行循环体； 对于浮点数f-2就需要自己加一些条件判断了，比如  while (fabsf(f-2) > 1e-6)  所以这个问题本身可能就存在问题～

会运行。。。。

肯定会运行吧（偷偷敲了，我卢本伟没有开挂），我把f-2改成f-1.3，以为是由于精度问题，所以才会输出，结果当我监视f-1.3的值，立马就懵了，修改成f-1.3f.等楼下解释

我觉得问题本身应该是考精度问题吧，和while没关系


Question: C语言missing ; before type怎么回事？

引用 2 楼 WQR1994的回复:return z; 好像这个z加不加括号都行

引用 3 楼 寻开心的回复:标准c里面没有max函数， c++里面有 要使用它需要在main前面增加一个 #define max(a, b) ((a)>(b) ? (a) : (b))  此外 main() {    float max(float x,float y);    // 这里在做什么呢  没有这种定义的方法  整个代码里面 ｛｝ 也没有完全匹配，貌似最后也少了几个 } 哦哦，我再弄弄，谢谢。

return z;

有没有人帮忙看看      。

------------------------------------------------ float max(float x,float y)提示错误在这一行 {float z; z=x>=y? x:y; return(z) } ------------------------------------------------  要把max变成函数是这样的： float max(float x, float y) {      return x>y ? x : y; }  按照你自己的写法，最后那一行 错不在return (z) 有没有括号，错在少分号结束。  z有没有括号都没有语法错误。 加括号是多此一举。  main里面的那句    float max（floatx, float y） 搬到main函数外面，放到#include 语句后面一行。    函数的提前声明，不能放到其他的函数体里面去


Question: c语言


Question: 结构体变量的指针作函数参数细节

不太清楚，C++中结构体不需要强调struct


Question: C语言if语句判断问题，小白求大神解答，感激不尽

不知道你的使用环境，一个可能的原因是启用了缓存。尝试加violate关键字，避免使用了未更新的缓存数据。 例如：violate ... macaddr;


Question: 超简单问题，大一初级

你不要光顾着道谢，你要记得结贴

引用 2 楼 datoulaile123的回复:第一张图，前两个循环是输入，后两个循环是输出,每三个值后换行（打印\n） 后一张图，p是指针，每次输入一个值后，p就指向下一个地址用于接收下一个数据 谢谢，我只是想道谢，，，，，，

第一个问题的话，楼主说的scanf是哪个scanf啊？有点多 第二个问题，因为新建了指针变量p使其指向数组a[N]所以默认是指向的数组第一位，p++是为了在再输入一个数字之后把指针进行后移，让其指向刚才输入的数字在数组里的后面的位置，来存放下一个输入的数字，避免出现所有的数字都输入到第一位了产生了覆盖，最后结果只有最后一个数字的问题

请参考《C++数组地址偏移》 希望能够帮到你！


Question: 大家看看我这个水仙花数的程序

a = sum % 10;  //

a = sum%100 结果是 两位数 a 错


Question: 【时间超限】c语言入门练习题，较基础，是否有人愿意帮忙优化代码

没有考虑d<=0  a1初值<0的情况

没有你想的那么复杂，程序员的目标就是把世界代码化，注释什么的都是历史的倒退，自己分析吧

引用 1 楼 qq_45798109的回复:没看明白if k<2想干嘛 我觉得可能不是时间超限的问题， 没调试，但是我觉得可能是int类型不够用吧

没看明白if k<2想干嘛 我觉得可能不是时间超限的问题，


Question: 编写一个函数，判断一个字符串是不是一个E-mail地址。输入6 个字符串，将其中是E-mail地址的输出。为啥我的程序是死循环？

这个 break 只能跳出最内层的循环，当条件满足时输出s，跳出最内层的循环并且使 j = 0 所以会一直输出；你把最内层的 for 去掉就可以了。

for(j=0;j<len;j++)    {       printf("%s",s);       break;//？break？        }       }

第二层循环的循环变量是j，第三层循环的循环变量还是j？想怎么搞？


Question: 数组

好的，谢谢各位

请参考《C++中函数的数组形参》 希望能够帮到你！

引用 2 楼 fight_all 的回复:[quote=引用 1 楼 zjq9931 的回复:] 直接用啊，你是想知道数组的大小？  int *buf_fun(char *byte_buff,int byte_num) {     int buf[512/8] = {0};     char data = 0;     for(int i = 0;i < byte_num;i++)     {         data >>= 1;         data |= 0x80;         if ((i + 1) % 8 == 0)//7 15 23 31 39         {             buf[i / 8] = data;             data = 0;         }      }     return buf;  } 比如这个函数，我传过来一个buf，然后怎么使用[/quote]  返回局部变量是未定义性为，因为函数调用结束，这个局部变量就会被释放了。  可以考虑加static修饰这个变量（数组），或者这个数组的内存从堆上（malloc/free）申请得到～

c语言里可以这样写吗

引用 4 楼 fight_all 的回复:那应该怎么使用传过来的数组呢  这样就可以  int *buf = new int[512/8];

那应该怎么使用传过来的数组呢

用不了  局部变量 函数结束就销毁  你在main里面 只拿到一个野指针

引用 1 楼 zjq9931 的回复:直接用啊，你是想知道数组的大小？  int *buf_fun(char *byte_buff,int byte_num) {     int buf[512/8] = {0};     char data = 0;     for(int i = 0;i < byte_num;i++)     {         data >>= 1;         data |= 0x80;         if ((i + 1) % 8 == 0)//7 15 23 31 39         {             buf[i / 8] = data;             data = 0;         }      }     return buf;  } 比如这个函数，我传过来一个buf，然后怎么使用

直接用啊，你是想知道数组的大小？


Question: c语言入门程序不知道错哪了

蟹蟹各位，确实是那个分号的问题这个软件没有直接指错的功能，麻烦大家啦

多一个分号；在函数定义的末尾（函数名的一行末尾）有一个分号，导致函数不被定义。我想编译器应该会给你警告， 因此警告信息也要注意下～

1、2、3楼说的都对 但是重点在这：错误提示那里请重新抓图，看不清楚。因为上面说的那些提示不是这样的。个人推断：楼主这个汉化的VC6.0配置有问题，应该是类似error spawning cl.exe这种错。解决方法：安装原版的vc6.0或者网上搜索这串英文，进行正确的路径配置。  让重新发图就是需要确认是否上述错误

函数实现那里多个分号

第二int IsPrime(int x) 后面的分号需要去掉，这个函数定义已经明确了，第一个有分号是因为预置函数，就是告诉程序编译器我会有这样一个函数，第二个没有分号是因为要再花括号里写函数内容，两个含义是不一样的，所以第二个没有分号

函数定义后面多了个分号

你是第6个说“我的代码照书上敲的”。最后被打脸的。  虽然赵老师说过“不要迷信书，此处省略若干字”，但是大多数情况下课本还是对的。 ------------------------------------------------------------------ 1、如果问题已经得到解决，请及时结贴。结贴教程。 2、如果没有解决，可继续追问。 3、只能在电脑网页上结贴，手机不能结贴。 CSDN论坛新手指南 ------------------------------------------------------------------

引用 6 楼 qq_45825415 的回复:蟹蟹各位，确实是那个分号的问题这个软件没有直接指错的功能，麻烦大家啦你看到 1 error 0 warning的那个子窗口 右边 有一个滑块 可以拉上去 就能看到详细错误提示信息了

引用 6 楼 qq_45825415 的回复:蟹蟹各位，确实是那个分号的问题这个软件没有直接指错的功能，麻烦大家啦 vc6.0？没有指错的功能？你别骗我，虽然近些年都用的vs


Question: 指针这个指针为啥有时候跳一行，有时候跳两行

已发现问题已发现问题


Question: 输入8个整数，统计一第一个元素不相同的元素有几个，为什么我不管输入什么，都显示有7个不同元素？

scanf("%d",&s[8]); 你只输入1个数字 固定存在数组后面一个元素的位置  比较的都是垃圾值


Question: C语言入门小白

一起编译的文件里存在多个main，建议楼主检查一下～

还有可能是你建项目了，然后一个项目里包含了两个main函数

dev报这个错误好像是因为你之前的命令行窗口没关闭

真的是这样谢谢谢谢！


Question: 为什么我写的代码不对？求解答

不能把程序好好改改吗？好好看看书

引用 1 楼 user-1的回复:没有派这种变量名，好好看一下书上怎么写。输入格式乱七八糟的，整数运算4/3结果是1也不对，要改成浮点数 这样还是不对，为啥？

引用 1 楼 user-1的回复:没有派这种变量名，好好看一下书上怎么写。输入格式乱七八糟的，整数运算4/3结果是1也不对，要改成浮点数 #include<stdio.h> #define PI 3.141592 int main() {int h=3; float r=1.5,c=2πr,s1=πr*r,s2=4πr*r,v1=4/3πr*r,v2=s1*h; scanf("c=%f,s1=%f,s2=%f,v1=%f,v2=%f",&c,&s1,&s2,&v1,&v2); printf("%.2f",c,s1,s2,v1,v2); return 0;  }


Question: 求教，这个转置矩阵的代码哪错了？为什么会出现这种情况？

b数组的列数应该是m个，不是n个吧～

引用 5 楼 user-2 的回复：删不了（其实可以删）的话，就结贴给分好的，不过手机端好像不能结贴，我回去就结贴

删不了（其实可以删）的话，就结贴给分

引用 2 楼 user-2 的回复：不要重复发帖，麻烦删一个。emmm好像删不了贴?

引用 2 楼 user-2 的回复：不要重复发帖，麻烦删一个。好的👌谢谢

不要重复发帖，麻烦删一个。

检查一下输出数组b的循环条件


Question: 求教，这个转置矩阵的代码哪错了？为什么会出现这种情况？

直接i,j调换位置输出就好了呀，不需要设数组b的

输出时候循环条件写错了一个m一个n，你写了两个n


Question: 小白求大神相助

可以在最后return，这是对n出现负数的情况 或者把n改成无符号整数，然后最后一个if(n > 1)去掉

引用 1 楼 user-1 的回复：有可能出现没有return的情况，严格一点的编译器不支持我需要怎么改进

有可能出现没有return的情况，严格一点的编译器不支持


Question: 宿舍分配问题不知道问题出在哪里

scanf_s("%c", &s, 1); 如果要用%c格式输入，需要加一个参数即第三参数；  建议楼主确认一下输入的格式，另外，根据提示（第一个printf）可知，需要输入的不止一个参数值～

int型用%d格式符

你的s是int型的，用了%c输入接收


Question: C语言新手，如何用C语言输入一组数，然后按规则一：所有的偶数排在奇数前面。 规则二：在规则一的前提下按照从大到小的顺序排序

#include<stdio.h> #include <stdlib.h> #include <time.h>  #define MAX_SIZE    128  int g_key;  void init_arr(int *arr, int len); void print_arr(int *arr, int len); void bubble_sort(int *arr, int len); void swap_odd_even(int *arr, int len); int main() {     /*     int i,j,h,m,k,n,t,a[100],b[100];     k=0;     scanf("%d",&n);     m=n-1;     for(i=0;i<n;i++)     {         scanf("%d",&a[i]);     }     for(j=0;j<n;j++)     {         if(a[j]%2==0)         {             b[k]=a[j];             k++;         }         if(a[j]%2==1)         {             b[m]=a[j];             m--;         }     }     for(i=0;i<n;i++)         printf("%d ",b[i]);     */     int arr[MAX_SIZE], n;      scanf("%d", &n);     if (n > MAX_SIZE)         n = MAX_SIZE;      init_arr(arr, n);     print_arr(arr, n);  #if 0     bubble_sort(arr, n);     printf("After sort: ");     print_arr(arr, n);     swap_odd_even(arr, n);     printf("After swap: ");     print_arr(arr, n); #endif     printf("After swap: \n");     swap_odd_even(arr, n);     print_arr(arr, n);      bubble_sort(arr, g_key);     printf("After sort: \n");     print_arr(arr, n);      bubble_sort(arr+g_key, n - g_key);     printf("After sort: \n");     print_arr(arr, n);     return 0; }  void init_arr(int *arr, int len) {     int i;      srand(time(NULL));     for (i = 0; i < len; i++) {         //scanf("%d", &arr[i]);         arr[i] = rand() % 100;     } }   void print_arr(int *arr, int len) {     int i;      for (i = 0; i < len; i++) {         printf("%d\t", arr[i]);         if ((i + 1) % 10 == 0)             printf("\n");     }     putchar(10); }  void swap_odd_even(int *arr, int len) {     int tmp;     int start, end, i;      start = 0;     end = len - 1;      while (start < end) {         while (start < len && arr[start] % 2 == 0)             start++;         while (end >= 0 && arr[end] % 2)             end--;          if (start < end) {             tmp = arr[start];             arr[start] = arr[end];             arr[end]  = tmp;         }     }     g_key = start;     printf("g_key = %d\n", g_key); }  void bubble_sort(int *arr, int len) {     int i, j;     int tmp;      for (i = 0; i < len -1; i++)         for (j = 0; j < len - 1 - i; j++)             if (arr[j] < arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } }   供参考～  逻辑就是:先swap奇数和偶数，然后分别对奇数和偶数排序。用了一个全局变量用于保存偶数和奇数的分界点 排序是普通的冒泡排序。swap算法详见代码～

你不是实现了功能1吗，功能2的话，选择个排序方法再进行排序就行了啊，从下标0到k-1，k到n-1两次排序后输出


Question: 哥哥们，来救救我，好么@求这个数列的和，调试不行了。

引用 2 楼 自信男孩的回复:s=s+1.0/sum; 改成这样试试。因为1和sum都是整型，所以除法运算是按照整型来算的。 把1改成1.0，那么1.0/sum就按照浮点数除法来计算了。 谢谢啦好嘞，我刚刚又想到怎么改了

引用 3 楼 SuperDay的回复:s = ap(s); 返回值需要保存 是的，我刚刚也发现了。谢谢啦

s = ap(s); 返回值需要保存

s=s+1/sum;  sum最好时double或者float类型


Question: 大神们帮忙看看，一直过不了，说答案错误

引用 10 楼 wowpH的回复:B/m会取整的，建议变形为乘法 但我后面取余数了啊……

B/m会取整的，建议变形为乘法

用long 没关系吧

或者说你应该用int，而不是long int型？然后输入输出都用%d？可不影响功能啊。

引用 6 楼 beishang_1 的回复:不知道，我也觉得没问题 那就可以进行怼人的行为了

不知道，我也觉得没问题

引用 4 楼 beishang_1 的回复:哈哈哈，这是我们学校去年的竞赛题 看代码逻辑没问题啊

哈哈哈，这是我们学校去年的竞赛题

引用 2 楼 beishang_1 的回复:就是要输出n把钥匙的最少钱 我以为是搞笑图片，都没注意看

就是要输出n把钥匙的最少钱

能运行，说说你要实现的功能


Question: 数据结构二叉排序树

引用 1 楼 user-1 的回复:大致可以这样写：  class binTree{ public: 	int			key; 	binTree *lchild, *rchild; };  void nonRepeatPrint(binTree *t, int key){ 	 	if(t){ 		binTree(t->lchild, key); 		if(key != t->key){ 			cout << t->key << " "; 			t->key = key; 		} 		binTree(t->rchild, key); 	} }    传入的binTree *root这个参数，是一个二叉排序树的根节点的地址

不过有个问题： 你这个序列最小或者最大的值是多少？ 必须要确定这个问题，因为，这涉及key传参时初值的选择问题


Question: c++,求大佬指点

引用 2 楼 user-1 的回复:#include<math.h> #include<stdio.h>      //从键盘上输入三角形的三个边长，求三角形的面积。  int main() { 	double a, b, c, area;  	printf("请输入a,b,c的值"); 	scanf("%lf,%lf,%lf", &a, &b, &c); 	double s = (a + b + c) / 2; 	area = sqrt(s*(s - a)*(s - b)*(s - c)); 	printf("ar=%f\n", area); 	return 0; } s没定义，sqrt函数调用怎么能用[]，明显要用(),而且相乘中间要加*  引用 2 楼 user-1 的回复:#include<math.h> #include<stdio.h>      //从键盘上输入三角形的三个边长，求三角形的面积。  int main() { 	double a, b, c, area;  	printf("请输入a,b,c的值"); 	scanf("%lf,%lf,%lf", &a, &b, &c); 	double s = (a + b + c) / 2; 	area = sqrt(s*(s - a)*(s - b)*(s - c)); 	printf("ar=%f\n", area); 	return 0; } s没定义，sqrt函数调用怎么能用[]，明显要用(),而且相乘中间要加* 谢谢


Question: 数据结构中seqlist 和sqlist的区别

分别是静态分配的顺序表和动态分配的顺序表。

建议贴代码吧～

问题太模糊，无法回答。 再说详细点。


Question: 输入n和n个正整数，要求将该数组各元素按从小到大排序。同时如果数组元素数值在A到Z的ASCII之间，替换为对应字母。

/**  * @file    demo.c  * @brief     */  #include <stdio.h> #include <stdlib.h>  static int compint(const void *p1, const void *p2) {     const int *v1, *v2;      v1 = (const int *)p1;     v2 = (const int *)p2;     return *v1 - *v2; }  int main(void) {     int i, n, *c;      scanf("%d", &n);     c = malloc(sizeof(int) * n);      for (i = 0; i < n; i++)         scanf("%d", &c[i]);     qsort(c, n, sizeof(int), compint);     for (i = 0; i < n; i++) {         if (c[i] >= 'A' && c[i] <= 'Z')             putchar(c[i]);         else             printf("%d", c[i]);         if (i < n - 1)             putchar(' ');     }     putchar('\n');      free(c);      return 0; }  $ cat demo.txt 32 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ./demo < demo.txt 64 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 91 92 93 94 95

排序的话，应该自己能实现，字打错了

你的功能应该是int a = 65;char c = a;这样实现，当然判断下a的大小是不是在字母的ASCII之间就行了，至于排序的话，这个应该之间能实现吧


Question: 去掉字符串中元音字母

引用 10 楼 wowpH 的回复:[quote=引用 9 楼 江中命 的回复:] 找到问题啦（谢谢了（又及保密其实是空字符串 不是吧。。。空字符串我用你的代码测试过了，两个代码结果一样啊。。。。my god[/quote]我原来的代码没有写string[k]='\0'吧可能？所以输入空字符的话就输出\n？（憨憨瞎猜（结果应该不一样吧（可惜保密看不到我的输出答案是什么（打算下节课去问老师啦

习惯了用fgets代替scanf  #include <stdio.h>  int iscrlf(int c) {     return ('\n' == c || '\r' == c); }  int isvowel(int c) {     return         ('a' == c || 'e' == c || 'i' == c || 'o' == c || 'u' == c       || 'A' == c || 'E' == c || 'I' == c || 'O' == c || 'U' == c); }  #define LINE_SIZE   80 int main(int argc, char *argv[]) {     int  i, j, n;     int  c;     char line[LINE_SIZE + 1];      fgets(line, sizeof(line), stdin);     n = atoi(line);     for (i = 0; i < n; i++) {         fgets(line, sizeof(line), stdin);         for (j = 0; line[j] != '\0'; j++) {             c = line[j];             if (iscrlf(c))                 break;             if (!isvowel(c))                 putc(c, stdout);         }         printf("\n");     }      return 0; }

看不出来。但是建议遵循“单一变量原则”，一个一个对比，应该能找出来。

引用 9 楼 江中命 的回复:找到问题啦（谢谢了（又及保密其实是空字符串 不是吧。。。空字符串我用你的代码测试过了，两个代码结果一样啊。。。。my god

找到问题啦（谢谢了（又及保密其实是空字符串

getchar是接收输入缓存里的'\n'，而这个'\n'是上次输入留下的。

你输入n结束的时候是不是要按一下回车，如果你不用getchar接受，这个回车仍然在缓冲区中，然后就输入到你的字符串里了

在windows系统下getchar和scanf读到回车键时，就结束函数了，不过回车键有两个字符\r\n，scanf只读取了\r，所以缓冲区留下了\n，用getchar把这个\n给读取掉，以免影响后续的输入

again一个问题 我换了个思路编写（这个突然就通过了保密用例emmmm所以上面那个程序到底哪里错了 想问一下gets(string)这一行为什么不能写成scanf("%[^\n]",string) #include <stdio.h> int main() { int n,i,j,k;   char string[100];   scanf("%d%*c",&n);   for(i=1; i<=n; i++)   {      gets(string);     for(j=k=0; string[j]; j++)       if(string[j]!='A'&&string[j]!='E'&&string[j]!='I'&&string[j]!='O'&&string[j]!='U'&&string[j]!='a'&&string[j]!='e'&&string[j]!='i'&&string[j]!='o'&&string[j]!='u')         string[k++]=string[j];     string[k]='\0';     puts(string);   }  return 0;  }

欸那既然Windows回车是\r\n那为什么printf只要写\n就行（明白getchar啦蟹蟹！

准确说来还有一个问题（我通不过保密用例emmmm


Question: 读者写者问题    读者优先    为啥我的线程创建不成功

参考文档： https://blog.csdn.net/user-1/article/details/99679317


Question: 求一个程序

#include <stdio.h> #include <stdlib.h> #include <string.h>  #define MAX_NUM_LEN 2048  int cal_factorial(unsigned char *num_list, int num_size, int n);  int cal_val(unsigned char *num_list, int num_size, int base, int num) {     int i = 0, j;     int len = 1, tmp, carry_bit;      num_list[1] = 1;      while (i < num) {         carry_bit = 0;         for (j = 1; j <= len; j++) {             tmp = num_list[j] * base + carry_bit;             num_list[j] = tmp % 10;             carry_bit = tmp / 10;             if (j >= len && carry_bit != 0)                 len++;             if (num_size-1 < len) {/* overflow */                 printf("Overflow!\n");                 return num_size-1;             }         }         i++;     }      return len; }   int main(void) {     unsigned char num_list[MAX_NUM_LEN];     int num_len, i;     int base, power;      memset(num_list, 0, sizeof(num_list));     printf("Please input two numbers: ");     scanf("%d%d", &base, &power);      if (base < 0 && power % 2)         num_list[0] = 1; /* negative number */     else         num_list[0] = 0;     base = abs(base);      num_len = cal_val(num_list, MAX_NUM_LEN, base, power);     printf("len = %d\n", num_len);     if (num_list[0])         putchar('-');     for (i = num_len; i >= 1; i--)         printf("%d", num_list[i]);     printf("\n");     return 0; }   int cal_factorial(unsigned char *num_list, int num_size, int n) {     int carry_bit, i, j, len = 1;     int tmp;      num_list[1] = 1;     for (i = 2; i <= n; i++)     {         carry_bit = 0;         for (j = 1; j <= len; j++) {             tmp = num_list[j] * i + carry_bit;             num_list[j] = tmp % 10;             carry_bit = tmp / 10;             if (j >= len && carry_bit != 0)                 len++;             if (num_size -1 < len) { /* overflow */                 printf("Overflow!\n");                 return num_size-1;             }         }      }      /*     for (i = len; i >= 1; i--)//逆序输出数组就是结果         printf("%d", a[i]);     printf("\n");     */     return len; } 供参考～

引用 1 楼 user-2的回复:你可以百度一下，不乏一些好的代码 百度过了，没有百度到啊

你可以百度一下，不乏一些好的代码


Question: 求大神帮助

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

不仅仅是scanf，像sprintf，memcpy这些函数都会认为是不安全的，所以引入了sprintf_s，memcpy_s这样的函数，当然你可以选择忽略这个不安全的错误，在代码里加上#pragma warning(disable:4996)过滤掉这个错误也是一种方法

引用 3 楼 Italink的回复:[quote=引用 2 楼 Dearliao 的回复:] [quote=引用 1 楼 自信男孩的回复:]使用scanf_s代替scanf就好了～VS2017不支持scanf，而是用安全函数scanf_s scanf在VS2017是被认为不安全的嘛？[/quote] 对，比如使用scanf输入一个“123456”到char[2]，scanf会越界覆盖。所以使用scanf_s代替，有一个长度控制参数，另外也可以将VS的SDL检查关了，就可以用scanf[/quote] 谢谢大神的帮助，我去操作一下

引用 2 楼 Dearliao 的回复:[quote=引用 1 楼 自信男孩的回复:]使用scanf_s代替scanf就好了～VS2017不支持scanf，而是用安全函数scanf_s scanf在VS2017是被认为不安全的嘛？[/quote] 对，比如使用scanf输入一个“123456”到char[2]，scanf会越界覆盖。所以使用scanf_s代替，有一个长度控制参数，另外也可以将VS的SDL检查关了，就可以用scanf

引用 1 楼 自信男孩的回复:使用scanf_s代替scanf就好了～VS2017不支持scanf，而是用安全函数scanf_s scanf在VS2017是被认为不安全的嘛？


Question: C程序设计编程


Question: c语言练习题，较基础，是否有人愿意帮忙看一看？感谢。

会不会在一个空行中有空格。

引用 1 楼 user-3的回复: #include<stdio.h> int main() { 	while (getchar() != EOF)		//读取# 	{ 		getchar();					//读取\n 		int count; 		char ch,pre=' '; 		count = 0; 		for (; (ch = getchar()) != '#';) { 			if (ch == '\n' && pre != '\n')		//当前字符为\n且上一个字符不为\n 				count++; 			pre = ch;				//上一个字符 		} 		getchar();					//读取末尾的'\n' 		printf("%d\n", count); 	} 	return 0; }  您好！我试了一下您的代码，还是答案错误，还能麻烦您看看哪儿有问题吗？

引用 3 楼 自信男孩的回复:#include <stdio.h> #include <string.h>  int main() {     char buf[128];     int start = 0, cnt = 0;      while (fgets(buf, 128, stdin)) {         if (strncmp(buf, "#", 1) == 0) {             start++;             if (start >= 2) {                 printf("%d\n", cnt);                 cnt = 0;                 start = 0;             }         } else {             if (start <= 0)                 continue;             if (strlen(buf) > 1)    //至少一个'\n'，因此除了'\n'还需要其他字符才符合                 cnt++;         }     }     /*     while (getchar() != EOF)        //读取#     {         getchar();                    //读取\n         int count;         char ch,pre=' ';         count = 0;         for (; (ch = getchar()) != '#';) {             if (ch == '\n' && pre != '\n')        //当前字符为\n且上一个字符不为\n                 count++;             pre = ch;                //上一个字符         }         getchar();                    //读取末尾的'\n'         printf("%d\n", count);     }     */     return 0; }  供参考～ 试一下这个能不能通过； 您好，我试了一下，结果还是显示答案错误，不过还是谢谢您！


Question: 串口数据解析


Question: 各位我的这段程序问题出在哪儿？

引用 1 楼 user-1的回复:发代码别发截图哦 代码发在2楼了。 还有我还没学到指针，改代码的话最好不要用指针的知识

引用 1 楼 user-1的回复:发代码别发截图哦 报错是：非法的内存访问，数组越界，指针漂移

好的   #include<stdio.h> int main(){       int i=0;int g,h,j,k,l,m;int x[10000];int z=0;int y=0,t=0;int count=1; 	 int a,b,c,d,e,f; 	    	  scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f); 	  for(g=0;g<=a;g++) 		  for(h=0;h<=b;h++) 			  for(j=0;j<=c;j++) 				  for(k=0;k<=d;k++) 					  for(l=0;l<=e;l++) 						  for(m=0;m<=f;m++) 							 if((g+h+j+k+l+m)>=1) 											  				  	   							 { x[z]=g+2*h+3*j+5*k+10*l+20*m;z++; }         							 	      	for(i=0;i<z-2;i++) 		{    for(y=0;y<z-2-i;y++) 			{     if(x[y]>=x[y+1]){ t=x[y];x[y]=x[y+1];x[y+1]=t;}}}   	for(i=0;i<z-1;i++) 	{ if(x[i]-x[i+1]!=0)     count++;    } 	printf("%d",count);}

发代码别发截图哦


Question: C语言新手问一个关于进制数转换的编程题~

自己先试着写写吧


Question: 【C语言】扑克牌程序设计，急，在线等


Question: c语言指针

引用 1 楼 Italink的回复:没有区别=.= 那就是选项有问题了

没有区别=.=

引用 6 楼 wowpH的回复:所以，问这道题的意义是什么。。。 我就想确定一下是我理解错了还是题出错了

呃，应该是要和老师去互怼

所以，问这道题的意义是什么。。。

经过我的肉眼观察，一模一样（没区别）。

引用 3 楼 自信男孩的回复:# include <stdio.h> # include <string.h> # define N 3 int main( )  {     char str[N][81], *sp;     int i;     for(i=0; i<N; i++)         gets(str[i]);     sp= str[0];//第一个空     for(i=1;i<N;i++)         if(strlen(sp) <  strlen(str[i])) {             sp= str[i];//第二个空             //printf("%o  %o",str[i],&str[i][0]);//测试用的         }     printf("sp %d, %s\n" ,strlen(sp),sp);      return(0); }  供参考～ 兄弟  你是没看明白我问得问题啊  我是问a和b有啥区别


Question: 为什么我用while和do while得出来的结果不一样，求大神指教

因为你while(p!=NULL);后面多了个; while() { }

引用 2 楼 自信男孩的回复:do ... while会先执行循环体在判断，而while是相反的。  楼主的问题不是这个，而是代码写时的失误，while结尾多一个分号～ 感谢，已经解决了，自己还是太马虎了

引用 1 楼 user-2的回复:因为你while(p!=NULL);后面多了个; while() { } 感谢感谢，已经解决了，自己还是太马虎了


Question: 递归

在hanoi函数的第一行加一句 printf("m=%d  a=%c b=%c c=%c\n", m, a, b, c); 把输入的所有参数都打印出来看看  然后看输出的结果啊，就知道怎么移动的了

引用 1 楼 寻开心的回复:两个办法 第一个办法       自己拿几个纸杯，一个摞一个，人工模拟过程 第二个办法        多写几个printf函数，把每一步移动时候abc上面各自有几个输出出来就看到了  建议第一个方法， 起码先明白方法啊，有了方法才可以去编码；  倒过来从编码看反方，那个更累，就好比看别人的代码找错一样 刚学这个调用，看着看着就不知道调到哪了吧

引用 1 楼 寻开心的回复:两个办法 第一个办法       自己拿几个纸杯，一个摞一个，人工模拟过程 第二个办法        多写几个printf函数，把每一步移动时候abc上面各自有几个输出出来就看到了  建议第一个方法， 起码先明白方法啊，有了方法才可以去编码；  倒过来从编码看反方，那个更累，就好比看别人的代码找错一样 我懂方法和思路，就是不懂这个程序的运行顺序


Question: 我们的一个C语言的作业

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

这个二维数组里面的元素保存的是每个节点上机器人可以行走的方向 解决这个问题，要做一个等大小的辅助的二维数组，类型是int类型，并把里面的数值都初始化为0.   从初始点开始，辅助数组对应数据设置为1， 也就是当前走了第一步 此后每前进一步判断一下新的位置的辅助数组是否为0， 是0表示没有来过，把辅助数组设置成当前所走的步数 如果能够走出去， 总步数自然就知道了。 如果循环，就是遇到了一个以前走过的老位置，其辅助数据值不为0. 循环到此结束

首先给出你一个思路，矩阵是二维数组，然后读取每个二维数组，首先判断可不可以从首行，尾行，首列，尾列，四个角走通，首行只能下，首列只能右依次类推，不能走通就输出不能走通，可以的话记录每一步，这样的话就可以解决第一个问题了，第二个暂时还没想明白


Question: c语言

while(scanf("%lf",&n)!= EOF); 这一句似乎多了一个分号？

你确定那个符号不是多出来本不应该存在的？？？

擦 你说的是分号吧 表示表达式结束了  后面就是新的表达式


Question: 问题

while(*p!='\0') {   if(*p>='a'&&*<='z')         small++; } 扫描一遍计数就行了


Question: 海龟图，程序运行不出来

学会调试，是每个程序员必备的技能。 例如，你可以逐渐缩小范围，锁定出错的语句。 首先，你应该确定哪里没有错误。


Question: C语言

int qiuzhishu(int m); int main() {     qiuzhishu(13);     int a, i,j;     for ( a=4; a<=2000; a=a+2)     {         if (4==a) {             printf("4 = 2 + 2\n");             continue;         };         for(i=3; i<=a/2; i=i+2 )         {             j = a - i;             if ( qiuzhishu(i) && qiuzhishu(j) ) {                 printf("%d = %d + %d\n", a, i, j);                 break;             };         };         if ( i>a/2) {             printf("\nError: %d\n", a);         }     };     return 0; }  int qiuzhishu(int m) {     int n,e;     if (3==m || 5==m || 7==m) return 1;     e = (int) sqrt(m);     for(n=2; n<=e; n++)         if(m%n==0) return 0;     return 1; }


Question: C语言练习题

#include <stdio.h> #include <stdlib.h> int PrimeNumber(int x) {     int i,k;     for(i=2;i<x;i++)     {         if(x%i==0)break;     }     if(i==x)k=1;     else k=0;     return k; } int main() {  int a,d,n,array,i,judge,j,pn;   while( scanf("%d %d %d",&a,&d,&n)!=EOF){    j=0;    for(i=0;j<n;i++)    {        array=a+i*d;        judge=PrimeNumber(array);        if(judge==1)        {             j++;             pn=array;        }    }     printf("%d",array);}     return 0; }


Question: 请问这样的题怎么做

引用 3 楼 寻开心 的回复:int main() {     int m[5][5];     int i,j;     for ( i=0;i<5; i++)         m[i][0] = m[0][i] = i+1;     for ( i=1; i<5; i++) {         for ( j=1;j<5;j++)             m[i][j] = m[i-1][j] + m[i][j-1];     };     for ( int i=0; i<5; i++) {         for ( int j=0; j<5; j++)             printf("%3d ", m[i][j]);         printf("\n");     };     return 0; };算法没什么问题  不过代码中 } 后面都写 ; 这个奇怪的习惯 影响不好

引用 1 楼 寻开心的回复:规律就是： a[m][n] = a[m-1][n] + a[m][n-1] 初始第一行和第一列为1开始的，递增序列，后面都好写啊 你好，这个用c怎么写呢？求具体过程


Question: 代码缺参数

引用 2 楼 寻开心的回复:怀疑你的CString Onldtos(long doble)是不是另外一个类的方法啊？ 不是啊，是同一个类来的

引用 1 楼 不闻窗外事的回复:你看看你有没有对这个函数的声明，是不是没有加参数 就是不知道如何去声明

你看看你有没有对这个函数的声明，是不是没有加参数


Question: while循环问题

引用 3 楼 自信男孩的回复:while判断x-2是否为0，若为0退出循环，否则其他值都是执行循环体～ 我明白了，谢谢你(*^ω^*)

引用 1 楼 朱铭德 的回复:while(x-2)在这里等价于while(x>2) 然后就很显然了吧准确的说 应该是 等价于 while(x != 2)

while判断x-2是否为0，若为0退出循环，否则其他值都是执行循环体～

因为当x=2时while返回值为假不进行循环

while(x-2)在这里等价于while(x>2) 然后就很显然了吧


Question: 小白，求助大佬，C语言二维数组

越界了。score的第 1 维下标是 [0,0] 第 2 维下标是 [0,5] float score[1][6]; 可以改为 float score[6]; ------------------------------------------------------------------ 1、如果问题已经得到解决，请及时结贴。结贴教程。 2、如果没有解决，可继续追问。 3、只能在电脑网页上结贴，手机不能结贴。 CSDN论坛新手指南 ------------------------------------------------------------------

#include<stdio.h> int main() { int a=0,b=0,c=0,d=0; char name[1][12]; float score[1][6]; char course1[20],course2[20],course3[20],course4[20],course5[20]; printf("请输入科目\n"); scanf("%s%s%s%s%s",course1,course2,course3,course4,course5); printf("学生姓名 %s %s %s %s %s 平均分.请输入学生姓名分数\n",course1,course2,course3,course4,course5); scanf("%s%f%f%f%f%f%f",&name[0][12],&score[0][1],&score[0][2],&score[0][3],&score[0][4],&score[0][5]); score[0][6]=(score[0][1]+score[0][2]+score[0][3]+score[0][4]+score[0][5])/5; printf("%f",score[0][6]); return 0; }为什么最后一个输出，输不出来，大佬们

引用 7 楼 datoulaile123的回复:用小写的%s  好了，谢谢

引用 7 楼 datoulaile123的回复:用小写的%s  我试试，谢谢，。。。

用小写的%s

写了一点 #include<stdio.h> int main() { char course1[20],course2[20],course3[20],course4[20],course5[20]; printf("请输入科目\n"); scanf"(%S%S%S%S%S",course1,course2,course3,course4,course5); printf("学生姓名%s%s%s%s%s平均分",course1,course2,course3,course4,course5); return 0; }但是输出来汉字乱码，不知道为什么

引用 4 楼 这是一个正经昵称的回复:不会直接做出来的时候学会把问题简化，从做输入一个学生，一个科目开始，然后两个学生，一个科目，然后一个学生两个科目，然后两个学生两个科目，到这里你会发现，哦~原来如此。 嗯嗯好的，我试试，谢谢

引用 2 楼 datoulaile123的回复:先自己写写看呢，写不下去了贴个代码再来问？ 嗯嗯，我试试，写写看

先自己写写看呢，写不下去了贴个代码再来问？

在线等大佬 ，谢谢大佬！


Question: 怎么也找不到错误，系统提示答案错误，求帮忙

#include<stdio.h>  int main() {     int n,x[101],i,min,t, idx;     while(scanf("%d", &n) && 0<n&&n<100)     {         for(i=0;i<n;i++)             scanf("%d", &x[i]);         min = x[0];         idx = 0;         for(i=1;i<n;i++)         {             if(x[i]<min)             {                 min=x[i];                 idx = i;             }         }         t = x[0];         x[0] = x[idx];         x[idx] = t;          for(i = 0; i < n; i++)             printf("%d ", x[i]);         putchar(10);     }     return 0; } 供参考～

实测无错误啊

#include <stdio.h>  int main(int argc, char *argv[]) {     int n;     int i, j;     int x;     int a[100];      while (scanf("%d", &n) > 0 && n > 0 && n <= 100) {         for (i = 0; i < n; i++) {             scanf("%d", &a[i]);         }          j = 0;         for (i = 1; i < n; i++) {             if (a[i] < a[j])                  j = i;         }         x = a[0];         a[0] = a[j];         a[j] = x;          for (i = 0; i < n; i++) {             printf("%d ", a[i]);         }         printf("\n");     }      return 0; }

~scanf("%d",&n),0<n&&n<100，能不能别用这么骚的操作，不怕死是吗


Question: 利用函数计算字符串的数字个数

#include<stdio.h> int f(char c[]) { int sum=0,i; for(i=0;c[i]!='\0';i++) { if(c[i]>='0'&&c[i]<='9') sum++; } return(sum); } int main() { int n,k; char str[100];//={0};，没必要  gets(str); /*scanf("%d",&k); for(int i=1;i<=k;i++) {啥意思 */ //n=f(str); printf("数字个数：%d\n",f(str)); /*printf("%d\n",&n);&这是啥意义思  }*/ return 0; }

引用 2 楼 自信男孩的回复:#include<stdio.h>  //int f(char c[100]={0}) int f(char c[100]) {     int sum=0,i;     for(i=0;c[i]!='\0';i++)     {         if(c[i]>='0'&&c[i]<='9')             sum++;     } 供参考～      return(sum); } int main() {     int n,k;     char str[100]={0};     //gets(str);     scanf("%d",&k);     getchar();     for(int i=1;i<=k;i++)     {         gets(str);         n=f(str);         //printf("%d\n",&n);         printf("%d\n", n);     }     return 0; } 谢谢你，可是改的前两处的原因是什么呢？？

引用 1 楼 不闻窗外事的回复:printf("%d\n",&n);你这打印的是啥玩意，你打印地址干啥 天呐！我绝对是傻了

printf("%d\n",&n);你这打印的是啥玩意，你打印地址干啥


Question: 求助大佬，自定义函数

maxHeight = getMax(height,N);的时候N的值就会赋给length  修改一下你的最大值和最小值代码。 int  getMin(int nums[],int length) {     int min = nums[0];      for(i = 1;i < length;i++) {          if(min > nums[i]) { min = nums[i]; }     }    return min; }

引用 2 楼 自信男孩 的回复：length是形参，谁调用谁传递实参给length。  通过main函数里，传递给length是N，M谢谢🙏

引用 2 楼 自信男孩 的回复：length是形参，谁调用谁传递实参给length。  通过main函数里，传递给length是N，M哦哦，谢谢大佬

length是入参，在函数调用的时候赋值


Question: C语言怎么做

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