Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 我看了半天也不知道我哪错了？

回复:
user: user-0
content: 引用 6 楼 xian0-666 的回复:C语言确实没有字符串变量类型，所以跟printf有什么关系？printf只是标准格式化输出，又不会改变变量的值，只是打印出来方便你看的，不管什么类型的变量，你都可以%d,%s,等等，只是有可能打印出来的值你看不懂而已，跟这个变量没有任何关系 哦，多谢指点

user: user-1
content: C语言确实没有字符串变量类型，所以跟printf有什么关系？printf只是标准格式化输出，又不会改变变量的值，只是打印出来方便你看的，不管什么类型的变量，你都可以%d,%s,等等，只是有可能打印出来的值你看不懂而已，跟这个变量没有任何关系

user: user-0
content: 引用 1 楼 自信男孩 的回复:#include "stdio.h" #include "string.h" int main() {     char a[5][81] = {'0'},temp[100] = {'0'};     int i ,j;     for( i = 0 ; i <= 4 ; i++ )         //gets(a[i]);         scanf("%s", a[i]);     for( i = 0 ; i <= 3 ; i++ )         for( j = 0 ; j <= 3-i ; j++ )             if( strcmp( a[j] , a[j+1] ) > 0 )             {                 strcpy(temp,a[j]);                 strcpy(a[j],a[j+1]);                 strcpy(a[j+1],temp);             }     printf("After sorted:\n");     for( i = 0 ; i <= 4 ; i++ )     {         printf("%s\n", a[i]);     }     return 0; } 供参考  gets是读取一行，如果按照楼主的测试用例测试，这样输入了一行，而不是5行；  scanf是以空格可以区分不同的字符串的。所以，可以改成scanf %s C语言里面不是没有字符串变量类型的吗？那第九行是不是错了？

user: user-0
content: 引用 3 楼 xian0-666 的回复:gets不能用空格隔开 骚得死奈

user: user-1
content: gets不能用空格隔开

user: user-2
content: #include "stdio.h" #include "string.h" int main() {     char a[5][81] = {'0'},temp[100] = {'0'};     int i ,j;     for( i = 0 ; i <= 4 ; i++ )         scanf("%80s",a[i]);     for( i = 0 ; i <= 3 ; i++ )         for( j = 0 ; j <= 3-i ; j++ )             if( strcmp( a[j] , a[j+1] ) > 0 )             {                 strcpy(temp,a[j]);                 strcpy(a[j],a[j+1]);                 strcpy(a[j+1],temp);             }     printf("After sorted:\n");     for( i = 0 ; i <= 4 ; i++ )     {         printf("%s\n", a[i]);     }     return 0; }

user: user-3
content: #include "stdio.h" #include "string.h" int main() {     char a[5][81] = {'0'},temp[100] = {'0'};     int i ,j;     for( i = 0 ; i <= 4 ; i++ )         //gets(a[i]);         scanf("%s", a[i]);     for( i = 0 ; i <= 3 ; i++ )         for( j = 0 ; j <= 3-i ; j++ )             if( strcmp( a[j] , a[j+1] ) > 0 )             {                 strcpy(temp,a[j]);                 strcpy(a[j],a[j+1]);                 strcpy(a[j+1],temp);             }     printf("After sorted:\n");     for( i = 0 ; i <= 4 ; i++ )     {         printf("%s\n", a[i]);     }     return 0; } 供参考  gets是读取一行，如果按照楼主的测试用例测试，这样输入了一行，而不是5行；  scanf是以空格可以区分不同的字符串的。所以，可以改成scanf %s
user-0 提问: 请问mac怎么用c写游戏，没有windows.h

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: ?

user: user-3
content: xcode 吧，毕竟原厂推荐的，oc/swift

user: user-0
content: 引用 2 楼 ctrigger的回复:用C写，直接调用系统API，简单，直接，粗暴，高效。 答非所问啊啊

user: user-4
content: 用C写，直接调用系统API，简单，直接，粗暴，高效。

user: user-5
content: 推荐使用C++Builder

user: user-0
content: 引用 5 楼 forever74 的回复：就算在Windows下，windows.h也不足以支撑游戏开发啊。写简单的贪吃蛇而已

user: user-6
content: 就算在Windows下，windows.h也不足以支撑游戏开发啊。

user: user-7
content: 可以用qt啊，windows的东西，mac上没法用 https://blog.csdn.net/libaineu2004/article/details/46234079
user-0 提问:     while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: while(~scanf())是作为读取文件时判断文件是否在某刻终止输入的一种输入模式，在自调试时Windows的ctrl+z就是输入停止符。跟输入单个字符串时空格停止和输入一行字符串时计算机模拟出来一个'\0'结束一样

user: user-3
content: ~是按位取反 scanf的返回值是输入值的个数 如果没有输入值就是返回-1 -1按位取反结果是0 while(~scanf("%d%d", &a,&b))就是当没有输入的时候退出循环

user: user-4
content: 他这个写法并不好，应该： while(scanf("%d%d", &a, &b) == 2) printf("%d\n",a+b);

user: user-5
content: #include<stdio.h> int main() {     int a,b;     while(scanf("%d%d", &a, &b) == 2)printf("%d\n",a+b);     return 0; }  scanf是返回正确输入的项目个数，比如两个%d，那么如果都输入正确返回2，正确一个，比如输入1 a，则返回1。如果两个都错误，则返回0。或者EOF，输入了EOF（LINUX ctrl + d, windows ： ctrl + z） 因此用~是不合适的。
user-0 提问: zedgraphcontrol控件中禁用横向纵向放大后，怎么设置出现橡皮筋框选呢？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: c语言中自增自减可以用于数字，还可以用于字母的自增减，还有什么呢？

回复:
user: user-1
content: 引用 14 楼 lin5161678 的回复:[quote=引用 13 楼 zd845101500 的回复:]只要本质是数值的东西都可以试试 本质这个词别随便说出口 能不能++只和值类别(是不是可修改左值) 和 表达式类型 有关系 [/quote]所以我说的是试试

user: user-2
content: 引用 13 楼 zd845101500 的回复:只要本质是数值的东西都可以试试 本质这个词别随便说出口 能不能++只和值类别(是不是可修改左值) 和 表达式类型 有关系

user: user-1
content: 只要本质是数值的东西都可以试试

user: user-3
content: 因为char在C语言里面可以当作int处理，在ASCII码里A-Z对应65-90，a-z对应97-122 你可以试试 char c = 'a' printf("%d", c)

user: user-4
content: 还有指针的自增自减，表示移动到下一个地址

user: user-5
content: 谢邀。 标准中是这样规定的：  6.5.2.4 Postfix increment and decrement operators Constraints 1 The operand of the postfix increment or decrement operator shall have atomic, qualified, or unqualified real or pointer type, and shall be a modifiable lvalue.  简单地说，操作数应当是原子的、限定或者无限定的实数或者指针类型，而且必须是可修改的左值。

user: user-6
content: 只要是整型数都是可以，数字是整型，字符也是整型（char自动提升为int类型）

user: user-7
content: iterator

user: user-8
content: 自增/自减运算符是使对象的值增加/减少 1 的一元运算符。  它们能拥有后缀形式：  expr ++		 expr --		 还有前缀形式：  ++ expr		 -- expr		  前缀和后缀自增或自减的运算数 expr 必须为整数类型（包含 _Bool 和枚举）、实浮点类型或指针类型的可修改左值。它能为 cvr 限定、无限定或为原子。

user: user-9
content: 主要用在循环里，对变量或者指针加加减减，其他地方不咋用

user: user-2
content: 引用 8 楼 github_37127447 的回复:只要你想 你把所有类都 实现个 ++操作符重载就行了看标题 C语言

user: user-10
content: 只要你想 你把所有类都 实现个 ++操作符重载就行了

user: user-2
content: 引用 5 楼 自信男孩 的回复:只要是整型数都是可以，数字是整型，字符也是整型（char自动提升为int类型）浮点类型和指针类型也可以自增 char在自增不会做类型提升 char也是整型是对的 但不是int

user: user-2
content: 标量类型都可以

user: user-11
content: 穷举法作为算法则可，作为学习方法就不妥了。 眼中所见，貌似该举的都举了。 然而一旦你转过前方拐角，眼中又是一片新的天地。  ++  -- 的操作数至少还有指针。
user-0 提问: for循环

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 少一个++!

user: user-3
content: 因为你在m还等于8的时候先在小括号里面加了一下，又在循环内部加了一下，变成了10，再判断出m不小于9，所以此时m为10

user: user-4
content: for(语句1;语句2;语句3)  语句4 执行顺序是：语句1(执行一次)，后重复循环语句2、语句4、语句3。 你只要记得语句3是最后执行的就行

user: user-5
content: 快进到m=8的时候，m=8时，满足循环条件，执行循环体内容，此时m=9，循环体语句结束后执行for循环中第三个表达式m++，此时m=10，重新进入判断，此时不满足循环条件，跳出循环 了解一下循环步骤其实很好做，一般来说 for 循环有以下步骤 ①初始化循环变量，这步仅执行一次 ②是否满足循环条件，满足执行③，不满足直接跳出循环 ③执行循环体 ④执行第三个表达式后，跳转到②

user: user-6
content: for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }

user: user-7
content: #include <stdio.h>   int main() {     int m;      for( m=0; m<9; m++ ){         m++;         printf("m = %d\n", m);     }     printf("m = %d\n", m);     return 0; } 当m=8时，满足条件，因此执行循环体（此时循环执行后m=9)，然后再执行m++(for中的），判断10 ！< 9退出循环；  需要熟悉循环的三条语句的执行过程～

user: user-8
content: for( m=0; m<9; m++ )如果只有这个for循环，那么m=8时还是成立的m++，则m=9，但是此时进行已经进入循环了，而循环内m还要++，则m=10

user: user-9
content: 没逮到得9的机会，它也很无奈。

user: user-10
content: 因为在循环体内有m++,所以m值按0 ，2 ，4，6，8变化，当到8时，8<9条件满足的，所以再执行m++,m++二次，此时再判断10<9不成立，跳出for循环。 for(表达式1;表达式2;表达式3) { 循环体 } for循环的执行顺序： （1）执行for后表达式1； （2）执行表达式2，若表达式2的值为真（或非0），则执行for内循环体，然后执行（3）；否则，则循环结束，执行（5） （3）执行表达式3 （4）返回继续执行（2） （5）循环结束，执行for语句的循环体下面的语句
user-0 提问: 在线求助  大佬帮忙看看   C语言2000以内非质数代码怎么写啊

回复:
user: user-1
content: 非质数就是判断不是质数,用个判断质数函数判断即可.

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

user: user-3
content: easy啊 const int num = 2000;  int _tmain(int argc, _TCHAR* argv[]) {	 	int i,j; 	int k; 	for( i = 1; i <= num; i ++) 	{ 		k = 0; 		for(j = 2; j < i; j ++) 		{ 			if(i % j == 0) 			{ 				k = 1; 				break; 			} 		} 		if(k == 1) 		{ 			printf("%d\t",i); 		} 	} 	return 0; }

user: user-4
content: #include <stdio.h> int Prime[14]={2,3,5,7,11,13,17,19,23,29,31,37,41,43}; int isPrime(int v) {     int i;     if (v<47) {         for (i=0;i<14;i++) if (v==Prime[i]) break;         if (i<14) return 1; else return 0;     } else {         for (i=0;i<14;i++) if (v%Prime[i]==0) break;         if (i<14) return 0; else return 1;     } } int main() {     int i,j;      j=0;     for (int i=0;i<=2000;i++) {         if (!isPrime(i)) {             if (j%8==7) printf("%d\n",i);             else         printf("%d ",i);             j++;         }     }     return 0; } //0 1 4 6 8 9 10 12 //14 15 16 18 20 21 22 24 //25 26 27 28 30 32 33 34 //35 36 38 39 40 42 44 45 //46 48 49 50 51 52 54 55 //56 57 58 60 62 63 64 65 //66 68 69 70 72 74 75 76 //77 78 80 81 82 84 85 86 //87 88 90 91 92 93 94 95 //96 98 99 100 102 104 105 106 //…… //1978 1980 1981 1982 1983 1984 1985 1986 //1988 1989 1990 1991 1992 1994 1995 1996 //1998 2000 //

user: user-5
content: 引用 1 楼 我当时害怕极了QAQ 的回复:#include<stdio.h> int fun(int m) { 	int a=0; 	int i=0; 	for(i=2;i<m;i++) 	{ 		if(m%i==0) 		{ 			a++; 		} 	} 	if(a==0) 	return 1; 	else 	return 0; } int main() { 	int i; 	for(i=2;i<=2000;i++) 	{ 		if(fun(i)==1) 		{ 			printf("%d\n",i); 		} 	} 	 	return 0; }  刚好有现成的  没看题，非质数  for(i=1;i<=2000;i++)     {         if(fun(i)==0)         {             printf("%d\n",i);         }     }

user: user-5
content: #include<stdio.h> int fun(int m) { 	int a=0; 	int i=0; 	for(i=2;i<m;i++) 	{ 		if(m%i==0) 		{ 			a++; 		} 	} 	if(a==0) 	return 1; 	else 	return 0; } int main() { 	int i; 	for(i=2;i<=2000;i++) 	{ 		if(fun(i)==1) 		{ 			printf("%d\n",i); 		} 	} 	 	return 0; }  刚好有现成的
user-0 提问: c语言学习中递归的问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 啊来晚了

user: user-3
content: 关于递归的例子，可以看看这个案例，点击这里 #include<stdio.h> int  fact(int n,int a,int b) {     if(n==1 || n==2)      return 1;      else       return (a*fact(n-1,a,b)+b*fact(n-2,a,b))%7; } int main() {     int a,b,n;     scanf("%d%d%d",&a,&b,&n);     printf("%d\n",fact(n,a,b));   return 0; }

user: user-0
content: 兄弟们我会了，谢谢大家

user: user-4
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-5
content: 第一个level4是#1打的。第二个level4是#2打印的。后面的3 2 1都是#2打印的

user: user-0
content: 想明白了谢谢大家
user-0 提问: 排序问题

回复:
user: user-0
content: 引用 5 楼 qq_41998411 的回复:希尔 ①选择和冒泡每趟必定有一个数到最终位置上的 ②如果是快速的话这里面没有一个数左边全比自己小的同时右边全比自己大 ③增量=3 试试看  嗯，知道了，谢谢大佬

user: user-1
content: 希尔 ①选择和冒泡每趟必定有一个数到最终位置上的 ②如果是快速的话这里面没有一个数左边全比自己小的同时右边全比自己大 ③增量=3 试试看

user: user-0
content: 引用 1 楼 宇来风满楼 的回复:希尔吧，排除法  一趟怎么希出来呢

user: user-2
content: 选择排序的话，应该只有收尾两个交换，现在看中间的也有交换，因此不是选择排序； 冒泡排序，是每个都交换，但是19没有到第一个位置，所以不是冒泡； 快排和希尔的排序，需要分析一下，

user: user-3
content: 希尔吧，排除法

user: user-4
content: 各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/
user-0 提问: 指向字符串的指针变量

回复:
user: user-1
content: "123453245" 这个其实是const char [字符长度]，是个字面值，不能直接用char* 去绑定，而是要用const char* 绑定。

user: user-2
content: 看老的资料,用新的工具,是要考虑一下,随意下定论不宜,知识应该是有传承的.

user: user-3
content: 编译器太古老了，换新编译器，直接编译出错。话说做视频的都不运行下程序的吗还是他们用的VC6在跑？

user: user-2
content: 其它且不论,说指针有问题,没发现,要仔细检查自己写得是否有问题.

user: user-2

user: user-4
content: 不请自来。  闲来无事，既然看到了这个话题，就来说一说。这实际上涉及字符数组、字符串和字面串这三者的关系，厘清了，自然就明白了。  首先，字面串和字符数组是C语言里的东西，而字符串则是C标准库的内容，严格来说并不是C语言的一部分。  什么是字符串？字符串是一个字符的序列，以第一个遇到的空字符终止。什么是字面串？字面串就是“字面意义上的字符串”，是我们写在程序中的、用来代表字符串的文本，毕竟它还需要由编译器来识别并生成字符串，所以才叫“字面串”，比如 "xyz"。相反，字符串是位于可执行程序或者内存里的字符序列，而且以第一个遇到的空字符终止。那么，什么是字符数组呢？它首先是一个数组。然后，它的元素类型是char、wchar_t、char16_t或者char32_t。  可以肯定，字符串也是字符数组，这很好理解。但是反过来，字符数组并不一定是字符串，因为字符数组中未必包含空字符 ，这样它就无法形成一个字符串。  要构造一个字符数组，方法有很多。典型地，字面串就可以自动生成字符数组。按规定，在程序翻译期间，字面串用于生成一个具有静态存储期的字符数组，而且自动添加一个空字符。这样一个数组是没有名字的，C语言只规定了这个数组的生存期是静态的，也就是，从程序启动时就存在，程序结束时才销毁，但并没有说别的。C语言只是保证，根据字面串的书写形式，它的元素类型可以是 char、wchar_t、char16_t或者char32_t。所以，认为 "xyz" 是 const char 类型的数组，是错误的。  用字面串生成的静态数组位于哪里呢？不一定，这取决于系统架构。在有些简单的机器上，不存在内存保护机制，也没有分页机制，比如运行在 8086 处理器上的MS-DOS系统。在这种机器上，用字面串生成的静态数组当然是可读可写的。但是在现代的很多机器上，内存有保护机制，也引入了分页，可执行映像比以前更复杂，用字面串生成的静态数组可能被安排在只读的内存区域，这就不可写了。  标准化之后的C语言考虑了这些因素，因此规定，如果程序企图去修改这样一个（从字面串生成的）数组，这种行为是未定义的。对于我们来说，不要强调你所认识的机器架构，也不要拿你的汇编知识来加强这种认识，更不要武断地说这个字符数组一定是不可写入的，毕竟这是C语言。  用字面串可以生成字符串，但这两者不见得是等价的，因为一个字面串可以生成多个字符串。比如对于字面串 "abc\0xyz\0"，这个字面串生成了一个静态数组，而这个数组包含了三个字符串：字符串abc、xyz，以及最后的空串 \0 （这最后一个\0是在生成字符数组时自动添加的）。最后，我们用一个例子来结束这次探讨。  # include <stdio.h>  int main (void) {     char a [] = "abc\0xyz\0";     char * p = "he\0she\0";      printf (p);     printf (p + 3);     printf (p + 7); } 在第一个声明中，字面串 "abc\0xyz\0" 用于在程序翻译期间生成一个具有静态存储期的匿名数组，并用这个数组的内容初始化数组 a ；在第二个声明中，字面串 "he\0she\0" 用于在程序翻译期间生成一个具有静态存储期的匿名数组。作为变量 p 的初始化器（Initializer），数组类型的表达式自动转换为指向数组首元素的指针，并用于初始化变量 p 。  然后，在变量 p 指向的地方（它指向数组的首元素），依次有三个字符串。这三个 printf 依次打印这些字符串。最后打印的是空串，所以什么内容也没有。

user: user-5
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

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

user: user-0
content: 引用 3 楼 自信男孩的回复:strcpy(p+3, s+9);这句会出现段错误，因为p指向的字符串是只读的，而这句会对它写； 其他的输出语句都没问题，因为都不会对p指向的字符串进行写操作；  要想让这句strcpy(p+3, s+9)执行没问题，需要对p定义成字符数组。不过需要注意额是由于有copy和strcat，建议把字符数组的长度定义更长一些， 防止越界。 明白了明白了 谢谢

user: user-7
content: strcpy(p+3, s+9);这句会出现段错误，因为p指向的字符串是只读的，而这句会对它写； 其他的输出语句都没问题，因为都不会对p指向的字符串进行写操作；  要想让这句strcpy(p+3, s+9)执行没问题，需要对p定义成字符数组。不过需要注意额是由于有copy和strcat，建议把字符数组的长度定义更长一些， 防止越界。

user: user-8
content: 是的，可以说老师讲的不对。 按照原文，strcpy那行企图修改字符串字面量的行为是未定义行为。

user: user-0
content: 我改成了char p［20］="1234567"；才对 上面文字说明打错了。在这里更正一下
user-0 提问: 在线求助，用C语言做界面

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 百度一下GTK，或许适合。。

user: user-3
content: 使用easyx库
user-0 提问: 在采用补码运算的32位机器上，求值

回复:
user: user-1
content: 另外，2147483648似乎没什么机会“正好是0”。

user: user-1
content: 右边一样被提升为unsigned 而32位unsigned int的最大值是4294967295

user: user-2
content: 补码没有负0.你理解错了

user: user-0
content: 并没有限定int类型，我觉得这样有争议，如果是int类型，在2个操作数中，其中1个为无符号，那么会隐式转为无符号数计算，但是-2147483647-1U值为2147483648，整形最大值2147483647，那么2147483648不正好是INT类型的0吗？0<2147483647的答案为真，如果不是INT类型呢，又何解？

user: user-1
content: 类型提升规则，int和unsigned int混合运算之前，都提升为unsigned int

user: user-3
content: #include <stdio.h> int main() {     if (-2147483647-1U < 2147483647) printf("Yes\n");     else printf("No\n");     return 0; } //No //

user: user-2
content: ？
user-0 提问: c 如何将一个string里二进制的数字变成对应的ASCII

回复:
user: user-1
content: //比如我有一个char str[]="01001000011001010110110001101100011011110"; // 和                char word[1000] // 用于储存2进制的数字 //如何分别将str的 01001000 01100101 01101100 01101100 01101111 0 分别存入 word[0], word[1], word[2], word[3], 和 word[4]. 然后printf("%s",word)的时候可以直接打出"Hello". // //ASCII: //01001000 --> H //01100101 --> e //01101100 --> l //01101100 --> l //01101111 --> o // #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {     char str[]="0100100001100101011011000110110001101111";     char word[1000];     char bs[9];     char *s;     char *e;     s=str;     for (int i=0;i<5;i++) {         sprintf(bs,"%.8s",s+8*i);         word[i]=(char)strtol(bs,&e,2);     }     word[5]=0;     printf("%s",word);//Hello     return 0; }

user: user-2
content: const char* p = "0100100001100101011011000110110001101111";     char* dest = new char[strlen(p) / 8+1]{0};     for (int i = 0; i < strlen(p); i += 8) {         char strbyte[9]{ 0 };         memcpy(strbyte, p+i, sizeof(char)*8);         dest[i / 8] = strtol(strbyte, 0, 2);            }

user: user-3
content: 不小心多敲了一个l，毕竟我等看见你的Hello，手里就去敲world了

user: user-3
content: char word[1000]={0}; int i,j; for(i=0;i<strlen(str)/8;i++) for(j=0;j<8;j++) { world[i]|=(str[8*i+j]-'0')<<(7-j); }  大约就酱紫。
user-0 提问: c#双击设计器生成的代码怎么删除

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 智者知已应修善业的回复:通常编程软件都有后退按钮后退一下即可 zedgraphcontrol坐标系里怎么获取鼠标坐标？利用mousedown事件鼠标左键获取的是zedgraph的控件坐标，而不是我自定义的坐标系，鼠标在控件中的坐标请问怎么转换到自定义坐标系里？

user: user-2
content: 通常编程软件都有后退按钮后退一下即可
user-0 提问: 请看下列程序，有关i++什么时候执行？请教大神，详解。

回复:
user: user-1
content: 这句：引用for(k=0;k<2*i-1;k++)有问题的，应该是 for(k=0;k<2*i+1;k++)

user: user-1
content: 修改如下，供参考：#include<stdio.h>  main() {     int N,i,j,k;     printf("请输入整数N作为金字塔层数：\n");     scanf("%d",&N);     printf("\n");     printf("输出金字塔如下：\n");     for(i=0;i<=N;i++)  //执行for语句，在这里i++后，如果定义sum=0，sum=sum+i的话，sum仍然=0        {          printf("i=%d",i);  //这里输出看看i的值          for(j=0;j<N-i;j++) //但是在这里i=0              printf(" ");          for(k=0;k<2*i-1;k++)              printf("*");          printf("\n");        }      return 0; } 楼主结合上面的代码，再看看下面的运行结果图： 如果输入1，结果如下，一定是从0开始的：

user: user-0
content: 在for循环里  for(a;b;c)                     {循环体} 执行顺序：b为真，执行循环体，再执行c。    假如金字塔层数为N=1，那么执行第一次循环for（j=0;j<N-i;j++)时，N-i=0,应该是跳出来了。   但是循环还行执行，这个i++在for循环里是怎样执行的，什么时候执行，会有什么结果啊？痛苦纠结。

user: user-0

user: user-0
content: 懂了，谢谢。

user: user-0
content: 但是上面的程序一样可以正确的输出结果，程序是对的，就是i的值开始是0， 但是i++本来是在循环体之后执行的，但是上面程序如果N=1的话，i++就在循环体之前就执行了。 实在不解。。求解

user: user-1
content: 修改，供参考：#include<stdio.h>  main() {     int N,i,j,k;     printf("请输入整数N作为金字塔层数：\n");     scanf("%d",&N);     printf("\n");     printf("输出金字塔如下：\n");     for(i=0;i<N;i++)        //for(i=0;i<=N;i++)        {          printf("i=%d",i);          for(j=0;j<N-i;j++)              printf(" ");          for(k=0;k<2*i+1;k++)//for(k=0;k<2*i-1；k++)              printf("*");          printf("\n");        }         return 0; }
user-0 提问: 请教大神们，有没有高效的方法，过滤DMA中100个word中零或者一

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: buffer_4[100]中每个字的最高位组成新字？

user: user-3
content: 所以建议你以16位为处理基准，>=16位了，就把低16位保存然后移出去，偶数次的时候再把两个16位拼起来保存。 这样有高16位缓冲，不会丢数据。

user: user-0
content: 我的本意是，每32位后，把结果封装成一个字存起来。

user: user-0
content: void sample_2(void) {     UINT8 last_bit=0,current_bit=0;     UINT8 cnt=0,pos=0,j;     UINT32 temp,result=0;     UINT16 i=0;     for (i=0;i<100;i++) {                  temp = buffer_4[i];          for (j=0;j<32;j++) {                          current_bit = temp & 0x01;                      if (current_bit ^ last_bit) {                  if ((cnt >= 7) && (cnt <= 12)) {           //00                     if (last_bit)                         result |= (3 << pos);                     pos += 2;                 } else if ((cnt >= 2) && (cnt <= 6)) {     //0                     if (last_bit)                         result |= (1 << pos);                     pos++;                 }                  cnt = 0;                              }                          last_bit = current_bit;             cnt++;             temp >>= 1;              if (pos >= 32) {                 pos = 0;                 printf("word:%X\n",result);                 result = 0;             }         }       } } 当前采用该方法，速度还不够快。

user: user-3
content: 正面的，从算法角度看，你的数据从头到尾撸了一遍，O(n)的，已经很难优化了。 反面的，你的代码似乎和上方设定不一致啊，我是说连续位的数量。 另外，输出的result，两次之间不够连续啊，如果上次的有了31位，这次再来2位，那就33位了，会丢弃1位啊。

user: user-4
content: DMA是原封不动地搬运数据的，不存在“过滤”的问题。 过滤，可以在启动DMA之前，或者DMA完成后进行。

user: user-3
content: 上个Verilog？反正你既然搞DMA就不在乎上块芯片
user-0 提问: 7-1 求奇数的平均数 

回复:
user: user-1
content: #include#includeusing namespace std;int main(){    int n;    cin>>n;    int m[n],i(0);    float a,s(0.0),b(0.0);    for(i=0;i<n;i++)        cin>>m[i];    for(i=0;i<n;i++)    {        if(m[i]%2!=0)       {          s+=m[i];          b++;       }    }    a=s/b;    cout<<fixed<<setprecision(3)<<a<<endl;    return 0;}

user: user-1
content: 这是c++

user: user-2
content: 修正楼上，样例无错误的，正确。

user: user-2
content: 样例有错误。供参考：#include <stdio.h>  int main(int argc, char* argv[]) {         int n,sum=0,i=0,d;         scanf("%d",&n);         if(n>50) n=50;         while(n--){              scanf("%d",&d);              if(d & 1 ==1){//通过位运算判断                 sum += d;                 i++;              }         }         printf("%.3f",(float)sum/(float)i);                  return 0; }

user: user-0
content: 自己也有写出来 不对呀

user: user-3
content: 目测样例有误？C语言算不出来，任何语言都不行的。

user: user-4
content: 先拿到 输入的数据 然后 判定 数值 %2 是否等1 来去确定是否是奇数，是则累加。然后求平均。  代码就不给你写了。刚开始写代码 还是要自己写的。
user-0 提问: 该程序中，在第一个for语句里i=101，但在第二个for语句里从i=3开始循环,这是为什么？

回复:
user: user-1
content: 你也没有说这个程序是干什么用的

user: user-2
content: 找本C语言教程，看看for循环语法吧。

user: user-3
content: 第一个for是为了实现1+5+9+...101   A 第二个for是为了实现3+7+11...99     B A-B = 1+2+2+2...2(25个2)=1+2*25=51

user: user-4
content: for循环语句的语法格式：  for(表达式1;表达式2;表达式3) { 循环体 }  for循环的执行顺序： （1）执行for后表达式1； （2）执行表达式2，若表达式2的值为真（或非0），则执行for内循环体，然后执行（3）；否则，则循环结束，执行（5） （3）执行表达式3 （4）返回继续执行（2） （5）循环结束，执行for语句的循环体下面的语句

user: user-5
content: for(i=3;……
user-0 提问: c语言写算术平均滤波法疑问，GetAD()和Delay()函数怎么写？

回复:
user: user-1
content: #include <stdio.h> #include <windows.h> #define N 4000 unsigned char data[N]; unsigned char get_ad(int init) {     static unsigned int j=0;     unsigned char d;     if (init) j=0;     d=data[j];     j++;     if (j>=N) j=0;     return d; } void delay() { //  Sleep(15); } char filter() {     unsigned int sum = 0;     unsigned int i;      get_ad(1);     for (i=0;i<N;i++)   {         sum += get_ad(0);         delay();     }     return(char)(sum/N); } int main() {     unsigned int i;     char c;      for (i=0;i<N;i++) data[i]=(unsigned char)(i%256);     c=filter();     printf("%d\n",c);//125      return 0; }

user: user-1
content: #include <stdio.h> #include <windows.h> #define N 4000 unsigned char data[N]; unsigned char get_ad() {     static unsigned int j=0;     return data[j++]; } void delay() { //  Sleep(15); } char filter() {     unsigned int sum = 0;     unsigned int i;      for (i=0;i<N;i++)   {         sum += get_ad();         delay();     }     return(char)(sum/N); } int main() {     unsigned int i;     char c;      for (i=0;i<N;i++) data[i]=(unsigned char)(i%256);     c=filter();     printf("%d\n",c);//125      return 0; }

user: user-1
content: #include <stdio.h> #include <windows.h> #define N 12 unsigned int data[N]; unsigned int get_ad() {     static unsigned char j=0;     return data[j++]; } void delay() {     Sleep(50); } char filter() {     unsigned int sum = 0;     unsigned char i;      for (i=0;i<N;i++)   {         sum += get_ad();         delay();     }     return(char)(sum/N); } int main() {     unsigned char i;     char c;      for (i=0;i<N;i++) data[i]=i;     c=filter();     printf("%d\n",c);//5      return 0; }

user: user-0
content: 引用 1 楼 顾染尘 的回复:补充一下  获取的是dat文件的波形图/** 对波形图进行滤波处理 fileSrcName：是一个.dat文件 */ int SrcLPFName(char* fileSrcName) { 	FILE* fileSrc=NULL; 	FILE* fileSrcLPF=NULL;    	char fileSrcLPFName[_MAX_PATH] = {0}; 	sprintf(fileSrcLPFName,"%s_LPF_1_.dat",fileSrcName);   	fileSrc = fopen(fileSrcName,"r+b");  //打开原文件 	fileSrcLPF = fopen(fileSrcLPFName,"a+b");  //打开原文件  滤波后文件  	if(fileSrc==NULL || fileSrcLPF==NULL) 	{ 		if(!fileSrc) fclose(fileSrc); 		if(!fileSrcLPF) fclose(fileSrcLPF); 		printf("open file error!!\n"); 		return FILE_ERROR; 	} 	unsigned char i_data[4000] = {0};	 	unsigned char l_data[4000] = {0}; 	int readNum = 0; 	int cnt = 0;  	while(!feof(fileSrc))//((d = fgetc(fileSrc)) != EOF)   	{//liuchang  feof 判断文件是否为空 		memset(i_data,0,sizeof(unsigned char)*4000); 		memset(l_data,0,sizeof(unsigned char)*4000); 		//这里应该是滤波器的调用 	} 	fclose(fileSrc); 	fclose(fileSrcLPF); 	printf("LPF文件生成\n"); }

user: user-0
content: 补充一下  获取的是dat文件的波形图
user-0 提问: 正在考试中，求大佬江湖救急！

回复:
user: user-1
content: 你作弊，分数会为0！

user: user-2
content: 最后一句漏了：scanf("%d",&flag);

user: user-2
content: 考试还可以上网供参考：for(i=0;i<5;i++)  scanf("%s",temp);  if(strcmp(temp,add[i])==0))//输入的省份地区与已经录入的数据进行比对，找到if条件成立  demand(risk(num[i]));//risk()函数为查询风险等级数据，demand()函数根据risk()函数返回的风险等级，输出打印查询的该省份的返乡条件
user-0 提问: 我写了一段代码想打开文本并把不同的信息解析到对应的字符串里，但是运行出来的结果不对

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

user: user-2
content: 楼主其实挺有想法的，他想把刚输入的数据组织成结构体，奈何机器不理解。

user: user-3
content: 乱码。是编码问题么？
user-0 提问: 程序报错求解！！！

回复:
user: user-1
content: 引用 4 楼 qq_51563431 的回复:？  引用 3 楼 user-2 的回复:交换？那么你需要三个strcpy  strncpy(char * dest,const char * src,int size); 建议你看下这个函数  c语言的 字符串操作 不支持 operate = 的

user: user-0
content: ？  引用 3 楼 user-2 的回复:交换？那么你需要三个strcpy

user: user-2
content: 交换？那么你需要三个strcpy

user: user-0
content: 引用 1 楼 user-2 的回复:数组不能赋值 你要复制字符串需要strcpy 不是复制 是交换

user: user-2
content: 数组不能赋值 你要复制字符串需要strcpy
user-0 提问: 复合字面量有没有通俗的理解？

回复:
user: user-0
content: 如下这段代码，是否就是一段无名无姓的复合字面量，生成以后只有天知道它在哪里，就像扔进大海的漂流瓶。是这么回事吧？  int main() {         (int[2][2]) {                 {10, 20},                 {30, 40}         };         return 0; }

user: user-1
content: 简单的理解就是，临时的匿名对象 struct A {     int a; }; int main(int argc, const char * argv[]) {     A a = {5};//该匿名对象的内存格式和左边的数据类型一致     A b = (struct A){5};//这个和上面是等效的     printf("%d\n", a.a);     printf("%d\n", b.a);     //printf("%p\n", &((struct A){5}));//这里会提示(struct A){5}是个临时对象          int c = 6; //这个是普通字面量（这个是常量）     int d = (int){6};//这个是复合字面量，这个和上面的普通字面量等效（也就是效果一样，所以单个int一样可以用，只是复合字面量是个临时的对象而已）     printf("%d\n", c);     printf("%d\n", d); }

user: user-2
content: C标准里面 除了VLA以外的任何完整对象类型都可以做复合字面量  int完全符合要求

user: user-2
content: 引用 6 楼 qq_16774199 的回复:[quote=引用 4 楼 lin5161678 的回复:]复合字面量 不只是数组  结构体也行 单个int也行 创建一个无名对象 这个理解没问题 限定数组是多余的想法  单个int大概不能叫复合，单个与复合是反义词。[/quote] 这是C语言术语 不是语文的阅读理解 就算是语文的阅读理解 你的做法也是属于望文生义好吗 单个int不行? 为什么不行  你看过标准规定吗 你自己实际写代码测试过吗 什么都不做 张口就不行? 口语编程 还是脑补编程?

user: user-3
content: 结构体，联合体，数组（不同类型的数组）

user: user-4
content: #2的代码只有VC++能编译通过，而且必须作为C代码编译。C++Builder、GCC、intel C++都编译不了。

user: user-5
content: VS2019 能编译啊。。。。

user: user-2
content: 引用 5 楼 qq_16774199 的回复:[quote=引用 2 楼 UIUI 的回复:]根据你的题目，我 发现一个好神奇的。 int main()  {    (int [3]) { 7,8,9 };   printf("%d\t", *$S1);   printf("%d\t", *$S1+1);   printf("%d\t", *$S1+2);         return 0; } ///// 7 8 9 //// 怎么有这么奇怪的东西？ 你们试试TC能不能编译。。 是不是只能VS能编译。  你这些$S1是什么东西？还没等到编译，Clion IDE就红字报错了。[/quote]编译器扩展 俗称方言 无关紧要的东西 不用管

user: user-0
content: 引用 4 楼 lin5161678 的回复:复合字面量 不只是数组  结构体也行 单个int也行 创建一个无名对象 这个理解没问题 限定数组是多余的想法  单个int大概不能叫复合，单个与复合是反义词。

user: user-0
content: 引用 2 楼 UIUI 的回复:根据你的题目，我 发现一个好神奇的。 int main()  {    (int [3]) { 7,8,9 };   printf("%d\t", *$S1);   printf("%d\t", *$S1+1);   printf("%d\t", *$S1+2);         return 0; } ///// 7 8 9 //// 怎么有这么奇怪的东西？ 你们试试TC能不能编译。。 是不是只能VS能编译。  你这些$S1是什么东西？还没等到编译，Clion IDE就红字报错了。

user: user-2
content: 复合字面量 不只是数组  结构体也行 单个int也行 创建一个无名对象 这个理解没问题 限定数组是多余的想法

user: user-6
content: 不一定是数组，也可以是结构体，甚至结构体数组。

user: user-5
content: 根据你的题目，我 发现一个好神奇的。 int main()  {    (int [3]) { 7,8,9 };   printf("%d\t", *$S1);   printf("%d\t", *$S1+1);   printf("%d\t", *$S1+2);         return 0; } ///// 7 8 9 //// 怎么有这么奇怪的东西？ 你们试试TC能不能编译。。 是不是只能VS能编译。

user: user-2
content: 引用 13 楼 qybao 的回复:简单的理解就是，临时的匿名对象 struct A {     int a; }; int main(int argc, const char * argv[]) {     A a = {5};//该匿名对象的内存格式和左边的数据类型一致     A b = (struct A){5};//这个和上面是等效的     printf("%d\n", a.a);     printf("%d\n", b.a);     //printf("%p\n", &((struct A){5}));//这里会提示(struct A){5}是个临时对象          int c = 6; //这个是普通字面量（这个是常量）     int d = (int){6};//这个是复合字面量，这个和上面的普通字面量等效（也就是效果一样，所以单个int一样可以用，只是复合字面量是个临时的对象而已）     printf("%d\n", c);     printf("%d\n", d); }不是临时的  你们总能添加一些错误的东西上去 就是匿名对象 没了 就这么多 不是临时的 也不限定是数组  没有其他乱七八糟的前缀  简简单单 匿名对象 可以吗
user-0 提问: 有序数列插入一个数 查错

回复:
user: user-1
content: 先输入完，然后双重循环冒泡排序

user: user-2
content: 供参考：#include <stdio.h>  #define N 51  int main() {                        //int N;     int num[N];     int a;     int i,m,n,t;                                //int * ptr_n = &n;     scanf("%d",&n);     if(n<0 || n>50)n=50;      for(i = 0; i < n; i++)     {         scanf("%d",&num[i]);     }     scanf("%d",&a);                               //*ptr_n = n + 1;     for(i = 0; i < n ; i++)     {         if(a < num[i])        //&& a < num[i + 1])         {             m = i ;          //m = i+1;             break;         }     }     if(i==n)m=n;     for(i = (n + 1); i > m; i--)     {         t = num[i];         num[i] = num[i - 1];         num[i - 1] = t;     }     num[m] = a;     for(i = 0; i < (n + 1); i ++)     {         printf("%4d",num[i]);//printf("%d\t",*(ptr_n + i));     }     system("pause");     return 0; }

user: user-3
content: 编译器告诉你的问题，照着改了先。

user: user-4
content: 引用 3 楼 qzjhjxj 的回复:供参考：#include <stdio.h>  #define N 51  int main() {                        //int N;     int num[N];     int a;     int i,m,n,t;                                //int * ptr_n = &n;     scanf("%d",&n);     if(n<0 || n>50)n=50;      for(i = 0; i < n; i++)     {         scanf("%d",&num[i]);     }     scanf("%d",&a);                               //*ptr_n = n + 1;     for(i = 0; i < n ; i++)     {         if(a < num[i])        //&& a < num[i + 1])         {             m = i ;          //m = i+1;             break;         }     }     if(i==n)m=n;     for(i = (n + 1); i > m; i--)     {         t = num[i];         num[i] = num[i - 1];         num[i - 1] = t;     }     num[m] = a;     for(i = 0; i < (n + 1); i ++)     {         printf("%4d",num[i]);//printf("%d\t",*(ptr_n + i));     }     system("pause");     return 0; }  你的代码有点问题，缺少一个case吧，即最后输入的都比前面的大的时候，会有问题，似乎没测试吧  在移动位置的时候下表为n的位置还没填充数据吧，   #include <stdio.h>  #define N 6  int main() {     //int N;     int num[N];     int a;     int i,m,n,t;     //int * ptr_n = &n;     scanf("%d",&n);     if(n<0 || n>= N)         n = N-1;      for(i = 0; i < n; i++)     {         scanf("%d",&num[i]);     }     scanf("%d",&a);     //*ptr_n = n + 1;     for(i = 0; i < n ; i++)     {         if(a < num[i])        //&& a < num[i + 1])         {             m = i ;          //m = i+1;             break;         }     }     if(i==n)         m=n;      //for(i = (n + 1); i > m; i--)     for(i = n; i > m; i--)     {         t = num[i];         num[i] = num[i - 1];         num[i - 1] = t;     }     num[m] = a;     for(i = 0; i < (n + 1); i ++)     {         printf("%4d",num[i]);//printf("%d\t",*(ptr_n + i));     }     //system("pause");     return 0; }  供参考～
user-0 提问: 统计一行文本的单词个数     到底哪错了？

回复:
user: user-1
content: #include<stdio.h>int main(){    int i,count=0;    char str[100000];    i=0;    while((str[i]=getchar())!='\n')    {        i++;    }    str[i]='\0';    for (i = 0; str[i]!='\0'; i++)    {        if(str[i]==' ')        {            count==0;        }         if (str[i]==' '&& str[i + 1]!=' ')        {            count++;        }    }    if(str[0]!=' ')        count++;    if(str[i]=='\0'&&str[i-1]==' ')        count--; printf("%d",count);  }

user: user-0
content: 引用 1 楼 user-2 的回复:按照题目的意图，Let's 是1个单词； 209. 是1个单词。 是我想复杂了

user: user-2
content: 按照题目的意图，Let's 是1个单词； 209. 是1个单词。
user-0 提问: 回文数（题目没给结束循环的标志，在PTA运行超时，怎么办？？？）

回复:
user: user-1
content: //加个const变量呗 const int MAXNum = 10;  //一个数据最多多长 const int MAXNo = 3;	//最多多少个数据  char* huiwen(int m) { 	char a[MAXNum] = {0};	 	int j;	 	char n; 	itoa(m,a,10); 	for(j = 1; a[j] != 0; j++) 	{ 	}  	for(int i = 0; i < j/2; i++) 	{ 		n = a[i]; 		a[i] = a[j-1]; 		a[j-1] = n; 	} 	return a; } int _tmain(int argc, _TCHAR* argv[]) { 	int i[MAXNo] = {0}; 	printf("请输入回文：\n"); 	for(int j = 0; j < MAXNo; j++) 	{ 		scanf("%d",&i[j]); 	} 	printf("输出：\n"); 	for(int j = 0; j < MAXNo; j++) 	{ 		char c_r[MAXNum]; 		strcpy(c_r,huiwen(i[j])); 		atoi(c_r); 		if(i[j] == atoi(c_r)) 		{ 			printf("YES\n"); 		} 		else 		{ 			printf("NO\n"); 		} 	} 	return 0; }

user: user-2
content: 1位数算不算回文数？ 两位一样的两位数算不算回文数？ 输入最长多少位？ 有0开头吗？ ……

user: user-3
content: 用ctrl + z 结束输入，供参考：#include <stdio.h> int main(int argc, char* argv[]) {     char str[100][20];     char *p,*q;     int  flag,i=0,cnt;     while((cnt=scanf("%s",str[i]))!=EOF)i++;// Ctrl+z 结束输入     for(int j=0;j<i;j++){        flag = 1;        p=str[j];        q=str[j];        while(*q != '\0')             q++;        q--;        while(p<q){             if((*p != *q))               {                 flag = 0;                 break;               }             p++;             q--;        }        if(flag == 1)           printf("Yes\n");        else           printf("No\n");     }      return 0; }

user: user-0
content: 有没有哪位大佬给下代码

user: user-4
content: 引用 6 楼 是疗伤烧肉粽~ 的回复：[quote=引用 5 楼 Chivas_/Regal的回复:]C语言可用while(~scanf("%d",&a))进行输入，C++可使用while(cin>>a)然后在while循环内进行对输入数的分析即可 那样就是无限循环了[/quote]ctrl+z依然是结束标志。这个是跟eof一样的效果

user: user-0
content: 引用 5 楼 Chivas_/Regal的回复:C语言可用while(~scanf("%d",&a))进行输入，C++可使用while(cin>>a)然后在while循环内进行对输入数的分析即可 那样就是无限循环了

user: user-4
content: C语言可用while(~scanf("%d",&a))进行输入，C++可使用while(cin>>a)然后在while循环内进行对输入数的分析即可

user: user-5
content: OJ的惯例是由文件提供测试输入，因此文件结束就是输入结束。 另外，输出行末尾缺少\n就有可能不真的立即输出，也会导致超时。
user-0 提问: float与double

回复:
user: user-1
content: double输出用%lf float用%f

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437 另外请打开float.h文件逐字阅读一遍

user: user-3
content: 看看你的源代码

user: user-4
content: 只能说你对“正确”这个词的理解与工程师们的理解有一定的区别。
user-0 提问: VS上有 __attribute__((unused)) 的替代方案吗？

回复:
user: user-0
content: 引用 2 楼 早打大打打核战争 的回复:这个应该用C++17的标准语法： [[maybe_unused]] sorry。。。看早了。。。已经结帖了。。。

user: user-1
content: 这个应该用C++17的标准语法： [[maybe_unused]]

user: user-2
content: UNREFERENCED_PARAMETER(hPrevInstance);
user-0 提问: 请教大佬，题目：输入一个字母，如果是大写，转换成小写，并输出小写的ASCLL码值，反之，转换成大写，并输出ASCLL码值；若输出的字符并不是字母，则直接输出本身

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 大佬？你把变量ch用单引号圈起来判断是啥操作？

user: user-3
content: 仅供参考： #include <stdio.h>  int main(void) {     int ch;     printf("输入一个字母");     ch = getchar();     if (ch >= 'a' && ch <= 'z') ch -= 32;     else if (ch >= 'A' && ch <= 'Z') ch += 32;     printf("%c\n", ch);     return 0; }

user: user-4
content: 'ch'这样的表达式，我相信编译器也会提示错误的，除非你的编译器检查不严。''中间只会有一个字符，大于1个字符，应该用""。   #include <stdio.h> #include <ctype.h>  int main(int argc, char* argv[]) {         //char ch;         int ch;         printf("输入一个字母");         ch = getchar();          if (islower(ch))              printf("%c,%d\n", ch-32,ch-32);         else if (isupper(ch))              printf("%c,%d\n", ch+32,ch+32);         else              printf("%c\n",ch);  #if 0         if('a' <= ch && ch <= 'z')           {              ch = ch - 32;              printf("%c,%d\n",ch,ch);         }         else         if('A' <= ch && ch <= ' Z')           {              ch = ch + 32;              printf("%c,%d\n",ch,ch);         }         else              printf("%c\n",ch); #endif         return 0; } 供参考～  ch建议定义为int类型～

user: user-5
content: 代码太多了看不懂#include "stdafx.h" #include <stdio.h>   int main(int argc, char* argv[]) { 	printf("输入一个字母"); 	char ch = getchar(); 	if(ch>='a'&&ch<='z') ch-=32; 	else if(ch>='A'&&ch<='Z') ch+=32; 	printf("%c\n\n",ch); 	return 0; }

user: user-6
content: ch 不用加' ' 逻辑判断重复了，代码修改如下，供参考：#include <stdio.h>  int main(int argc, char* argv[]) {         char ch;         printf("输入一个字母");         ch = getchar();         if('a' <= ch && ch <= 'z')           {              ch = ch - 32;              printf("%c,%d\n",ch,ch);         }         else         if('A' <= ch && ch <= ' Z')           {              ch = ch + 32;              printf("%c,%d\n",ch,ch);         }         else              printf("%c\n",ch);                  return 0; }
user-0 提问: C语言有参函数调用

回复:
user: user-1
content: 跟函数传参的顺序有关，楼主的编译器参数入栈顺序是从右向左，因此a入栈时还没有调用alert函数，因此还没有被修改；  第二个程序，那是先调用后入栈，因此是改变之后的～  “调用者函数把被调函数所需要的参数按照与被调函数的形参顺序相反的顺序压入栈中,即:从右向左依次把被调函数所需要的参数压入栈”  注意下参数压栈（入栈）顺序～

user: user-0
content: 引用 1 楼 user-2的回复:不是没改变，是调用printf的时候还没改变，C语言函数调用是从右往左入栈的，调用printf的时候先把a原来的值输出了，再调用的alter，你在printf之后再输出一次就变了 哦哦 我明白了 大意了 大意了 谢谢老铁

user: user-2
content: 不是没改变，是调用printf的时候还没改变，C语言函数调用是从右往左入栈的，调用printf的时候先把a原来的值输出了，再调用的alter，你在printf之后再输出一次就变了
user-0 提问: 数组名看起来像个指针，但它好像还包含了某种其它东西？

回复:
user: user-1
content: 使用C语言，灵魂是指针。 但学习C语言，核心是类型。 想学好C语言必须正确深刻地理解类型，对，就是变量和函数的类型。  你的array是什么类型，难道编译器不知道么？不，它肯定比你我更清楚，也更重视这一点。 有了正确的类型，那它能进行什么运算就水到渠成了。

user: user-0
content: int main() {         int array[2][3][3] = {                 {                         {1, 3, 4},                         {2, 8, 6},                         {5, 9, 0}                 },                 {                         { 10, 30, 40 },                         { 20, 80, 60 },                         { 50, 90, 0 }                 }         };         printf("array[0][0][0] = %d\n", array[0][0][0]);         printf("***array = %d\n", ***array);         printf("&array[0][0][0] = %p\n", &array[0][0][0]);         printf("&array = %p\n", &array); }

user: user-2
content: 建议楼主通读Tiny C Compiler源代码。  尽管我也没读过。

user: user-3
content: 语言 》编译器 》机器码 你说编译器作为中间的翻译者，它能不知道 语言 给它的是什么东西吗？ 语言第一步给 编译器 投入了一个硬币 然后第二步要 编译器 处理的是纸币 你说 编译器 知不知道第一步和第二步的两种币种不对？

user: user-4
content: 真没有包含，是编译干的。

user: user-1
content: 数组名是个地址，像个指针，这是语义。 array的类型是int[2][3][3]，这是语法。  语言么，语义和语法不可偏废，也不能互相替代。
user-0 提问: break只能用于循环语句中？

回复:
user: user-1
content: switch case中也会用到； break和continue是一样的，但是功能是相反的。

user: user-2
content: switch也可以

user: user-3
content: switch

user: user-4
content: switch选择结构也行

user: user-5
content: break除了用于循环语句 还有switch中的case 然后就没了

user: user-6
content: do.....while循环也可以用。

user: user-7
content: 也可以用在switch语句中。

user: user-8
content: 经典的switch是当然可以的

user: user-9
content: switch case中也会用到； break和continue是一样的，但是功能是相反的。

user: user-10
content: switch 也行

user: user-11
content: 外加switch

user: user-12
content: 还可以switch ,case中啊

user: user-0
content: 谢谢谢谢谢谢可以支持一下我的博客嘛
user-0 提问: 求助，ARM使用UDP，通过交换机后，可以ping通，但是接收不到数据。求指点，感谢感谢

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:ping是有去有回的，即ping request和reply；如果ping能通，那么通路是通的，同理UDP也应该是通的。感谢感谢，对，就是这样。问题已经解决了。首先我这里有4个交换机，其中三台都可以接收数据，最多关掉防火墙之后，也能收到数据。但是其中有一台交换机，是不行的。后来我改了ARM中的代码，ARM中如果数据发送OK，就继续发；数据发送失败就关闭socket。所以就出现了上面的问题，可以ping通，但是没有数据。只有这一台交换机是这样，别的都不用改程序就可以通信。最后感谢感谢！

user: user-0
content: 引用 2 楼 赵4老师 的回复:换个端口再试试？感谢感谢，换了没有用，是程序悄悄关闭了socket。问题已经解决了。首先我这里有4个交换机，其中三台都可以接收数据，最多关掉防火墙之后，也能收到数据。但是其中有一台交换机，是不行的。后来我改了ARM中的代码，ARM中如果数据发送OK，就继续发；数据发送失败就关闭socket。所以就出现了上面的问题，可以ping通，但是没有数据。只有这一台交换机是这样，别的都不用改程序就可以通信。最后感谢感谢！

user: user-0
content: 引用 5 楼 forever74 的回复:问题在于他没有交代他有没有完整的协议栈，还是自己用代码写成的UDP头。 底下有没有ARP都是个问题。 ping不同，它不那么依赖ARP，设备对于icmp都相当亲切和蔼，所以还真不说明问题。感谢感谢，确实不确定性太大。问题已经解决了。首先我这里有4个交换机，其中三台都可以接收数据，最多关掉防火墙之后，也能收到数据。但是其中有一台交换机，是不行的。后来我改了ARM中的代码，ARM中如果数据发送OK，就继续发；数据发送失败就关闭socket。所以就出现了上面的问题，可以ping通，但是没有数据。只有这一台交换机是这样，别的都不用改程序就可以通信。最后感谢感谢！

user: user-1
content: 问题在于他没有交代他有没有完整的协议栈，还是自己用代码写成的UDP头。 底下有没有ARP都是个问题。 ping不同，它不那么依赖ARP，设备对于icmp都相当亲切和蔼，所以还真不说明问题。

user: user-2
content: 接收不到数据，你怎么知道ping通？

user: user-3
content: ping是有去有回的，即ping request和reply；如果ping能通，那么通路是通的，同理UDP也应该是通的。

user: user-4
content: 换个端口再试试？

user: user-1
content: 已知条件不足，可能性太多。
user-0 提问: Silk语言 - 中国自己的开源编程语言

回复:
user: user-1

user: user-0
content: 引用 6 楼 ctrigger的回复:个人感觉：Silk语法貌似是C与Python的混血，看上去眼熟，很亲切啊。 对的！就是像Python一样的动态语言，但是用了C的语法，C程序员很容易接受，安装包里很多例子都是C转过来的，欢迎下载使用。

user: user-2
content: 个人感觉：Silk语法貌似是C与Python的混血，看上去眼熟，很亲切啊。

user: user-2
content: 楼主应该联系CSDN管理员，专门新建一个Silk版块，推广推广，或许有意想不到的收获。

user: user-3
content: 语法糖越甜，编译调试查错越苦！ 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中，我认为不值当。  做个可能不太恰当的比喻： 人想让狗帮忙逮只兔子，可是人说话狗听不懂，于是人发明了一种介乎人言和狗语之间的语言，即口令。 人想让电脑帮忙做计算，可是人话电脑听不懂，于是人发明了一种介乎人言和汇编机器码之间的语言，即C语言。 人对狗的口令得让人容易学、也得让狗容易懂。 C语言同样得让人容易学、也得让电脑容易懂。 相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。

user: user-4
content: 关注一下有空看看

user: user-5
content: 高级语言的进步主要就是语法糖了，基础架构早在六七十年代就做完了

user: user-3
content: 引用 3 楼 qq_31972627的回复:[quote=引用 2 楼 赵4老师的回复:]语法糖越甜，编译调试查错越苦！ 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中，我认为不值当。  做个可能不太恰当的比喻： 人想让狗帮忙逮只兔子，可是人说话狗听不懂，于是人发明了一种介乎人言和狗语之间的语言，即口令。 人想让电脑帮忙做计算，可是人话电脑听不懂，于是人发明了一种介乎人言和汇编机器码之间的语言，即C语言。 人对狗的口令得让人容易学、也得让狗容易懂。 C语言同样得让人容易学、也得让电脑容易懂。 相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。 谢谢回复！也许正如你说的，有了这么多语言，再开发一门新语言是浪费时间，就算是个人爱好吧，用自己开发的语言写程序的感觉是旁人无法体会的，哈哈。[/quote] 期待你创造出编译调试差错真香无敌的新编程语言！

user: user-0
content: 引用 2 楼 赵4老师的回复:语法糖越甜，编译调试查错越苦！ 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中，我认为不值当。  做个可能不太恰当的比喻： 人想让狗帮忙逮只兔子，可是人说话狗听不懂，于是人发明了一种介乎人言和狗语之间的语言，即口令。 人想让电脑帮忙做计算，可是人话电脑听不懂，于是人发明了一种介乎人言和汇编机器码之间的语言，即C语言。 人对狗的口令得让人容易学、也得让狗容易懂。 C语言同样得让人容易学、也得让电脑容易懂。 相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。 谢谢回复！也许正如你说的，有了这么多语言，再开发一门新语言是浪费时间，就算是个人爱好吧，用自己开发的语言写程序的感觉是旁人无法体会的，哈哈。
user-0 提问: 【C语言】实现杨辉三角

回复:
user: user-1
content: #include <stdio.h> #define MAXN 10 unsigned __int64 y[MAXN][MAXN]; int i,j; char s[60]; void main() {     printf("%30s\n","1  ");     printf("%33s\n","1     1  ");     y[1][0]=1ui64;y[1][1]=1ui64;     for (i=2;i<MAXN;i++) {         y[i][0]=1ui64;sprintf(s,"1  ");         for (j=1;j<=i-1;j++) {             y[i][j]=y[i-1][j-1]+y[i-1][j];             sprintf(s,"%s   %-3I64u",s,y[i][j]);         }         y[i][i]=1ui64;sprintf(s,"%s   1  ",s);         printf("%*s\n",30+i*3,s);     } } //                           1 //                        1     1 //                     1     2     1 //                  1     3     3     1 //               1     4     6     4     1 //            1     5     10    10    5     1 //         1     6     15    20    15    6     1 //      1     7     21    35    35    21    7     1 //   1     8     28    56    70    56    28    8     1 //1     9     36    84    126   126   84    36    9     1  //按如下格式打印杨辉三角形的前MAXN行。 //  1 //  1 1 //  1 2 1 //  1 3 3 1 //  1 4 6 4 1 //  1 5 10 10 5 1 #include <stdio.h> #define MAXN 68 unsigned __int64 y[MAXN][MAXN]; int i,j; void main() {     printf("1\n");     printf("1 1\n");     y[1][0]=1ui64;y[1][1]=1ui64;     for (i=2;i<MAXN;i++) {         y[i][0]=1ui64;printf("1 ");         for (j=1;j<=i-1;j++) {             y[i][j]=y[i-1][j-1]+y[i-1][j];             printf("%I64u ",y[i][j]);         }         y[i][i]=1ui64;printf("1\n");     } } //1 //1 1 //1 2 1 //1 3 3 1 //1 4 6 4 1 //1 5 10 10 5 1 //1 6 15 20 15 6 1 //1 7 21 35 35 21 7 1 //1 8 28 56 70 56 28 8 1 //1 9 36 84 126 126 84 36 9 1 //... //1 67 2211 47905 766480 9657648 99795696 869648208 6522361560 42757703560 247994680648 1285063345176 5996962277488 25371763481680 97862516286480 345780890878896 1123787895356412 3371363686069236 9364899127970100 24151581961607100 57963796707857040 129728497393775280 271250494550621040 530707489338171600 972963730453314600 1673497616379701112 2703342303382594104 4105075349580976232 5864393356544251760 7886597962249166160 9989690752182277136 11923179284862717872 13413576695470557606 14226520737620288370 14226520737620288370 13413576695470557606 11923179284862717872 9989690752182277136 7886597962249166160 5864393356544251760 4105075349580976232 2703342303382594104 1673497616379701112 972963730453314600 530707489338171600 271250494550621040 129728497393775280 57963796707857040 24151581961607100 9364899127970100 3371363686069236 1123787895356412 345780890878896 97862516286480 25371763481680 5996962277488 1285063345176 247994680648 42757703560 6522361560 869648208 99795696 9657648 766480 47905 2211 67 1
user-0 提问: 十只队伍9轮循环用C语言怎么做，求大佬指导指导

回复:
user: user-1
content: 去查查竞赛规则，有对阵表的。直接拿来用就可以了。

user: user-2
content: lz，如果让你写个从10个队伍中抽2个队伍做组合（不能重复），一共有多少种组合，会写吗？你的9个轮询赛其实和这个组合的意思是一样的，因为每个队可以和其他9个队做组合。最简单直观的做法就是2个for循环 int i, j; for (i=0; i<10; i++) { //第一层for就是10个队伍循环     for (j=i+1; j<10; j++) { //第二层for就是在第一层的基础上，取出所有的第一层当前索引之后的元素做组合         printf("%d vs %d\n", i+1, j+1);     } }

user: user-0
content: 对对对   没想明白怎么生成这个循环。

user: user-3
content: 你罗列出45场比赛以后就需要思考新的问题： 哪5场可以同时进行？ 你接下来得把45场分成9天，每天5场的队伍不重复。

user: user-0
content: 引用 7 楼 qybao的回复:[quote=引用 6 楼 qq_51563431 的回复:]大佬，我太废了，不会写不能重复这个组合 不会重复，那会写重复的组合吗？ 再重复的基础上，再去考虑怎么判断去掉重复，那也是一个思路 所以你应该学会整理一下思路，然后一次次尝试  比如，两个for循环先把所有的重复的组合找出来，然后考虑一下，有什么特点，1 vs 2 和 2 vs 1 是等效的，那么可不可把 12 和 21 记录下来，如果其中一个存在，那就不组合了（因为说明已经组合过了）  int i, j; int chk[100] = {0}; //记录编号组合过的数组（组合两个对的编号转换为 编号1*10+编号2和编号2*10+编号1，也就是 1 vs 2 变成 12 和 21） for (i = 0; i < 10; i++) {   for (j = 0; j < 10; j++) {     if (j == i) //如果编号相同，那就不处理（因为自己不能跟自己比，也就是不存在 1 vs 1），继续下一轮循环       continue;     if (chk[i * 10 + j] == 1) //编号转换为 编号1*10+编号2，看看该编号是否存在，如果存在就跳过，继续下一轮循环       continue;     chk[i * 10 + j] = 1; //记录该组合已经出现过 编号1*10+编号2     chk[j * 10 + i] = 1; //记录该组合已经出现过 编号2*10+编号1     printf("%d vs %d\n", i + 1, j + 1);   } }[/quote] 大佬 谢谢了

user: user-2
content: 引用 6 楼 qq_51563431 的回复:大佬，我太废了，不会写不能重复这个组合 不会重复，那会写重复的组合吗？ 再重复的基础上，再去考虑怎么判断去掉重复，那也是一个思路 所以你应该学会整理一下思路，然后一次次尝试  比如，两个for循环先把所有的重复的组合找出来，然后考虑一下，有什么特点，1 vs 2 和 2 vs 1 是等效的，那么可不可把 12 和 21 记录下来，如果其中一个存在，那就不组合了（因为说明已经组合过了）  int i, j; int chk[100] = {0}; //记录编号组合过的数组（组合两个对的编号转换为 编号1*10+编号2和编号2*10+编号1，也就是 1 vs 2 变成 12 和 21） for (i = 0; i < 10; i++) {   for (j = 0; j < 10; j++) {     if (j == i) //如果编号相同，那就不处理（因为自己不能跟自己比，也就是不存在 1 vs 1），继续下一轮循环       continue;     if (chk[i * 10 + j] == 1) //编号转换为 编号1*10+编号2，看看该编号是否存在，如果存在就跳过，继续下一轮循环       continue;     chk[i * 10 + j] = 1; //记录该组合已经出现过 编号1*10+编号2     chk[j * 10 + i] = 1; //记录该组合已经出现过 编号2*10+编号1     printf("%d vs %d\n", i + 1, j + 1);   } }

user: user-0
content: 大佬，我太废了，不会写不能重复这个组合   引用 5 楼 qybao 的回复:lz，如果让你写个从10个队伍中抽2个队伍做组合（不能重复），一共有多少种组合，会写吗？你的9个轮询赛其实和这个组合的意思是一样的，因为每个队可以和其他9个队做组合。最简单直观的做法就是2个for循环 int i, j; for (i=0; i<10; i++) { //第一层for就是10个队伍循环     for (j=i+1; j<10; j++) { //第二层for就是在第一层的基础上，取出所有的第一层当前索引之后的元素做组合         printf("%d vs %d\n", i+1, j+1);     } }

user: user-3
content: #include <stdio.h> #define N 10 int main() { 	int a[N+1]; 	int i, j; 	for (i = 0; i < N; i++) 		a[i] = i + 1; 	for (i = 0; i < N-1; i++) { 		printf("第%d轮：\n", i + 1); 		for (j = 0; j < N/2; j++) { 			printf("%4d-%-4d", a[j], a[9 - j]); 		} 		printf("\n-------------------------------------------\n"); 		for (j = N-1; j > 0; j--) { 			a[j + 1] = a[j]; 		} 		a[1] = a[N]; 	} 	return 0; }  供参考。

user: user-3
content: 看画圈部位应该是头疼循环赛吧？

user: user-3
content: 哪儿不会？不会生成循环赛？还是不会积分？
user-0 提问: c语言新手请教——实现字符串连接

回复:
user: user-0
content: 懂了，谢了各位。要想输出字符串，需要自己手动添加'\0'。

user: user-1
content: 供参考：int main() {////***连接字符串     char str1[50],str2[20];     int i,j;     printf("输入第一个字符串(不含空格)：\n");     scanf("%s",str1);     printf("输入第二个字符串(不含空格)：\n");     scanf("%s",str2);     i=j=0;     while(str1[i])i++;                     //while(str1[i]!='\0') {i=i+1;}     while(str2[j])     {               str1[i++] = str2[j++];  //str1[i+1] =str2[j];                                                  //printf("连接后的字符串1：%s\n",str1);                                                  //i=i+1;                                                  //j=j+1;     }     str1[i] = '\0';  //strcat(str1,str2);     printf("\n连接后的字符串1：%s\n",str1);         return 0; }

user: user-2
content: 因为你'\0'还存在，没有被修掉

user: user-3
content: 差点儿被你绕昏了，0后面就不算字符串的内容了啊！

user: user-4
content: 楼上说了 。还有数组初始化时要清零 ，操作不要溢出

user: user-5
content: #include <stdio.h>  #define DEBUG  int main() {////***连接字符串     char str1[50],str2[20];     int i,j;     printf("输入第一个字符串(不含空格)：\n");     scanf("%s",str1);     printf("输入第二个字符串(不含空格)：\n");     scanf("%s",str2);     i=j=0;     while(str1[i]!='\0') {i=i+1;}     while(str2[j]!='\0')     {               //str1[i+1] =str2[j];               str1[i] =str2[j]; #ifdef DEBUG               str1[i+1] = 0;                printf("连接后的字符串1：%s\n",str1); #endif               i=i+1;               j=j+1;     }     str1[i] = 0; //equal '\0' //    strcat(str1,str2);     printf("\n连接后的字符串1：%s\n",str1);     return 0; }  供参考～  在第一个字符串的末尾，即'\0'的位置存放第二个字符串的第一个字符，而不是第一个字符串'\0'的下一个位置存放第二个字符串的第一个字符  另外，字符串都是一个'\0'结束，因此要%s输出，需要添加'\0'
user-0 提问: C语言实现打印出心形，初学者的表白神器。

回复:
user: user-1
content: 一个建议：循环变量用整型。因为浮点数会有微小的误差，可能导致循环次数跟预想的不同。 比如  for (int i=0; i<21; i++) {     double y = 2.5 - i * 0.2;     .... }