Question: C语言双链表插入过程指针不知道错在哪，求大神帮忙

引用 10 楼 有恒？无恒？？的回复:int**这是二级指针  我没说这个错。   struct Doublelist* lLink, *rLink; 这个昨天我就改了，合着说你压根没看啊 （我一直以为你改完这一句了，不好意思，打扰了） byebye 我看了只不过我以为我那样写也没问题。之后网上百度才知道错了

引用 4 楼 三鑫 galaxy S7 edge(5G)的回复:[quote=引用 2 楼 有恒？无恒？？的回复:]#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在[/quote] 我这个的确有问题，链表没有销毁， 我在vs2017上调试，能跑起来了 我的意思是，能运行了 你自己去做吧

引用 7 楼 有恒？无恒？？ 的回复:[quote=引用 6 楼 三鑫 galaxy S7 edge(5G)的回复:][quote=引用 5 楼 有恒？无恒？？的回复:][quote=引用 4 楼 三鑫 galaxy S7 edge(5G)的回复:][quote=引用 2 楼 有恒？无恒？？的回复:]#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在[/quote] 我这个的确有问题，链表没有销毁， 我在vs2017上调试，能跑起来了 我的意思是，能运行了 你自己去做吧 [/quote] 。。。我把你的改成我的后你的能运行了，而我的却还是不能运行了。而且我的错误在那个r = r->lLink; 错误显示为不允许指针只想不完整的类类型。这啥意思啊？[/quote] 在typedef的时候，你创建了两个自定义类型Dnode,DLinklist DLinklist*这个类型是不存在的  DLinklist list就是Dnode *list（相当于int *） DLinklist *list 是 Dnode **list（相当于int**  ，这个根本不存在）//这个类型你没有定义  你的明白。 没有这个类型，你的形参就是有问题的，要么该形参，要么在typedef的时候加一个类型 [/quote]我知道了是我那个结构体定义时候定义指针域的时候用的是别名的所以错了 改成这样就好了struct Doublelist* lLink, *rLink;而我的是struct Dnode *；不信你改下。而且int**这是二级指针是存在的你可以分步运行试下。

我把你的按我方式改了下你看下可以运行#include <iostream>  using namespace std; #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, * rLink; }Dnode, * DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist* list); Status insertDnode(DLinklist* list, int pos); int main() { 	creatlist(&list); 	printf("%d", list->sData); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist* list) { 	if (!((DLinklist)malloc(sizeof(struct Doublelist)))) 		return Error; 	else 	{ 		*list = (DLinklist)malloc(sizeof(struct Doublelist)); 		(*list)->lLink = (*list)->rLink = '\0'; 		cin >> (*list)->sData; 		length++; 		return OK; 	} } //int main() //{ // // // printf("%b", "我是谁"); // cout << ""<< endl; // return 0; //}   Status insertDnode(DLinklist* list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(struct Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = *list; 			DLinklist p = (DLinklist)malloc(sizeof(struct Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 				p->lLink = r; 				p->rLink = r->lLink; 				r->rLink->lLink = p; 				r->rLink = p; 			} 		} 	} }

引用 2 楼 有恒？无恒？？的回复:#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在

你这个不对，你可以在构造链表函数中将头结点数据赋值，然后再主函数打印你会发现打印不出来

引用 6 楼 三鑫 galaxy S7 edge(5G)的回复:[quote=引用 5 楼 有恒？无恒？？的回复:][quote=引用 4 楼 三鑫 galaxy S7 edge(5G)的回复:][quote=引用 2 楼 有恒？无恒？？的回复:]#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在[/quote] 我这个的确有问题，链表没有销毁， 我在vs2017上调试，能跑起来了 我的意思是，能运行了 你自己去做吧 [/quote] 。。。我把你的改成我的后你的能运行了，而我的却还是不能运行了。而且我的错误在那个r = r->lLink; 错误显示为不允许指针只想不完整的类类型。这啥意思啊？[/quote] 在typedef的时候，你创建了两个自定义类型Dnode,DLinklist DLinklist*这个类型是不存在的  DLinklist list就是Dnode *list（相当于int *） DLinklist *list 是 Dnode **list（相当于int**  ，这个根本不存在）//这个类型你没有定义  你的明白。 没有这个类型，你的形参就是有问题的，要么该形参，要么在typedef的时候加一个类型

引用 5 楼 有恒？无恒？？的回复:[quote=引用 4 楼 三鑫 galaxy S7 edge(5G)的回复:][quote=引用 2 楼 有恒？无恒？？的回复:]#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在[/quote] 我这个的确有问题，链表没有销毁， 我在vs2017上调试，能跑起来了 我的意思是，能运行了 你自己去做吧 [/quote] 。。。我把你的改成我的后你的能运行了，而我的却还是不能运行了。而且我的错误在那个r = r->lLink; 错误显示为不允许指针只想不完整的类类型。这啥意思啊？

ennnnnnn，怎么这么多链表的题。


Question: 单链表逆转函数，两种方式有什么区别？

看着没问题。。


Question: 求问哪里有错误

解决了问题，明白了就要及时结贴 引用 6 楼 qq_45766479 的回复:哦哦，明白了，谢谢哈

哦哦，明白了，谢谢哈

你自己写的invert需要传入的是指针，head的类型就是 node*。

嗯嗯，那个懂了，最后的不懂

楼上说的对，是少了"}"

引用 1 楼 fireyou的回复: #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct node  {     int data;     node *next; } node, *List; void create(int n) {     int a;     List s, L;     L = (List)malloc(sizeof(node));     printf("输入第一个数据:");     scanf("%d", &a);     L->data = a;     for (int i = 2; i <= n; i++)     {         s = (List)malloc(sizeof(node));         printf("输入第i个数据:");         scanf("%d", &a);         s->data = a;         L->next = s;         L = L->next;     } }   //这里少了一个 }     void invert(node *head)     {         node *p, *q;         p = head->next;         head->next = NULL;         while (p != NULL)         {             q = p;             p = p->next;             q->next = head->next;             head->next = q;         }     }     int main()     {         int n;         node *head;         printf("输入链表的长度:");         scanf("%d", &n);         create(n);         printf("输出逆置后的链表:");         invert(head);   //这里用 head     } 最后为什么要用head


引用 3 楼 user-1 的回复:百度应该有结果。 ollydbg od没有64位。

百度应该有结果。 ollydbg

有人回复怎么没内容


Question: C语言题目不会写，求帮忙

好像不对｛do｝有问题

#include<stdio.h> int main(void) { 	do 	{ 		int nCount = 0; 		printf("Please total count: \n"); 		if ((0 == scanf_s("%d", &nCount)) || (nCount <= 0)) { printf("Input count error!"); break; }  		int* pBuffer = new int[nCount]; 		if (NULL == pBuffer) { printf("Alloc memory failed!"); break; }  		printf("please input numbers: \n"); 		int i = 0; 		while (i < nCount) 		{ 			int num = 0; 			if ((0 == scanf_s("%d", &num)) || (num < 0)) { break; } 			 			char c = getchar();  			pBuffer[i++] = num;  			if (c == '\n') { break; } 		}  		if (i < nCount) { printf("Input numbers error!"); break; }  		int nMax = pBuffer[0]; 		for (i = 1; i < nCount; ++i) 		{ 			if (nMax < pBuffer[i]) { nMax = pBuffer[i]; } 		} 		printf("Max number: %d\n", nMax);  		delete[] pBuffer; 		pBuffer = NULL;  	} while (0);  	return 0; }

#include<stdio.h> int main(void) { 	do 	{ 		int nCount = 0; 		printf("Please total count: \n"); 		if (0 == scanf_s("%d", &nCount)) { printf("Input count error!"); break; }  		int* pBuffer = new int[nCount]; 		if (NULL == pBuffer) { printf("Alloc memory failed!"); break; }  		printf("please input numbers: \n"); 		int i = 0; 		while (i < nCount) 		{ 			int num = 0; 			if (0 == scanf_s("%d", &num)) { break; } 			 			char c = getchar();  			pBuffer[i++] = num;  			if (c == '\n') { break; } 		}  		if (i < nCount) { printf("Input numbers error!"); break; }  		int nMax = pBuffer[0]; 		for (i = 1; i < nCount; ++i) 		{ 			if (nMax < pBuffer[i]) { nMax = pBuffer[i]; } 		} 		printf("Max number: %d\n", nMax);  		delete[] pBuffer; 		pBuffer = NULL;  	} while (0);  	return 0; }

我知道for循环，可是操作起来一头雾水

for循环，从前往后查找


Question: 有未处理的异常，写入时发生冲突

可以啦，谢谢

#include <stdio.h> #include <math.h>  //void main() int main() {     char sign;     double a,b,c;      printf("输入一个计算式(如: 2.5+7.5):\n");     //scanf_s("%lf%c%lf",&a,&sign,&b);     scanf_s("%lf%c%lf",&a,&sign, 1, &b);   //指定sign的长度      switch (sign) {         case '+':             c=a+b;             printf("%.2lf+%.2lf=%.2lf\n",a,b,c);             break;          case '-':             c=a-b;             printf("%.2lf-%.2lf=%.2lf\n",a,b,c);             break;          case '*':             c=a*b;             printf("%.2lf*%.2lf=%.2lf\n",a,b,c);             break;          case '/':             c=a/b;             printf("%.2lf/%.2lf=%.2lf\n",a,b,c);             break;          default:             printf("输入错误!!!\n");             break;     }     if(sign=='+'){         c=a+b;         printf("%.2lf+%.2lf=%.2lf\n",a,b,c);     }     else if(sign=='-'){         c=a-b;         printf("%.2lf-%.2lf=%.2lf\n",a,b,c);     }     else if(sign=='*'){         c=a*b;         printf("%.2lf*%.2lf=%.2lf\n",a,b,c);     }     else if(sign=='/'){         c=a/b;         printf("%.2lf/%.2lf=%.2lf\n",a,b,c);     }     else{         printf("输入错误!!!\n");     } }  供参考～

scanf_s("%lf%c%lf", &a,&sign,10, &b); scanf_s 接收字符的时候，需要指定长度，

用 scanf 试试

看着没问题。


Question: 关于二进制补码范围的疑问

呃呃。。。。。。。。。

这个老师，哎…………

引用 5 楼 sako.c的回复:[quote=引用 3 楼 早打大打打核战争的回复:]正数的补码和原码相同，负数的补码是原码取反+1，根本原因在于原码反码的编码中0有正0和负0两种形式，多占了一个编码空间，而补码的编码中每个值有唯一的编码，就可以用原码的负0表示-2^(N-1) 所以这个负零就代表-8是吗？[/quote] 1000就是-8呀，8的原码1000，取反0111，再加1结果为1000，最高为为1，仍为1000。 1000为负数，数据位为000，取返111，再加1为1000，十进制为8，由于是负数，所以为-8

引用 5 楼 sako.c的回复:[quote=引用 3 楼 早打大打打核战争的回复:]正数的补码和原码相同，负数的补码是原码取反+1，根本原因在于原码反码的编码中0有正0和负0两种形式，多占了一个编码空间，而补码的编码中每个值有唯一的编码，就可以用原码的负0表示-2^(N-1) 所以这个负零就代表-8是吗？[/quote] 补码就没有负0，补码时所有数值范围内的都有唯一编码

引用 5 楼 sako.c 的回复:[quote=引用 3 楼 早打大打打核战争的回复:]正数的补码和原码相同，负数的补码是原码取反+1，根本原因在于原码反码的编码中0有正0和负0两种形式，多占了一个编码空间，而补码的编码中每个值有唯一的编码，就可以用原码的负0表示-2^(N-1) 所以这个负零就代表-8是吗？[/quote] 补码中没有-0

引用 6 楼 早打大打打核战争的回复:[quote=引用 5 楼 sako.c 的回复:] [quote=引用 3 楼 早打大打打核战争的回复:]正数的补码和原码相同，负数的补码是原码取反+1，根本原因在于原码反码的编码中0有正0和负0两种形式，多占了一个编码空间，而补码的编码中每个值有唯一的编码，就可以用原码的负0表示-2^(N-1) 所以这个负零就代表-8是吗？[/quote]  如果是4位数那就是-8，8位数就是-128... [/quote] 哦哦，好的，懂了。。。。

引用 5 楼 sako.c 的回复:[quote=引用 3 楼 早打大打打核战争的回复:]正数的补码和原码相同，负数的补码是原码取反+1，根本原因在于原码反码的编码中0有正0和负0两种形式，多占了一个编码空间，而补码的编码中每个值有唯一的编码，就可以用原码的负0表示-2^(N-1) 所以这个负零就代表-8是吗？[/quote]  如果是4位数那就是-8，8位数就是-128...

引用 3 楼 早打大打打核战争的回复:正数的补码和原码相同，负数的补码是原码取反+1，根本原因在于原码反码的编码中0有正0和负0两种形式，多占了一个编码空间，而补码的编码中每个值有唯一的编码，就可以用原码的负0表示-2^(N-1) 所以这个负零就代表-8是吗？

引用 2 楼 liups 的回复:1000怎么就不是-8了？明明就是-8嘛 4位补码范围是-8到+7，其中-8的二进制表示为1000，-1为1111，0为0000，1为0001，7为0111

1000怎么就不是-8了？明明就是-8嘛

这里是有点绕，时不时就忘了，1000表示-8  但是还是不知道为什么。。。


Question: 小白求救

输入一个字符，利用该字符的AsCII码进行条件判断输出就好啦记得结帖给分


Question: 使用API创建控件的问题

直接用MFC啊

原来没有引用#include <CommCtrl.h>，以为一个Windows.h就行了，窗口类也可以使用它定义的了，如cw_treeview,加油


Question: 求能否指点一二，儒生无能，找不出自己的错误所在...

double funcos(double e, double x) {   double f0 = 1, f = 1, s = 1, v;    for (int i = 1; s += (v = (f = -f * x * x) / (f0 *= i * i + i)), abs(v) >= e; i += 2);    return s;     }

#include <stdio.h> #include <math.h>  double funcos(double e, double x);  int main() { 	double e, x;  	scanf("%lf %lf", &e, &x); 	printf("cos(%.2f) = %.6f\n", x, funcos(e, x)); 	system("pause"); 	return 0; }  int fact(int x) { 	int s = 1; 	int i; 	for (i = 1; i <= x; i++) 		s = s*i; 	return s; }  double funcos(double e, double x) { 	double s = 1; 	double item; 	int i = 2; 	int j = 1; 	item = (double)pow(x, i) / fact(i); 	while (item > e) 	{ 		if (j % 2 == 1) 			s = s - item; 		else 			s = s + item; 		i = i + 2; 		j++; 		item = (double)pow(x, i) / fact(i); 	}  	if (j % 2 == 1) 		s = s - item; 	else 		s = s + item; 	return s; }

double funcos,s=1,b,y; 这里给funcos赋一个初值 funcos = 100;随便一个数就行，要不循环可能进不去 楼主可以自己调试一下应该就看出来了

能否指点一二啊？我真的很晕 可能很多函数用的条件不当 ..


Question: 多文件编译，出现这个提示，怎么回事

震惊，多文件编译居然出现了这个提示，男默女泪！

什么提示？都不贴出来的吗


Question: 超低质量的代码写了一个大学外教英语p153的背单词软件

引用 1 楼 user-1的回复:软件和程序不是一个概念吧。。。。  你这顶多算个小程序。 大一学生，不知道 。

引用 楼主 qq_15949349的回复:#include<stdio.h> #include <string.h> #include<Windows.h> int main(void) { printf("感谢MS.白的框架支持")； printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")   char s5[]="abbreviation"; char s6[20];   char s7[]="absence"; char s8[20];  char s11[]="absolutely";   char s12[20]; char s13[]="absolute"; char s14[20]; char s15[]="abundant"; char s16[20];   char s17[]="abundance"; char s18[20]; char s19[]="academics"; char s20[40];   char s21[]="access"; char s22[20]; char s23[]="accessible"; char s24[20]; char s25[]="accompany";   char s26[20]; char s27[]="accomplishment"; char s28[20]; char s29[]="accountable"; char s30[20]; char s33[]="accurate"; char s34[20]; char s35[]="acquite"; char s36[20]; char s37[]="actualize"; char s38[20]; char s39[]="addict"; char s40[20]; char s41[]="addict"; char s42[20]; char s43[]="addictive"; char s44[20]; char s45[]="address"; char s46[20]; char s47[]="admiration"; char s48[20]; char s49[]="adopt"; char s50[20]; char s51[]="adult"; char s52[20]; char s53[]="adulthood"; char s54[20]; char s55[]="advanced"; char s56[20]; char s57[]="affxation"; char s58[20]; char s59[]="aggression"; char s60[20]; char s61[]="aggressive"; char s62[20]; char s63[]="agricultural"; char s64[20]; char s65[]="alarming"; char s66[20]; char s67[]="Albanian"; char s68[20]; char s69[]="ally"; char s70[20]; char s71[]="Ally"; char s72[20]; char s73[]="amaze"; char s74[20];    printf("/abri:vi'fiovn/缩略法1E\n"); printf("请输入英文:");  scanf("%s",&s6); if(strcmp (s5,s6)==0) 	printf("666！"); else 	printf("错误"); //背单词框架3 printf("/aebsans/n快席:缺乏6T\n"); scanf("%s",&s8); if(strcmp (s7,s8)==0) 	printf("666！"); else 	printf("错误"); //背单词框架4  printf("/absaluth/ ad. completely绝对地;完全地6T\n"); scanf("%s",&s12); if(strcmp (s11,s12)==0) 	printf("666！"); else 	printf("错误"); //背单词框架6 printf(" /absalu:t/ a.绝对的4R2, 6T\n"); scanf("%s",&s14); if(strcmp (s13,s14)==0) 	printf("666！"); else 	printf("错误"); //背单词框架7 	printf("/s'bandont/a.大量的，充裕的5T\n"); scanf("%s",&s16); if(strcmp (s15,s16)==0) 	printf("666！"); else 	printf("错误"); //背单词框架8 	printf("/s bandans/n.5T\n"); scanf("%s",&s18); if(strcmp (s17,s18)==0) 	printf("666！"); else 	printf("错误"); //背单词框架9 printf("/ake'demiks/ n. (pl,)学术活动1R1\n"); scanf("%s",&s20); if(strcmp (s19,s20)==0) 	printf("666！"); else 	printf("错误"); //背单词框架10 printf("/'xkses/ n. (usu. followed by to)获得;通道5R1\n"); scanf("%s",&s22); if(strcmp (s21,s22)==0) 	printf("666！"); else 	printf("错误"); //背单词框架11 printf("/sk'sesobl/ a.易接近的，可进入的5R1\n"); scanf("%s",&s24); if(strcmp (s23,s24)==0) 	printf("666！"); else 	printf("错误"); //背单词框架12 printf("/'kampanu/ vt. (fmI) go with (sb.) to a place or event陪同2T\n"); scanf("%s",&s26); if(strcmp (s25,s26)==0) 	printf("666！"); else 	printf("错误"); //背单词框架13 printf(" /'kAmplfmantUn.成就;成绩5T\n"); scanf("%s",&s28); if(strcmp (s27,s28)==0) 	printf("666！"); else 	printf("错误"); //背单词框架14 printf("/s kauntabal/ a.应负责的5R2\n"); scanf("%s",&s30); if(strcmp (s29,s30)==0) 	printf("666！"); else     printf("错误"); //背单词框架15  printf("/ xkjurt/ a.确切的2E\n"); scanf("%s",&s34); if(strcmp (s33,s34)==0) 	printf("666！"); else     printf("错误"); //背单词框架17  printf("/g'kwara/ v.获得5R1\n"); scanf("%s",&s36); if(strcmp (s35,s36)==0) 	printf("666！"); else     printf("错误"); //背单词框架18  printf("  / aektfulaz/ vt.实行，使成为现实1E\n"); scanf("%s",&s38); if(strcmp (s37,s38)==0) 	printf("666！"); else     printf("错误"); //背单词框架19  printf("/ adrkt/ n.有瘾的人6R2\n"); scanf("%s",&s40); if(strcmp (s39,s40)==0) 	printf("666！"); else     printf("错误"); //背单词框架20  printf(" /s'dkt/ vt.使沉溺;使成瘾6R2\n"); scanf("%s",&s42); if(strcmp (s42,s42)==0) 	printf("666！"); else     printf("错误"); //背单词框架21  printf("/s diktv/a.使人上瘾的6T\n"); scanf("%s",&s44); if(strcmp (s43,s44)==0) 	printf("666！"); else     printf("错误"); //背单词框架22  printf(" /s'dres/ vt. dealwith处理;应对4T\n"); scanf("%s",&s46); if(strcmp (s45,s46)==0) 	printf("666！"); else     printf("错误"); //背单词框架23  printf(" /aedma'rerfan/ n.敬佩4E\n"); scanf("%s",&s48); if(strcmp (s47,s48)==0) 	printf("666！"); else printf("错误"); //背单词框架24      printf("/s'dopt/vt.采用4R2\n"); scanf("%s",&s50); if(strcmp (s49,s50)==0) 	printf("666！"); else     printf("错误"); //背单词框架25  printf(" /'aedalt, o'dAlt/n.成人2T\n"); scanf("%s",&s52); if(strcmp (s51,s52)==0) 	printf("666！"); else     printf("错误"); //背单词框架26  printf("/'dAlt,hud/n.成人期2T\n"); scanf("%s",&s54); if(strcmp (s53,s54)==0) 	printf("666！"); else     printf("错误"); //背单词框架27  printf(" /od'va:nst/ a.先进的;高级的5R1affect /'fekt/vt.影响5E\n"); scanf("%s",&s56); if(strcmp (s55,s56)==0) 	printf("666！"); else     printf("错误"); //背单词框架28  printf("/,aefik'serfan/ n.词缀法1Eaffordable / fo:dobol/ a.负担得起的5Taftermath/a:ftoma0/n.后果5Eagency /'erd3nsI/n.机构4T\n"); scanf("%s",&s58); if(strcmp (s57,s58)==0) 	printf("666！"); else     printf("错误"); //背单词框架29  printf("/'grefan/n.侵略3E, 4R2aggressively /'gresrvl/ ad.有闯劲地4T\n"); scanf("%s",&s60); if(strcmp (s59,s60)==0) 	printf("666！"); else     printf("错误"); //背单词框架30  printf("/s'gresiv/ a. having or showingdetermination and energetic pursuit of one'sends有进取心的;有闯劲的4T\n"); scanf("%s",&s62); if(strcmp (s61,s62)==0) 	printf("666！"); else     printf("错误"); //背单词框架31  printf("/,xegrkAltfaral/ a.农业的5R2aid /erd/ vt.援助;帮助4R2aide/erd/n.助手;副官4T\n"); scanf("%s",&s64); if(strcmp (s63,s64)==0) 	printf("666！"); else     printf("错误"); //背单词框架32  printf(" /'la:mm/a.惊人的5R2\n"); scanf("%s",&s66); if(strcmp (s65,s66)==0) 	printf("666！"); else     printf("错误"); //背单词框架33  printf("/ael'bemian/ n.阿尔巴尼亚语1R1Albert Einstein /'aelbot amstan/爱因斯坦2R1\n"); scanf("%s",&s68); if(strcmp (s67,s68)==0) 	printf("666！"); else     printf("错误"); //背单词框架34  printf("/'lau/ n.盟友4R2\n"); scanf("%s",&s70); if(strcmp (s69,s70)==0) 	printf("666！"); else     printf("错误"); //背单词框架35  printf("(特指)二战中的同盟国4R2\n"); scanf("%s",&s72); if(strcmp (s71,s72)==0) 	printf("666！"); else     printf("错误"); //背单词框架36  printf("/'merz/ vt. surprise(sb.) geatly使惊奇:使吃惊3T\n"); scanf("%s",&s74); if(strcmp (s73,s74)==0) 	printf("666！\n"); else     printf("错误\n"); //背单词框架37  printf("请勿用于商业用途\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); printf("源代码为/**/") system("pause"); } 有几个行printf后面忘记加“;”了,记得加上

软件和程序不是一个概念吧。。。。  你这顶多算个小程序。


Question: 字符串中去除A

引用 楼主 weixin_45714880的回复:为啥我的程序运行出来第一个单词没了……怎么解决啊（orz 删除scanf那一行的代码就可以了

没问题了记得结下贴

引用 6 楼 user-3的回复:[quote=引用 5 楼 weixin_45714880的回复:][quote=引用 2 楼 user-3的回复:]第一个单词已经由scanf输入到a了，但是接下来a[i]=getchar又覆盖掉了，这个单词接这样被你搞没了 所以可以问问要怎么做吗？谢谢！！[/quote] 3搂楼会给你试出来的[/quote] 好了hhhhh谢谢你！

引用 7 楼 喜欢做我自己的回复:int main() { int i = 1000; char a[i]; //scanf("%c",a); for(i = 0;(a[i] = getchar()) != '\n';i++) { 	if(a[i] != 'A') 	printf("%c",a[i]); } }  输入：abcdefgABCDEFG 输出：abcdefgBCDEFG   你确定有漏的？ 噢噢噢我懂了！谢谢你！！

引用 7 楼 喜欢做我自己的回复:int main() { int i = 1000; char a[i]; //scanf("%c",a); for(i = 0;(a[i] = getchar()) != '\n';i++) { 	if(a[i] != 'A') 	printf("%c",a[i]); } }  输入：abcdefgABCDEFG 输出：abcdefgBCDEFG   你确定有漏的？ 我把scanf那行删掉就没有漏的了

输入：abcdefg Abcdefg ABcd 输出：abcdefg bcdefg Bcd

引用 5 楼 weixin_45714880的回复:[quote=引用 2 楼 user-3的回复:]第一个单词已经由scanf输入到a了，但是接下来a[i]=getchar又覆盖掉了，这个单词接这样被你搞没了 所以可以问问要怎么做吗？谢谢！！[/quote] 3搂楼会给你试出来的

引用 2 楼 user-3的回复:第一个单词已经由scanf输入到a了，但是接下来a[i]=getchar又覆盖掉了，这个单词接这样被你搞没了 所以可以问问要怎么做吗？谢谢！！

引用 3 楼 喜欢做我自己的回复:int main() { int i = 1000; char a[i]; //scanf("%c",a); for(i = 0;(a[i] = getchar()) != '\n';i++) { 	if(a[i] != 'A') 	printf("%c",a[i]); } } 我试过这样🙈这个就是丢失第一个字母orz

我没看出来问题救救孩子吧


Question: 求助C语言大神！！数组在内存发配中总为null

你又没赋值，也没分配内存、

刚声明的这个变量，怎么会有值呢？

int bracketmatch(char *str) {     //SeqStack *ss;                       //程序运行到这边显示ss是null     SeqStack ss_node;     SeqStack *ss;                       //程序运行到这边显示ss是null     initSeqStack(&ss_node);     ss = &ss_node;     int i = 0;     while (str[i] != '\0') {         push(ss, str, i);         if (str[i] == ')') {             destorySeqStackA(ss);         }         if (str[i] == ']') {             destorySeqStackB(ss);         }         if (str[i] == '}') {             destorySeqStackC(ss);         }         if (destorySeqStackA(ss) == 0 || destorySeqStackB(ss) == 0 || destorySeqStackC(ss) == 0) {             return 0;         }     }     return 1; }  供参考～  另外一个问题，楼主的代码里没有判断栈空的情况，建议把这种情况加进去～

对，是垃圾值，什么值都有可能！ 引用 4 楼 user-4 的回复:引用 3 楼 fireyou 的回复:局部变量申明时不初始化，一般都会有一个默认的值，指针一般默认为NULL错了是垃圾值

局部变量申明时不初始化，一般都会有一个默认的值，指针一般默认为NULL


Question: 求问，linux下代码中malloc后没有free的空间操作系统有没有办法释放

有这种事情吗？malloc分配的内存空间随着进程退出之后自然就释放了呀。楼主这个可能不是这个原因吧


Question: 突然发现，csdn很多都是伸手党。

第一次见这种写法，，，，

a%10计算这么多次，要先用个变量算一下，直接printf带%d参数就行了，不需要这么多if

引用 8 楼 jiht594 的回复：int arr[] = {0,1,2,3,...,9} 余数 = a % 10; printf("%d\n", arr[余数]);  能短点直接把余数赋值进去不直接好了嘛，用数组就多了一步了吧

引用 7 楼 fireyou 的回复： if(a>=10&&a<=99) {     printf("个位数是%d\n, a%10"); } else if(a>=100&&a<=999) {     printf("%d\n", a/100);     printf("%d\n", a%10); } 	if(a>=10&&a<=99)    //两位数 	printf("两位数\n个位数：%d\n",a%10); 	if(a>=100&&a<=999)	//三位数 	printf("三位数\n%d*%d\n",a/100,a%10); 这样写的，应该更短，把两个放一块

引用 5 楼 CSDN新手乐园常驻人口 的回复:[quote=引用 3 楼 fireyou 的回复：]楼上的是好办法 不用if， 直接  printf("个位数是%d\n, a%10");可是三位数和两位数给的条件不一样啊 [/quote] 你不可以自己研究一下吗？至少每一位可以类似的写法嘛

引用 3 楼 fireyou 的回复：楼上的是好办法 不用if， 直接  printf("个位数是%d\n, a%10");可是三位数和两位数给的条件不一样啊

哇，谢谢，这样子一写少一半啊

引用 1 楼 CSDN新手乐园常驻人口 的回复:除了那个条件可以写成switch语句，还有啥可以优化的 if(a%10==2) printf("2\n"); 这种语句太多了，难道不可以这样写吗： printf("%d\n",a%10); if也不需要了

引用 10 楼 CSDN新手乐园常驻人口 的回复:[quote=引用 8 楼 jiht594 的回复：]int arr[] = {0,1,2,3,...,9} 余数 = a % 10; printf("%d\n", arr[余数]);  能短点直接把余数赋值进去不直接好了嘛，用数组就多了一步了吧[/quote] 没错. 不过如果数据没有规律, 就得用数组了. 比如int arr[] = {10,111,22,36,...,9}

引用 12 楼 wowpH 的回复：第一次见这种写法，，，，初学者，low确实挺low

我来吐槽下，楼主说的不错，回了好多帖子，很多问题都解决了，但大部分就是不结贴，很无语

除了那个条件可以写成switch语句，还有啥可以优化的


Question: 二维数组排序

因为一行有3个元素，y=0时，取b[0],b[1],b[2]; y=1时，取b[3],b[4],b[5]


Question: vs编译器cl可以只编译不链接?

Ctrl + F7  编译


Question: 为什么q输出不是21呢？

编译器不一样，结果不一致，可能不同编译器计算顺序不一样。 VS结果 q为24

q=(++j)+(++j)+(++j) =(j=6)+(++j)+(++j) =(j=7)+(j=7)+(++j) =14+(++j) =14+8 =22

百度序列点，你就会知道你的问题都是毫无意义的，答案是未定义的


Question: CRC校验

代码本身没有问题，可能是代码的计算方式和数据的计算方式不一样 你需要知道你需要校验的数据的CRC计算方式是什么 你现在代码的多项式是x16+x15+x2+1，还有其他的例如x16+x12+x5+1 CRC计算有不同的标准，主要是计算多项式和初始值不一样


Question: 求教C语言练习题

百度一下水仙花有很多例子，为什么不自己先找一找呢


Question: C语言中exit (0)和exit (1)的区别

Terminates the calling process. The exit function terminates it after cleanup; _exit and _Exit terminate it immediately.

不是只有exit(0)表示正常退出，其他的数都是异常退出吗？

我自己的理解就是，return是函数退出，命令目标是调用者。exit是程序退出，目标也是调用者（系统）


Question: 求助，hello

重启软件解决了，什么鬼

你让大家看什么？代码呢？主要的没有贴出来呢～


Question: 请举例说明下面代码里的b 和 c 该怎么用。谢谢

说错了，楼上的B是函数指针类型，b是一个函数类型，区别用法： b *func_b = .... B func_B = ....

typedef int (*b) (int c); 供参考～  楼主定义的看着别扭，应该是如上的定义吧。 这是定义了一个函数指针类型，即是类型。

b是一个定义的函数指针类型，c就是函数指针的一个参数名，可以省略，定义这个函数的时候，c的名字也可以改成其他名字。

?  typedef int(*B)(int c);


Question: C语言题目，不会做，求助大家

#include<stdio.h> int main(void) {     int n, m;     int i = 0;     printf("Please input your two number \n");     scanf("%d %d",&n, &m);     while (i < n)     {         int j = 0;         while (j < n)         {             printf("%d  ", m);             j++;         }         printf("\n");         i++;     }     getchar();     getchar();     return 0; }

好的，谢谢大家

while (j < n) 改成while (j <= i)即可  引用 4 楼 wenyehuang 的回复:从键盘输入数N和M，请使用循环来输出N行由数M组成的图形。  输入     输入两个整数N和M，两数间用空格隔开。  输出     输出相关数字图形。  输入示例     4 35  输出示例     35    3535    353535    35353535  数据范围     输入为int范围的整数

上面的代码中while (j < n) 一行修改成 while (j < i)

你要输出怎样的图形？？

输出的结果不对呀


Question: c语言错误

不是考试的话，可以敲敲代码看看。

问题很多，其中最严重的是倒数第2行，s的值不能确定

都是错，先编译过再说吧


Question: 怎么编译多文件程序

新建项目后，在从项目里新建新的文件或者导入写好的文件 就可以了

引用 4 楼 user-2的回复:[quote=引用 3 楼 weixin_45589388 的回复:] [quote=引用 1 楼 user-2的回复:]新建项目，选择第二个App开头的那个，然后新建文件都放在同一个目录下就可以了。 windows application?是这个嘛？[/quote]Console Application[/quote] 文件目录就是项目名？

引用 3 楼 weixin_45589388 的回复:[quote=引用 1 楼 user-2的回复:]新建项目，选择第二个App开头的那个，然后新建文件都放在同一个目录下就可以了。 windows application?是这个嘛？[/quote]Console Application

引用 1 楼 user-2的回复:新建项目，选择第二个App开头的那个，然后新建文件都放在同一个目录下就可以了。 windows application?是这个嘛？

windows application?是这个嘛？

新建项目，选择第二个App开头的那个，然后新建文件都放在同一个目录下就可以了。


Question: c语言

int main() { 	 	float bmi_val,tizhong,shenggao; 	printf("输入身高CM:"); 	scanf("%f",&shengao); 	printf("输入体重Kg:"); 	scanf("%f",&tizhong); 	 	bmi_val = tizhong/(shengao*shengao/10000); 	printf("BMI:%f\n",bmi_val);  return 0; }   我随手敲的，没调试，你自己测试一下。


Question: c语言程序

int main() { 	int m=1,n=1,shang_val=0;yushu=0; 	shang_val = m/n;  	yushu = m%n;  	 	printf("%d,%d",shang_val,yushu); 	 	return 0; 	 } 随手敲的，自己调试。 应该自己动手去尝试。

取余用这个符号：%


Question: 如果不是使用scanf函数的%s格式或gets函数输入字符串(例如getchar),请一定要在输入的每个字符串后加‘\0',否则printf和puts输出字符串

引用 4 楼 weixin_45713744 的回复:[quote=引用 1 楼 wowpH 的回复:] 你贴的代码又没加结束符‘\0’。  #include<stdio.h> int main() { 	char str[15]; 	int i; 	for (i = 0; i < 4; i++) { 		str[i] = getchar(); 	} 	str[i] = '\0'; 	puts(str); 	return 0; }为什么使用DEV不会出现上述问题？[/quote]    从上图可以看到，DevCpp也是会出错的。 第14行是输入前的str的内存信息。有两个地方是错的。但是其他地方都初始化为0了。我也不知道为什么。 但是至少能看出来：不初始化字符数组是不安全的。 从黑框框的第1行输出可知。  我输入8个字符后，在左边可以看到后面一位刚好是\034，这并不是结束符。所以黑框框的第3行是乱码。  如果你输入的字符不是8个，而是1个，2个等等的话，由于后面一位就是结束符'\0'，所以就出现了你说的情况。  总之，两种做法，1、初始化（如第3行所示）；2、末尾加结束符。才能保证安全。  另外，DevCpp很垃圾的。。。至少我这么认为的。

引用 1 楼 wowpH 的回复:你贴的代码又没加结束符‘\0’。  #include<stdio.h> int main() { 	char str[15]; 	int i; 	for (i = 0; i < 4; i++) { 		str[i] = getchar(); 	} 	str[i] = '\0'; 	puts(str); 	return 0; }为什么使用DEV不会出现上述问题？

引用 1 楼 wowpH 的回复:你贴的代码又没加结束符‘\0’。  #include<stdio.h> int main() { 	char str[15]; 	int i; 	for (i = 0; i < 4; i++) { 		str[i] = getchar(); 	} 	str[i] = '\0'; 	puts(str); 	return 0; }  噢噢噢！明白明白了，谢谢。嘻嘻。


Question: 明显调用的表达式前的括号必须具有（指针）函数型；项不会计算为接受1个参数的函数

第56行的变量名和函数名同名了。

首先 1. 二维数组作为函数参数一般不这么定义  double getA(double R[M][M])  2. scanf_s("%f", &R[i][j]);  函数的用法你先确定是这么用的吗？ 一般用scanf("%f", &R[i][j]);  3. printf("%f\n", getA(R[M][M]));  当M为3的时候， R[3][3] 是不存在的，已经越界了，数组下标是从0开始的。


Question: 小白一枚，各位高手帮忙看一下哪里出错了，我20翻转出来是2不是02

引用 4 楼 wowpH 的回复：可以当成一个字符串来收，反着输出即可。谢谢，已经解决了。

可以当成一个字符串来收，反着输出即可。

引用 2 楼 自信男孩 的回复：[quote=引用 1 楼 自信男孩 的回复:]  if (tmp < -10 || tmp > 10)     printf("%02d\n", r); else     printf("%d\n", r);  改成这样试试~  tmp是放在scanf之后，tmp  = n;即保存输入的n值，因为下面是对n计算了，值变了。 不严谨，改成这样：  if (tmp <= -10 || tmp >= 10)[/quote]😂测试了一下好像还是有点错误，应该是我自己的原因。还是非常感谢🙏

引用 1 楼 自信男孩 的回复: if (tmp < -10 || tmp > 10)     printf("%02d\n", r); else     printf("%d\n", r);  改成这样试试~  tmp是放在scanf之后，tmp  = n;即保存输入的n值，因为下面是对n计算了，值变了。 不严谨，改成这样：  if (tmp <= -10 || tmp >= 10)


Question: 关于利用c++做图形学的一道题

这和c++有什么关系，看你用什么图形库啊


Question: errow c4430到底是怎么回事？  VS跟C++的语言编写一样吗？

需要指定函数返回类型

#include<stdio.h> int main() {     printf("hello");     return 0; }  需要制定main的返回类型


Question: c语言

你输入的是什么？ 如果是数字串，那么结果是“a是数字”那是正常的。 如果输入的是字母还是输出“a是数字”那就是有问题了。

引用 1 楼 MRS1995 的回复:char ch; 大写字母   ch > 'A' && ch < 'Z' ; 小写字母   ch > 'a' && ch <'z' ; 数字          ch > '0' && ch < '9' ; 至于控制字符，我不知道是什么 其他都算控制字符


Question: C语言$的运用

里面的$和*这些应该是正则表达式，不过没看懂这个正则匹配的是什么。

没见过，C语言里$没有特殊作用吧，你这代码能编译运行吗

有大佬知道么。。。分不多，不胜感激


Question: 编译时出现这种提示，怎么解决

嘿嘿，想起了我初中时候拿山寨手机，用mpc自学编程那段岁月

手机不离身嘛，电脑再家里，碎片的时候就拿手机写写咯。

为什么有电脑还要用手机编程啊。

引用 8 楼 提及的回复:分成多个文件啊，还能怎么改  ps：能不能稍微规范一下文件名，一会儿点，一会儿横杠的，乱。 可不可以加了wx?方便嘛？

引用 13 楼 weixin_45589388的回复:[quote=引用 12 楼 WindyValley的回复:]你这是直接复制的代码吧，人家用注释表明了哪一段代码放到哪一个文件，你就直接粘贴到一个default.c里面，编译器能找到文件就是出了鬼了 我是做不出，然后看着答案运行下，结果都运行不大懂，不知道怎么弄[/quote] 像标注了头文件和源文件内容的，比如这个，你可以 //pe12-2a.h 标注后面的内容，粘贴到原本 #include "pe12-2a.h" 的位置。然后include这一行就可以去掉了，因为预处理器在处理#include的时候，会把头文件里面的内容完整的展开在你include它的地方，这样做就相当于你提前做了预处理器的工作

引用 12 楼 WindyValley的回复:你这是直接复制的代码吧，人家用注释表明了哪一段代码放到哪一个文件，你就直接粘贴到一个default.c里面，编译器能找到文件就是出了鬼了 我是做不出，然后看着答案运行下，结果都运行不大懂，不知道怎么弄

引用 6 楼 提及的回复:？？？？？？？？？？    我怎么瞧见你将你发的代码放在一个文件里？  还是怎么滴？ 不知道，您帮忙看下怎么改？

？？？？？？？？？？    我怎么瞧见你将你发的代码放在一个文件里？  还是怎么滴？

引用 4 楼 自信男孩的回复:头文件是否和源文件在同一目录下，如果不是建议使用相对路径引入～ 上面是代码，您帮忙看一下。那是课后编程练习的答案，想试着运行一下老是运行不了，新手懂得少，麻烦您看一下，该怎么改

头文件是否和源文件在同一目录下，如果不是建议使用相对路径引入～

引用 1 楼 user-6的回复:找不到文件 此头文件路径是否正确 //pe12-2a.c #include<stdio.h> #include"pe12-2a.h" int main(void) {   int mode; printf("Enter 0 for metric mode,I for US mode:") scanf("%d",&mode); while(mode>=0) {   set_mode(mode);   get_info(); printf("Enter 0 for metric mode,1 for US mode"); printf("(-1 to quit):"); scanf("%d",&mode); } printf("Done\n"); return 0; } ////////////////  //pe12.2a.c #include<stdio.h> #include"pe12-2a.h"  static int present mode=MEITRIC; static double distance; static double fuel;  void set_mode(int mode) {   if(mode==METRIC||mode==US) present_mode=mode; else printf("Invalid mode specified.Mode%s used\n", present_mode==METRIC?"0(METRIC"):"1(US)");  }  void get_info(void) {  if(present_mode==METRIC) { printf("Enter distance traveled in kilometers:"); printf("%lf",&distance); printf("Enter fuel consumed in liters:"); scanf("%lf",&fuel);  } else {  printf("Enter distance traveled in miles:");  scanf("%lf",&distance);  printf("Enter fuel consumed in gallons:"); scanf("%lf",&fuel);  } void show_info(void) {  if(present_mode==METRIC) printf("Fuel consumption is%g liters per 100 km.\n", fuel/distance/100)); else printf("Fuel consumption is%g miles per gallon.\n", distance/fuel); } }      /////////// //pe-12-2b.c #include<stdio.h> #include"pe12-2a.h"  int main(void) {   printf("Enter 0 for metric  modern .1 for US mode:");   scanf("%d",&mode); while(mode==0) {   set_mode(mode);   get_info(); show_info(); printf("Enter 0 for metric mode.1 for US mode:"); printf("(-1 to quit):"); scanf("%d",&mode); } printf("Done.\n"); return 0; }   ///::/::// //pe12-2a.h #define METRIC 0 #define US 1 void set_mode(int); void get_info(void); void_show_info(void);       这是代码，麻烦看一下，实在搞不懂怎么不行，麻烦了

找不到文件 此头文件路径是否正确


Question: 本人大一小白，求指导

引用 1 楼 自信男孩的回复:建议直接贴代码～并把问题描述清楚～ 问题是图1问题，我敲的代码是图二

建议直接贴代码～并把问题描述清楚～

#include <stdio.h> int main(int argc,char *argv[]) {         int centimeter;         float foot,inch;         scanf("%d",¢imeter);         foot = centimeter / 30.48;         inch = centimeter / (30.48 / 12) - (int)foot * 12 ;         printf("foot = %d\tinch = %d\n",(int)foot,(int)inch);         return 0; } 不知道有没有问题


Question: 大佬指点一下

多组输入不能输出，老哥，这又是为什么呢？

引用 2 楼 casere 的回复:[quote=引用 1 楼 自信男孩的回复:]float类型的输入格式是%f，不是%lf  另外，c1是和'A'比较吧，不是和A比较。  这些编译时会给出相应的error和warning 需用对‘A’定义吗？[/quote] 不需要，因为'A'是常量.可以看一下'A'对应的十进制值。

引用 1 楼 自信男孩的回复:float类型的输入格式是%f，不是%lf  另外，c1是和'A'比较吧，不是和A比较。  这些编译时会给出相应的error和warning 需用对‘A’定义吗？


Question: 菜鸟关于fread()函数读取文本文件出现的问题，求指点

引用 3 楼 赵4老师 的回复:fopen “rt”此处应改为“rb" fread非常感谢您的指点，但将“rt”改为“rb"后，上面三处的打印结果没有改变，问题仍没能解决

fopen “rt”此处应改为“rb" fread

引用 1 楼 赵4老师 的回复:不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了麻烦赵老师，细说一下，实力太弱，未能看懂与我代码间存在问题的关系

#include <stdio.h> #include <string.h> #include<stdlib.h>  #define SIZE 30000  struct IMU_data {     //char time[9];     char time[16];     double Accex;     double Accey;     double Accez;     double Gyrox;     double Gyroy;     double Gyroz;     //double Magnetx;     //double Magnety;     //double Magnetz;     int Magnetx;     int Magnety;     int Magnetz;  }imu[SIZE];  int main() {     int i = 0; long curpos, len1, len2;     FILE* fp = fopen("INS_d.txt", "rt");     if (NULL == fp)     {         printf("failed to open dos.txt\n");         exit(0);     }     fseek(fp, 0L, SEEK_END);     len1 = ftell(fp);     fseek(fp, 0L, SEEK_SET);     len2 = ftell(fp);     while (len2 != len1)     {         fread(&imu[i].time, 16, 1, fp);         fread(&imu[i].Accex, 8, 1, fp);         fread(&imu[i].Accey, 8, 1, fp);         fread(&imu[i].Accez, 8, 1, fp);         fread(&imu[i].Gyrox, 8, 1, fp);         fread(&imu[i].Gyroy, 8, 1, fp);         fread(&imu[i].Gyroz, 8, 1, fp);         fread(&imu[i].Magnetx, 4, 1, fp);         fread(&imu[i].Magnety, 4, 1, fp);         fread(&imu[i].Magnetz, 8, 1, fp);         //printf("%-9s %1.9f %1.9f %1.9f %1.4f %1.4f %1.4f,%2d,%2d,%2d\n", imu[i].time, imu[i].Accex, imu[i].Accey, imu[i].Accez, imu[i].Gyrox, imu[i].Gyroy, imu[i].Gyroz, imu[i].Magnetx, imu[i].Magnety, imu[i].Magnetz); //此处打印出现多余值，详见图1；         printf("%-9s %1.9lf %1.9lf %1.9lf %1.4lf %1.4lf %1.4lf,%2d,%2d,%2d\n", imu[i].time, imu[i].Accex, imu[i].Accey, imu[i].Accez, imu[i].Gyrox, imu[i].Gyroy, imu[i].Gyroz, imu[i].Magnetx, imu[i].Magnety, imu[i].Magnetz); //此处打印出现多余值，详见图1；         i++;         len2 = ftell(fp);     }     fclose(fp);     i = 0;     //printf("%-8s,%.9f,%.9f,%.9f,%.4f,%.4f,%.4f,%4d,%4d,%4d", imu[i].time, imu[i].Accex, imu[i].Accey, imu[i].Accez, imu[i].Gyrox, imu[i].Gyroy, imu[i].Gyroz, imu[i].Magnetx, imu[i].Magnety, imu[i].Magnetz);//此处尝试再次打印第1个结构体数组，但结果打印出全部数据，且再结尾处出现多余值，详见图2；     printf("%-8s,%.9lf,%.9lf,%.9lf,%.4lf,%.4lf,%.4lf,%4d,%4d,%4d", imu[i].time, imu[i].Accex, imu[i].Accey, imu[i].Accez, imu[i].Gyrox, imu[i].Gyroy, imu[i].Gyroz, imu[i].Magnetx, imu[i].Magnety, imu[i].Magnetz);//此处尝试再次打印第1个结构体数组，但结果打印出全部数据，且再结尾处出现多余值，详见图2；     printf("\n");     printf("%.9f", imu[9].Accex);//尝试调用任一结构体数组里的值，但输出为“0.00000”，详见图3；      return 0; }  供参考～  如果你的文件内容不是fwrite写入的，那么用fread读取可能不能正确解析到。 因此，如果是图2的文件内容，建议用fscanf读取～


Question: C语言问题，跪求大神解决。

你可以Debug模式下F10单步执行看看就很清楚了`

本人主编python，对C小白一枚，大神也可用python逻辑讲解，在此先谢谢了！


Question: 【求助】关于回调函数的一个小问题

引用 4 楼 自信男孩的回复:因为类型不匹配，你定义的函数指针是没有返回值的:void，但是指向的函数是有返回值的:void *  第二个程序可以考虑这样： void* (*pocketFunc)(); 这样定义一个返回值是void *的函数指针就可以编译成功了～ 嗯嗯可以用了！谢谢老哥！

引用 3 楼 提及的回复:点错了   void *pocketSwitch()  返回的是 void* 类型  你应该使用 typedef   typedef void(*Fp)();  Fp pocketSwitch(){ return normalPocket;}   啊啊啊可以用了！谢谢老哥！

这时候就需要 赵4老师 了  见 https://bbs.csdn.net/topics/394731057  请问 x00 是什么

有些变量为什么定义为寄存器变量呢，我把那些变量改为正常变量后，程序是可以正常运行的


Question: 大佬们，你们知道这个怎么分析吗

ASCII码也是int范围内的。ASCII码都有对应的十进制。

？？c打印字符，d打印数字。97 98 a b

这个需要分析吗？9798就是0x61 0x62，字符显示就是a b，整数显示还是9798


Question: 求救

兄弟，你再去确认下题目

有多少种情况还差不多

我想你多半看错题干了

题就是这样的啊  不会

最少不就是都用5角~~ 都没条件，怎么玩？？


Question: 新手请教

在32位应用中，指针占用了四个字节存储空间，它所指向的空间，一般是另一处的，可能是一个字节，也可能是一万个字节，要看怎么去定义。


Question: 求教！

一个程序有且只能有一个mani()函数

一个程序里不能有两个main，相当于程序执行有两个入口，要进入那个入口？ 一山不容二虎～

一个程序，只能有一个main。

好哒好哒好哒，谢谢各位大佬


Question: 跪求大神帮找C语言全排列的错误

仅供参考：//qplw.cpp #include <stdio.h> #include <string.h> #include <stdlib.h> int v=0; int w=0; int m;//记录字符串长度 int n;//记录字符串中的字符种类数 char map[256];//记录是哪几种字符 int count[256];//记录每种字符有多少个 int stack[1000];//递归用的栈，并记录当前生成的排列 void Make_Map(char *str) {//统计字符串的相关信息     int s[256];     int i;     memset(s,0,sizeof(s));     memset(count,0,sizeof(count));     m=strlen(str);     if (w<1 || m<w) w=m;     while(*str) {         s[*str]++;         str++;     }     n=0;     for (i=0;i<256;i++)         if (s[i]) {             map[n]=i;             count[n]=s[i];             n++;         } } void Find(int depth) {//递归式回溯法生成全排列     if (depth==w) {         int i;         for (i=0;i<depth;i++) putchar(map[stack[i]]);         putchar('\n');     } else {         int i;         if (v && depth>0) {             for (i=0;i<depth;i++) putchar(map[stack[i]]);             putchar('\n');         }         for (i=0;i<n;i++)             if (count[i]) {                 stack[depth]=i;                 count[i]--;                 Find(depth+1);                 count[i]++;             }     } } void main(int argc,char**argv) {     if (argc<2) {         printf("%s 要产生全排列的字符串 [限定长度|-1]\n",argv[0]);         return;     }     if (argc>=3) w=atoi(argv[2]);     if (-1==w) v=1;     Make_Map(argv[1]);     Find(0); } //C:\test>qplw //qplw 要产生全排列的字符串 [限定长度|-1] // //C:\test>qplw 123 //123 //132 //213 //231 //312 //321 // //C:\test>qplw 123 2 //12 //13 //21 //23 //31 //32 // //C:\test>qplw 122333 3 //122 //123 //132 //133 //212 //213 //221 //223 //231 //232 //233 //312 //313 //321 //322 //323 //331 //332 //333 // //C:\test>qplw 123 -1 //1 //12 //123 //13 //132 //2 //21 //213 //23 //231 //3 //31 //312 //32 //321 //  “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出


Question: 求解sfy之素数大佬进来看一下

拿个数组把输入存起来，输入结束再挨个判断呗


Question: 哪位大佬救救我？

printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

printf参数写错了，改成 printf("%x",a);

去掉printf中的&,加上&就是a的地址，不是a变量的值了。


Question: 冒泡排序

引用 3 楼 自信男孩 的回复:[quote=引用 1 楼 就叫我小王吧 的回复:] 所以楼主是来送分的吗 没看出楼主的冒泡排序有问题吗？ 内层循环的判断跑哪去了？  if (nums[j] < nums[j+1]) //这儿根据是升序还是降序来决定是>还是<[/quote]  楼主都没问问题，我没有看他的代码，还以为他是要直接送分

引用 1 楼 就叫我小王吧 的回复:所以楼主是来送分的吗 没看出楼主的冒泡排序有问题吗？ 内层循环的判断跑哪去了？  if (nums[j] < nums[j+1]) //这儿根据是升序还是降序来决定是>还是<

引用 1 楼 就叫我小王吧的回复:所以楼主是来送分的吗 哈哈，最近报班学的嵌入式c基础. ，刚考完试，没咋打好，来求点分数安慰

所以楼主是来送分的吗


Question: c语言求平均值，为什么这样不行

首先double类型用%lf，所以把输入和输出都改成%lf即可～  另外，注意scanf中的逗号，输入时应该注意和scanf中的保持一致

引用 3 楼 weixin_45761167 的回复:[quote=引用 1 楼 就叫我小王吧的回复:]scanf("%d,%d",&a,&b); 其中的%d代表整型，你的ab都是double型，应该用%f 问了同学，说要用lf%不是f%，不过还是谢谢你[/quote]   1、printf输出float和double都可以用%f，double还可以用%lf。 2、 scanf输入float用%f，double输入用%lf，不能混用。对于scanf，情况不同于printf，它接受指针，这里没有类似的类型提升。（通过指针）向float存储和向double存储大不一样，因此，scanf区别%f和%lf。

引用 2 楼 weixin_45761167 的回复:问了同学，说要用lf%不是f%，不过还是谢谢你  不用谢。%f和%lf都可以输出实型数，只是保留的小数点后面的位数不一样，看想要的精度来选择。

引用 楼主 weixin_45761167的回复: 要保留多少精度？可以把double改为float，输出时用%f也行，%f和%lf差别不大

好的，我明白了问题的所在

引用 1 楼 就叫我小王吧的回复:scanf("%d,%d",&a,&b); 其中的%d代表整型，你的ab都是double型，应该用%f 问了同学，说要用lf%不是f%，不过还是谢谢你

问了同学，说要用lf%不是f%，不过还是谢谢你


Question: 新手请教，为什么字符串输入输出为什么要用数组呢？scanf还能理解，printf根本不需要啊？

printf没说要数组呢，可以这样的： char *str = "string"; printf("%s\n", str); 但是str就不能用scanf去修改了（写），因为str是只读的～


Question: 求助，函数调用却不执行

引用 8 楼 user-1的回复: 嗯嗯，看懂了，谢谢啦

引用 5 楼 user-1的回复:这是别人写的代码吧。能写出这么多的人应该不会犯这么低级的错误。  int main() { void creat();// 你确定是这么写的？  int choice=0; .... 好的，懂了。。。。。。。是我太傻了。。

引用 5 楼 user-1的回复:这是别人写的代码吧。能写出这么多的人应该不会犯这么低级的错误。  int main() { void creat();// 你确定是这么写的？  int choice=0; .... 这是我自己写的。而且我还是没发现有什么问题。。

为什么要发两遍代码。。。

主函数不调用creat函数。

#include<stdio.h>  typedef struct member_infor { 	int book_num; 	char book_name[20]; 	char person[20]; 	int fine; 	int days; 	int sum_fine; 	int fine_rank; }book; book infor[15]; int n;   void creat(); void search(book infor[],int ); void search(book infor[],int ); void insert(book infor5[],book ); void del(book infor[],int ); void sum(book infor[]); void average(book infor[]); void sort(book infor[]); void print1(book infor[]); void print1(book infor[]); void print3(book infor[]);   void creat() { 	int i=0; 	n=0; 	FILE*fp; 	fp=fopen("返款信息.txt","r"); 	while(!feof(fp)) 	{ 		fscanf(fp,"%d %s %s %d %d %d %d",&infor[i].book_num,infor[i].book_name[20],infor[i].person[20], 			   &infor[i].fine,&infor[i].days,&infor[i].sum_fine,&infor[i].fine_rank); 		i++; 	} 	n=i-1;     infor[n+1].book_num=0; }  void search(book infor[],int number) { 	int i; 	while(infor[i].book_num!=number&&i<10) 	{ 		i++; 	} 	if(infor[i].book_num==number) 	{ 		printf("%d %s %s %d %d",infor[i].book_num,infor[i].book_name,infor[i].person,infor[i].fine, 		                    infor[i].days); 	} 	else printf("无此书"); }  void insert(book infor[],book new_book) { 	int i=0; 	int j=n; 	while(infor[i].book_num>new_book.book_num&&i<=n) 	{ 		i++; 	} 	if(infor[i].book_num<=new_book.book_num) 	{ 		for(;j>=i;j--) 		{ 			infor[j+1]=infor[j]; 		} 		infor[i]=new_book; 	} 	else infor[10]=new_book; 	infor[n+1].book_num=0; }  void del(book infor[],int number) { 	int i=0; 	int j=n; 	while(infor[i].book_num!=number&&i<=n) 	{ 		i++; 	} 	if(infor[i].book_num==number) 	{ 		for(;i<=n;i++) 		{ 			infor[i]=infor[i+1]; 		} 		infor[i].book_num=0; 		n--; 	} 	else printf("无此书"); }  void sum(book infor[]) { 	for(int i=0;i<n;i++) 	{ 		infor[i].sum_fine=infor[i].days*infor[i].fine; 	} }   void average(book infor[]) { 	float total=0; 	float aver=0; 	for(int i=0;i<n;i++) 	{ 	     total+=infor[i].sum_fine; 	} 	aver=total/n; 	printf("%d",aver); }  void sort(book infor[]) { 	int i; 	sum(infor); 	book temp; 	for(i=0;i<n-1;i++) 	{ 		for(int j=i+1;j<n;j++) 		if(infor[j].sum_fine<infor[i].sum_fine) 		{ 			temp=infor[j]; 			infor[j]=infor[i]; 			infor[i]=temp; 		} 	}     for(i=0;i<n;i++) 	{ 		infor[i].fine_rank=i; 	} }  void print1(book infor[15]) { 	for(int i=0;i<n;i++) 	{ 		printf("%d %s %s %d %d %d %d",infor[i].book_num,infor[i].book_name[20],infor[i].person[20], 			   infor[i].fine,infor[i].days); 	} }  void print2(book infor[15]) {      for(int i=0;i<n;i++) 	 { 		 printf("%d %s %s %d %d %d",infor[i].book_num,infor[i].book_name,infor[i].person,infor[i].fine, 		                    infor[i].days,infor[i].sum_fine); 	 } }  void print3(book infor[15]) {      for(int i=0;i<n;i++) 	 { 		 printf("%d %s %s %d %d %d %d",infor[i].book_num,infor[i].book_name,infor[i].person,infor[i].fine, 		                    infor[i].days,infor[i].sum_fine,infor[i].fine_rank); 	 } }  void creat(); int main() { void creat();  	int choice=0; 	while(choice!=7) 	{ 	printf("                   1.查找书"); 	printf("                   2.插入"); 	printf("                   3.删除"); 	printf("                   4.每本书罚款总额"); 	printf("                   5.总罚款平均值"); 	printf("                   6.排序"); 	printf("                   7.退出"); 	printf("选择菜单序号"); 	scanf("%d",&choice); 	switch(choice) 	{ 	case 1: 		int number; 		 		printf("输入书序号"); 		scanf("%d",&number); 		search(infor,number); 		break; 	case 2: 		book new_book; 		printf("输入一本书的罚款信息"); 		scanf("%d %s %s %d %d %d %d",&new_book.book_num,new_book.book_name[20],new_book.person[20], 			   &new_book.fine,&new_book.days,&new_book.sum_fine,&new_book.fine_rank); 		insert(infor,new_book); 		print1(infor); 		break; 	case 3:  		printf("输入书序号"); 		scanf("%d",&number); 		del(infor,number); 		print1(infor); 		break; 	case 4:  		sum(infor); 		print2(infor); 		break; 	case 5: 		average(infor); 		break; 	case 6: 		sum(infor); 		sort(infor); 		print3(infor); 		break; 	case 7: 		break; 	default:printf("无此选项，重选");break; 	} 	} 	return 0; }

#include<stdio.h>  typedef struct member_infor { 	int book_num; 	char book_name[20]; 	char person[20]; 	int fine; 	int days; 	int sum_fine; 	int fine_rank; }book; book infor[15]; int n;   void creat(); void search(book infor[],int ); void search(book infor[],int ); void insert(book infor5[],book ); void del(book infor[],int ); void sum(book infor[]); void average(book infor[]); void sort(book infor[]); void print1(book infor[]); void print1(book infor[]); void print3(book infor[]);   void creat() { 	int i=0; 	n=0; 	FILE*fp; 	fp=fopen("返款信息.txt","r"); 	while(!feof(fp)) 	{ 		fscanf(fp,"%d %s %s %d %d %d %d",&infor[i].book_num,infor[i].book_name[20],infor[i].person[20], 			   &infor[i].fine,&infor[i].days,&infor[i].sum_fine,&infor[i].fine_rank); 		i++; 	} 	n=i-1;     infor[n+1].book_num=0; }  void search(book infor[],int number) { 	int i; 	while(infor[i].book_num!=number&&i<10) 	{ 		i++; 	} 	if(infor[i].book_num==number) 	{ 		printf("%d %s %s %d %d",infor[i].book_num,infor[i].book_name,infor[i].person,infor[i].fine, 		                    infor[i].days); 	} 	else printf("无此书"); }  void insert(book infor[],book new_book) { 	int i=0; 	int j=n; 	while(infor[i].book_num>new_book.book_num&&i<=n) 	{ 		i++; 	} 	if(infor[i].book_num<=new_book.book_num) 	{ 		for(;j>=i;j--) 		{ 			infor[j+1]=infor[j]; 		} 		infor[i]=new_book; 	} 	else infor[10]=new_book; 	infor[n+1].book_num=0; }  void del(book infor[],int number) { 	int i=0; 	int j=n; 	while(infor[i].book_num!=number&&i<=n) 	{ 		i++; 	} 	if(infor[i].book_num==number) 	{ 		for(;i<=n;i++) 		{ 			infor[i]=infor[i+1]; 		} 		infor[i].book_num=0; 		n--; 	} 	else printf("无此书"); }  void sum(book infor[]) { 	for(int i=0;i<n;i++) 	{ 		infor[i].sum_fine=infor[i].days*infor[i].fine; 	} }   void average(book infor[]) { 	float total=0; 	float aver=0; 	for(int i=0;i<n;i++) 	{ 	     total+=infor[i].sum_fine; 	} 	aver=total/n; 	printf("%d",aver); }  void sort(book infor[]) { 	int i; 	sum(infor); 	book temp; 	for(i=0;i<n-1;i++) 	{ 		for(int j=i+1;j<n;j++) 		if(infor[j].sum_fine<infor[i].sum_fine) 		{ 			temp=infor[j]; 			infor[j]=infor[i]; 			infor[i]=temp; 		} 	}     for(i=0;i<n;i++) 	{ 		infor[i].fine_rank=i; 	} }  void print1(book infor[15]) { 	for(int i=0;i<n;i++) 	{ 		printf("%d %s %s %d %d %d %d",infor[i].book_num,infor[i].book_name[20],infor[i].person[20], 			   infor[i].fine,infor[i].days); 	} }  void print2(book infor[15]) {      for(int i=0;i<n;i++) 	 { 		 printf("%d %s %s %d %d %d",infor[i].book_num,infor[i].book_name,infor[i].person,infor[i].fine, 		                    infor[i].days,infor[i].sum_fine); 	 } }  void print3(book infor[15]) {      for(int i=0;i<n;i++) 	 { 		 printf("%d %s %s %d %d %d %d",infor[i].book_num,infor[i].book_name,infor[i].person,infor[i].fine, 		                    infor[i].days,infor[i].sum_fine,infor[i].fine_rank); 	 } }  void creat(); int main() {  	int choice=0; 	while(choice!=7) 	{ 	printf("                   1.查找书"); 	printf("                   2.插入"); 	printf("                   3.删除"); 	printf("                   4.每本书罚款总额"); 	printf("                   5.总罚款平均值"); 	printf("                   6.排序"); 	printf("                   7.退出"); 	printf("选择菜单序号"); 	scanf("%d",&choice); 	switch(choice) 	{ 	case 1: 		int number; 		 		printf("输入书序号"); 		scanf("%d",&number); 		search(infor,number); 		break; 	case 2: 		book new_book; 		printf("输入一本书的罚款信息"); 		scanf("%d %s %s %d %d %d %d",&new_book.book_num,new_book.book_name[20],new_book.person[20], 			   &new_book.fine,&new_book.days,&new_book.sum_fine,&new_book.fine_rank); 		insert(infor,new_book); 		print1(infor); 		break; 	case 3:  		printf("输入书序号"); 		scanf("%d",&number); 		del(infor,number); 		print1(infor); 		break; 	case 4:  		sum(infor); 		print2(infor); 		break; 	case 5: 		average(infor); 		break; 	case 6: 		sum(infor); 		sort(infor); 		print3(infor); 		break; 	case 7: 		break; 	default:printf("无此选项，重选");break; 	} 	} 	return 0; }


Question: 请问float 和double有什么区别

你的两个图也没体现float和double啊， 类型一样，就是精度不同，可以理解为小数点后几位极限不一样。 还有你的输入输出要格式对，输入&取址，int是%d，double，float是%lf %f，输出的时候也一样， 还有%不要漏了，不然不会把你的f转义去用后面变量的值代替

float是单精度浮点数，double是双精度浮点数，就是小数点后面多少问题，float少，double多 输入格式控制 %d  对应 int %f  对应 float %lf 对应double %c 对应char 等等

float是单精度的，double是双精度的，比float精度更高

printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

和 float double 没关系 你的第一张图  %d输入double 当然GG


Question: 简单的C语言小问题

引用 7 楼 pengbolan的回复:建议以后写这样的语句：if(i == 1)时，这样写：if(1 == i) ,这时，如果少写一个 = ，编译时就会报错，自然就不会再出现这样的问题，这时编码习惯 谢谢！get到了！！！感觉很实用

引用 5 楼 weixin_45753055 的回复:[quote=引用 3 楼 N_n_n_n_n_N的回复:]while循环条件是i<=n 所以if(i>n)没用 if(i==1)你写成if(i=1) 一个等号是赋值 所以循环次数跟你所预期的不同 ！！额谢谢谢谢谢 找到原原因了 [/quote] 麻烦结贴 谢谢

引用 3 楼 N_n_n_n_n_N的回复:while循环条件是i<=n 所以if(i>n)没用 if(i==1)你写成if(i=1) 一个等号是赋值 所以循环次数跟你所预期的不同 ！！额谢谢谢谢谢 找到原原因了

引用 1 楼 user-3的回复:为什么都喜欢传图片，不直接把代码复制上来。。。 好。。。不好意思啊 下次注意

int main() { 	int mynumber, yournumber, n; 	int i = 0; 	scanf_s("%d%d", &mynumber, &n); 	while (i <= n) 	{ 		printf("Enter your number:"); 		scanf_s("%d", &yournumber); 		i++; 		if (yournumber < 0) 		{ 			break; 		} 		if (yournumber == mynumber) 		{ 			if (i == 1) 			{ 				printf("Bingo!\n"); 				break; 			} 			else if (i > 1 && i <= 3) 			{ 				printf("Lucky you!\n"); 				break; 			} 			else 			{ 				printf("Good Guess!\n"); 				break; 			} 		} 		else if (yournumber > mynumber) 		{ 			printf("Too big\n"); 		} 		else 		{ 			printf("Too small\n"); 		} 	} 	if (i > n) 	{ 		printf("Game over!\n"); 	}     return 0; }

为什么都喜欢传图片，不直接把代码复制上来。。。


Question: 这个是哪里出错啊 可以输入但是没有输出显示出来

scanf("%d%f",&h,&r); Scanf()里换行符无效。你这个应该死在Scanf了 ，查查这个函数定义。

d=(4.0/3)*3.14*r*r*r; 在函数最后加一句system("pause");试试 或者加一条语句getchar();

没错啊，没有输出显示出来是什么意思。 是一闪而过了？


Question: 简单 单词组倒序输出

引用 3 楼 自信男孩 的回复:[quote=引用 2 楼 weixin_45234990 的回复:] 怎么了？我没有问题啊 ，就是分享 那可以把代码写的更好一些。建议循环变量用i, j, k等等 注释没必要那么多，简单的，能看懂的不建议加注释。 注释多了会起反作用。[/quote]好的 谢谢 嘿嘿

引用 4 楼 自信男孩 的回复:还有变量定义根据需要定义长度～额。。。这个输入的字符串是不确定长度的，是以回车作为结束标志的

还有变量定义根据需要定义长度～

引用 2 楼 weixin_45234990 的回复:怎么了？我没有问题啊 ，就是分享 那可以把代码写的更好一些。建议循环变量用i, j, k等等 注释没必要那么多，简单的，能看懂的不建议加注释。 注释多了会起反作用。

怎么了？我没有问题啊 ，就是分享

#include<stdio.h>  int main() {     //char a[1000];     char a[128];     int i, j;     int total;      a[0]=' ';     printf("请输入需要倒序的内容：");     for(i = 1; i < 128; i++)     {         scanf("%c", &a[i]);         if (a[i] == '\n')             break;     }     a[i] = ' ';     total = i;      printf("你输入的内容为：");     for(i = 0; i < total; i++)         printf("%c", a[i]);      printf("\n单词倒序输出为：");     for(i = total-1; i >= 0; i--)     {         if(a[i]==' ')         {             for(j = i + 1; ; j++) {                 if(a[j]!=' ')                     printf("%c",a[j]);                 else                     break;             }             printf(" ");         }     }      return 0; } 供参考~  楼主是什么问题？


Question: c小白求大神指教

int main() { 	for (int i = 1; i < 10000;i++) { 		long a = i * i; 		int j = 1; 		int iTemp; 		for (j = 0,iTemp = i;iTemp != 0;j++) { 			iTemp = iTemp / 10; 		} 		int num = 1; 		for (int k = 1; k <= j;k++) { 			num *= 10; 		} 		if (a % num == i) { 			cout << i << "\t" << a << endl; 		} 	} }

for循环判断当前数字几位 取乘积的后几位 与当前数字每一位比较 全部相等即为同构数  376*376=141376    376是三位数 用表达式取出个位十位百位数字 再取141376的个位十位百位数字 进行比较 相等就是同构数


Question: 初学stm32,为什么keil5会出现这样的错误？怎么解决呢？

我脖子被你弄骨折了，赔医药费！

引用 3 楼 qq_45403798 的回复:[quote=引用 2 楼 ljk02079的回复:]看报错是语法问题，可能是keil5编译器有什么特殊的地方 看看下面的语句是否报错 1.   *(unsigned int *)0x40021018 = 1; 2.   *(unsigned int *)0x40021018 = unsigned int(1); 3.   *(unsigned int *)0x40021018 |= 1; 4.   *(unsigned int *)0x40021018 |= unsigned int(1); 可以解释是什么意思吗[/quote]  请先验证，然后告诉我测试结果。我是在尝试知道为什么会报语法错误，所以写几个语句验证一下，你告诉我1234那个能编译通过，那个不能通过就好

引用 7 楼 user-3的回复:图片上看着  | = 和等号之间有空格，是不是不要有呀？ 对的，有空格。我改一改，试试可不可以

图片上看着  | = 和等号之间有空格，是不是不要有呀？

引用 5 楼 user-3的回复: 你看看这里是啥，成成 -c99 试试 我有改过了，然后也是错的但是--c99上边那行是空白的

你看看这里是啥，成成 -c99 试试

引用 1 楼 user-3的回复:~这个符号是不是被你写成中文的了？ 我都是在英文状态下敲的

引用 2 楼 ljk02079的回复:看报错是语法问题，可能是keil5编译器有什么特殊的地方 看看下面的语句是否报错 1.   *(unsigned int *)0x40021018 = 1; 2.   *(unsigned int *)0x40021018 = unsigned int(1); 3.   *(unsigned int *)0x40021018 |= 1; 4.   *(unsigned int *)0x40021018 |= unsigned int(1); 可以解释是什么意思吗

~这个符号是不是被你写成中文的了？


Question: 为啥同样一段代码，在g++下AC了，c下面就是WA？求解~

id[34]=0; 这句代码已经越界了。id的长度是34，所以下表是从0开始[0, 33]；  引用 1 楼 user-2 的回复:7个%c，却输入了8个参数 你在数数是不是7个，还是8个%c

7个%c，却输入了8个参数

引用 2 楼 自信男孩 的回复:id[34]=0; 这句代码已经越界了。id的长度是34，所以下表是从0开始[0, 33]；  [quote=引用 1 楼 user-2 的回复:] 7个%c，却输入了8个参数 你在数数是不是7个，还是8个%c  [/quote]噢噢噢噢没注意，我是想初始化整个为0的，写错了…谢谢你！


Question: 求解

int main(){       LDB x,y;       scanf("%Lf%Lf",&x,&y);       printf("%.3Lf\n%.3Lf\n",sqrt(x*x+y*y),atan2(y,x)/(2*acos(-1))*360);   }


Question: 小白++  --求助

关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

错误的关键字 printf从右到左入参

关键字  未定义行为 序列点 副作用 错误的关键字 printf从左到右入参   好了 慢慢百度吧  代码错结果没意义

应该都是9吧

直接贴代码吧，贴图片看不清楚和完整的代码～


Question: 小白请指教


Question: char buff[]单字节数据如何比较？

char有符号，unsigned可以  16进制默认表示的应该是无符号类型。

趁机看评论

我也是试了不行啊，咋办

学习中，有收获。

学习到了，感谢！！！

学习了，楼主大牛

都是大佬啊。。

学习了，楼主大牛

char是有符号，改成unsign char就可以了，给的值有符号类型二进制前面一位会拿去当符号用

Char类型数组的一个索引位不是只能存入一个字节吗

比较时保持类型一致，强转下需要对比的数

应该还是可以的

凡是不看对应汇编指令讨论单字节数据比较的都是隔靴搔痒。

BYTE buff[];

最基础的东西，也容易被忽略

char buff[1] = { 0xe3 }; 	cout << CHAR_MIN << "~" << CHAR_MAX << "\n"; //获取当前环境char类型取值范围. 我的输出-128~127(C标准char类型与不同编译环境相关). 	cout << 0xe3 << "\n";                        //输出227 	cout << int(buff[0]) << "\n";                //输出-29 	cout << int(char(0xe3)) << "\n";             //输出-29 	/*虽然buff[0]保存0xe3,但是0xe3的数值不是char类型的取值范围,所以在编译或运行的时候,自动截断为char类型的取值范围。 	看输出结果明显知道：227-(-29)=256,即0xe3放进buff[]时减少了256.因为char只能容纳256个字符(-128~127).只要大于CHAR_MAX,就会一直减256,直到减到在范围内,只要小于CHAR_MIN，就会一直加256,直到加到在范围内.  	既然你已经确定传过来的接口数据是char类型,那么根据 0xe3 > 127 可以判断对方编译环境char取值范围为(0~255),也就我当前环境的unsigned char类型. 	如要进行比较,要么要进行转换，要么进行运算. 	*/  	if (buff[0] == 0xe3-256) 		cout << "相等" << "\n"; //输出：相等  	if (buff[0] == char(0xe3)) 		cout << "相等" << "\n"; //输出：相等  	typedef unsigned char u; //定义一个类型,"unsigned char"不方便大量写,简洁一个"u"代表它. 	if (u(buff[0]) == 0xe3) 		cout << "相等" << "\n"; //输出：相等

受教了，很不错！


Question: 求助

汇编学太久，好多记不清楚了。但是，int 这种好象只有两个与显示相关的，一个是bios，一个是dos，仅这两种调用。但是，它们都是原样显示！printf这些是做两个事情：1、形成最终输出的内容；2、输出内容。显然int与1无关，2则有可能是通过int实现的。  另外，正如我在2楼说的，计算机不只是x86，很多可能根本没bios这一套

跟输出的格式有关系

引用 2 楼 liups 的回复：没有关系。int 10h这种可能只有x86的机器才有，其他机器可能是别的机制了那是如何判断应该输出是int的值 还是字符呀

引用 1 楼 user-3 的回复：输出是int 21h，但是输出格式是系统调用来实现的，跟int没有关系就是说45h输出成数字69或者是字符e是系统调用的事嘛

没有关系。int 10h这种可能只有x86的机器才有，其他机器可能是别的机制了

输出是int 21h，但是输出格式是系统调用来实现的，跟int没有关系


Question: 大学刚学C语言这里那不对啊 大佬们

引用 7 楼 自信男孩 的回复：单词拼写错误，void，scanf有问题。都是一些比较低级的错误，建议写代码时多细心一些～  另外，多写也会解决这个问题～请问scanf这个错误怎么改呢

引用 5 楼 MelonSuika 的回复：  大致就这些错误，编译器都提示你了感谢 感谢 感谢🙏

大致就这些错误，编译器都提示你了

引用 3 楼 风中柳心 的回复：<"stdio.h">用了<>就不需要加入双引号了吧……我觉得是<stdio.h>就行了。 然后第15行scanf("%d%d",&a,&b);少了一个双引号。 我是新手，目前只能发现这么多了谢谢了🙏

引用 1 楼 user-4 的回复：注意下中文字符与英文字符的问题  void    不是viod好的 谢谢

注意下中文字符与英文字符的问题  void    不是viod


Question: strcat,strcpy同时使用出现的问题

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

strcat是把两个字符串拼接，那就是在目的串的末尾连上源串；  你的想法应该是strcpy的原来，即在ss+1的地方拷贝"123"

strcat理解有误，遇到\0再拼接，而不是当前位置

引用 3 楼 丶无殇 的回复:[quote=引用 1 楼 user-5 的回复:] 放心 只是你理解错了 strcat的意思  这是连接  你把123 连接到321987后面结果当然是 321987123 至于ss+7 的确连接上去了 但是 和321987没关系 321987 后面有一个'\0' %s遇到这个 0 就停止输出 但是为啥ss+1的时候 结果不是21987123 而是321987123啊， 我感觉ss+1指向了第二位的2了呀[/quote]  因为你打印的是ss， 如果改成 printf("%s\n",ss+1); 就是23987123了

引用 3 楼 丶无殇 的回复:[quote=引用 1 楼 user-5 的回复:] 放心 只是你理解错了 strcat的意思  这是连接  你把123 连接到321987后面结果当然是 321987123 至于ss+7 的确连接上去了 但是 和321987没关系 321987 后面有一个'\0' %s遇到这个 0 就停止输出 但是为啥ss+1的时候 结果不是21987123 而是321987123啊， 我感觉ss+1指向了第二位的2了呀[/quote]那你输出的也不是ss+1呀  你输出的是 ss 所以是321987123 你输入 ss+1 就是 21987123 了

引用 6 楼 636f6c696e的回复:strcat理解有误，遇到\0再拼接，而不是当前位置 谢谢谢谢，非常感谢

引用 5 楼 MelonSuika的回复:[quote=引用 3 楼 丶无殇 的回复:] [quote=引用 1 楼 user-5 的回复:] 放心 只是你理解错了 strcat的意思  这是连接  你把123 连接到321987后面结果当然是 321987123 至于ss+7 的确连接上去了 但是 和321987没关系 321987 后面有一个'\0' %s遇到这个 0 就停止输出 但是为啥ss+1的时候 结果不是21987123 而是321987123啊， 我感觉ss+1指向了第二位的2了呀[/quote]  因为你打印的是ss， 如果改成 printf("%s\n",ss+1); 就是23987123了[/quote] 好嘞好嘞，理解了，谢谢大家哈

引用 4 楼 user-5的回复:[quote=引用 3 楼 丶无殇 的回复:] [quote=引用 1 楼 user-5 的回复:] 放心 只是你理解错了 strcat的意思  这是连接  你把123 连接到321987后面结果当然是 321987123 至于ss+7 的确连接上去了 但是 和321987没关系 321987 后面有一个'\0' %s遇到这个 0 就停止输出 但是为啥ss+1的时候 结果不是21987123 而是321987123啊， 我感觉ss+1指向了第二位的2了呀[/quote]那你输出的也不是ss+1呀  你输出的是 ss 所以是321987123 你输入 ss+1 就是 21987123 了[/quote] 好嘞好嘞，理解了，谢谢啦

引用 1 楼 user-5 的回复:放心 只是你理解错了 strcat的意思  这是连接  你把123 连接到321987后面结果当然是 321987123 至于ss+7 的确连接上去了 但是 和321987没关系 321987 后面有一个'\0' %s遇到这个 0 就停止输出 但是为啥ss+1的时候 结果不是21987123 而是321987123啊， 我感觉ss+1指向了第二位的2了呀


Question: 如何使用getch()函数时在键盘上输入EOF

请各位大神，帮我解决这个难题。我就想知道（c = getch()) != EOF 能不能行，具体不能行的原因是什么。请各位大哥们指教。

引用 1 楼 丶无殇 的回复:用getch()的好像不多吧，而且你的那个c应该是char字符型变量，我一般用的sacnf()！=EOF比较多  #include <stdio.h>  int main() {     char c;     while(scanf("%c",&c)!=EOF)     {         printf("%c", c);     }     return 0; }  c用int类型吧，如果要与EOF比较，还是用int类型。 因为EOF是int类型～

ctrl+D试试

Ctrl+C 或 Ctrl+Break

别人都说用Ctrl+Z可以。但我就是没试出来

之所以把c定义为int类型，是因为有足够大的空间可以容纳EOF。 另外，求教getch()!= EOF 时，如何输入EOF，从而使程序结束。


Question: 求助大神！关于C语言的问题！！

引用 4 楼 棉猴 的回复：为什么 T_Cell stack[top] = { cell.row, cell.colum };   代码会报错呢？原因就是这行代码是定义了一个stack数组，这个数组中的元素是T_Cell，数组中元素的个数是top。但是  也就是说，编译器以为你要定义一个stack数组，所以要求top必须是常量。但是你的top不是常量，故而报错。 解决的方法楼上的朋友已经给出了，不再赘述。或者给T_Cell重载一个=操作符也可以考虑。感谢大神，我终于搞懂了

引用 2 楼 user-2 的回复:改成这样： 			stack[top].row = cell.row; 			stack[top].colum = cell.colum; 感谢！感谢！我找了半天没找出来。谢谢大神


Question: 菜鸟求救

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

到底是什么意思这种说法？

for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }

可以运行，for中第一条语句是if语句也是运行。根据for执行顺序来的～

可以的，你能想到的都可以运行

为什么不可以呢  for(int i = 1; i < 100; i++){     if(i % 2 == 0){            //代码块     }else {         //代码块      } }

括号里面的吗？不可以这样写哦


Question: realloc 动态内存分配时报错

#include <stdio.h> #include <stdlib.h>  //void main() int main() {     int num = 0;      scanf("%d", &num);     double *p = (double *)malloc(sizeof(double)*num);     if (!p)         exit(0);      printf("%x\n", p);     for (double i = 0.0; (int)i < num; (int)i++)     {         p[(int)i] = 1.1 + i;         printf("%f\n", p[(int)i]);     }      int newsize = 0;     scanf("%d", &newsize);       double *newp = (double *)realloc(p, sizeof(double)*newsize);      printf("%x\n", newp);       for (int i = 0; i < newsize; i++)     {         newp[i] = i + 1.2;           printf("%f\n", newp[i]);     }       //free(p);     free(newp);      system("pause"); } 供参考～  虽然一次malloc，一次realloc，但是free只需要一个就可以。原因建议查一下realloc的原理。  楼主的断点错误是因为两次free导致的，去掉第一个free(p);即可～

报的是什么错？


Question: 各位大虾来指点一下

引用 1 楼 user-1 的回复:你hello.c文件的路径在哪里？ 没找到路径在哪！自己下了个2017摸索着玩，书上的是2010，没在磁盘找到，但我昨晚后在本地调试成功了！

你hello.c文件的路径在哪里？


Question: 无法打开文件

引用 3 楼 user-1的回复:无法打开test.h文件是在哪里报错的？ 一般把函数的定义放到cpp文件中。 好的，懂了，谢谢了，，，

无法打开test.h文件是在哪里报错的？ 一般把函数的定义放到cpp文件中。

#define PRICE 30 后面的；分号去掉~

total = number * ... 这句后面少了；分号


Question: 牛顿插值的C语言代码求助

以前做过的。 A的形式，四个点分别是：（1，5），（2，4），（3，3），（4，9） 	//double A[2][ORDERS] = { 	//	1, 2, 3, 4, 	//	5, 4, 3, 9 	//}; /* 牛顿插值法 @param *A 已知点的值 @param n 点的个数 @param t 要求的点 */ double Newton(double *A, int n, double t) { 	double *Fn, y; 	int i, j; 	Fn = (double*)malloc(n * sizeof(double)); // 申请内存，保存fn 	for (i = 0; i < n; i++) 		Fn[i] = A[n + i]; // 拷贝y 	for (i = 1; i < n; i++) // 循环n-1次 		for (j = n - 1; j >= i; j--) // 求第i阶均差 			Fn[j] = (Fn[j] - Fn[j - 1]) / (A[j] - A[j - i]); // 计算某一均差，相差不是1 	y = Fn[n - 1]; // 最里层直接赋值 	for (i = n - 2; i >= 0; i--) 		y = Fn[i] + (t - A[i]) * y; 	return y; }


Question: 数据结构，救救孩子！

怎么救你，还是先自救吧，自己写写，遇到问题再提出来～


Question: 数据结构

先自己写写，然后再提出你不理解或不懂的问题～


Question: 救命，单链表的创建

蟹蟹大家，我再查看一下

#include <stdio.h> #include <iostream> using namespace std; typedef int Status; typedef int ElemType;  typedef struct Lnode {     ElemType data;     struct Lnode *next; } LinkList;  void Createlist_L(LinkList *L, int n) {      L = (LinkList *)malloc(sizeof(LinkList));     L->next = NULL;     printf("pls input data:\n");      for (int i = n; i > 0; i--)     {         LinkList *P = NULL;         P = (LinkList *)malloc(sizeof(LinkList));         cin >> P->data; //输入元素值         P->next = L->next;         L->next = P;     } }  int main(int argc, char const *argv[]) {     LinkList *temp = NULL;     Createlist_L(temp, 3);     system("pause");     return 0; }  我C不太熟，用C++写的，也是新手，说说自己的理解，你用引用传入的话，不是内存在main函数就应该已经分配内存了吧，这边不需要分配内存了吧

scanf("%d", &P->data); 试试这个～

scanf有问题，看一下scanf的原型～

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

你P不是没有声明吗？，而且你mallocP的时候数据类型是结构体，下面data赋值的时候又用了指针的->

没看出来 ，这个报错和main无关 我在VS2019上试了下没问题。 你用的VC6。0？

为什么没有main函数

引用 1 楼 子衿兄的回复:报什么错呢？ 第二张图片上面有写的。

报什么错呢？


Question: 多项式加法，c语言，

直接贴代码吧～

仅供参考：//链表实现一元多项式的加法减法乘法 #include <stdio.h> #include <stdlib.h> typedef struct node {     float coef;   //系数     int expn;     //指数     struct node *next; } PolyNode;      //多项式节点 polynomial node typedef PolyNode* Polynomial; Polynomial createPolynomial() {  //创建多项式     PolyNode *p, *q, *head = (PolyNode *)malloc(sizeof(PolyNode));   //头节点     head->next = NULL;     float coef;     int expn;     printf("输入该多项式每一项的系数和指数，每项一行，输入0 0结束！\n");     while (scanf("%f %d", &coef, &expn) && coef) {   // 默认，按指数递减排列         if (head->next) {             p = head;             while (p->next && expn < p->next->expn)                 p = p->next;             if (p->next) {                 if (expn == p->next->expn) { //有相同指数的直接把系数加到原多项式                     p->next->coef += coef;                     if (p->next->coef > -0.000001 && p->next->coef < 0.000001) { //若是相加后系数为0，则舍弃该节点                         q = p->next;                         p->next = q->next;                         free(q);                     }                 } else {                     q = (PolyNode*)malloc(sizeof(PolyNode));                     q->coef = coef;                     q->expn = expn;                     q->next = p->next;                     p->next = q;                 }             } else {                 p->next = (PolyNode*)malloc(sizeof(PolyNode));                 p = p->next;                 p->coef = coef;                 p->expn = expn;                 p->next = NULL;             }         } else {             head->next = (PolyNode*)malloc(sizeof(PolyNode));             head->next->coef = coef;             head->next->expn = expn;             head->next->next = NULL;         }     }     return head; } Polynomial multiply(Polynomial poly, float coef, int expn) {  //多项式与指定单项式相乘，该单项式为 coefx^expn     PolyNode *p, *q, *Poly = (PolyNode*)malloc(sizeof(PolyNode));     p = Poly;     q = poly->next;     while (q) {         p->next = (PolyNode*)malloc(sizeof(PolyNode));         p = p->next;         p->coef = (q->coef*coef);         p->expn = (q->expn + expn);         q = q->next;     }     p->next = NULL;     return Poly; } void add(Polynomial poly1, Polynomial poly2) {  //把 poly2 加到 poly1 上     PolyNode *p, *q, *r;     r = poly1;     p = poly1->next;  //指向第一个节点     q = poly2->next;     poly2->next = NULL;     while (p && q) {         if (p->expn > q->expn) {             r->next = p;             p = p->next;             r = r->next;         } else if (p->expn < q->expn) {             r->next = q;             q = q->next;             r = r->next;         } else {             PolyNode *t;             p->coef += q->coef;             if (!(p->coef > -0.000001 && p->coef < 0.000001)) //系数不为0             {                 r->next = p;                 r = r->next;                 p = p->next;             } else {                 t = p;                 p = p->next;                 free(t);             }             t = q;             q = q->next;             free(t);         }     }     if (p)         r->next = p;     if (q)         r->next = q; } Polynomial polySubtract(Polynomial poly1, Polynomial poly2) {  //多项式减法 poly1-poly2形成一个新的多项式     //把poly2的系数取相反数，形成一个新的多项式     Polynomial poly = (PolyNode*)malloc(sizeof(PolyNode)); //构造头节点     PolyNode *p, *q;     p = poly;     q = poly2->next;     while (q) {         p->next = (PolyNode*)malloc(sizeof(PolyNode));         p = p->next;         p->coef = -(q->coef);  //系数取反         p->expn = q->expn;         q = q->next;     }     p->next = NULL;     add(poly, poly1);  //利用加法     return poly; } Polynomial polyAdd(Polynomial poly1, Polynomial poly2) { //多项式相加 poly1+poly2形成一个新的多项式     Polynomial poly = (PolyNode*)malloc(sizeof(PolyNode));  //和多项式的头节点     poly->next = NULL;     PolyNode *p, *q, *r;     r = poly;     p = poly1->next;     q = poly2->next;     while (p&&q) {         if (p->expn > q->expn) {             r->next = (PolyNode*)malloc(sizeof(PolyNode));             r = r->next;             r->coef = p->coef;             r->expn = p->expn;             p = p->next;         } else if (p->expn < q->expn) {             r->next = (PolyNode*)malloc(sizeof(PolyNode));             r = r->next;             r->coef = q->coef;             r->expn = q->expn;             q = q->next;         } else {             float m = p->coef + q->coef;             if (!(m > -0.000001 && m < 0.000001)) {                 r->next = (PolyNode*)malloc(sizeof(PolyNode));                 r = r->next;                 r->coef = m;                 r->expn = p->expn;             }             q = q->next;             p = p->next;         }     }     while (p) {         r->next = (PolyNode*)malloc(sizeof(PolyNode));         r = r->next;         r->coef = p->coef;         r->expn = p->expn;         p = p->next;     }     while (q) {         r->next = (PolyNode*)malloc(sizeof(PolyNode));         r = r->next;         r->coef = q->coef;         r->expn = q->expn;         q = q->next;     }     r->next = NULL;     return poly; } Polynomial polyMultiply(Polynomial poly1, Polynomial poly2) {  //多项式相乘     Polynomial poly = (PolyNode*)malloc(sizeof(PolyNode));  //创建多项式和的头节点     poly->next = NULL;     PolyNode *p;     p = poly2->next;     while (p) {         add(poly, multiply(poly1, p->coef, p->expn));         p = p->next;     }     return poly; } void printPoly(Polynomial poly) {  //打印多项式     if (poly && poly->next) {         PolyNode *p = poly->next;  //p指向第一个节点         while (p->next) {             printf("%gx^%d", p->coef, p->expn);             p = p->next;             if (p && (p->coef > 0))                 printf("+");         }         if (p->expn == 0)             printf("%g", p->coef);   //打印常数项         else             printf("%gx^%d", p->coef, p->expn);         printf("\n");     } } void freePoly(Polynomial poly) {  //释放内存     if (poly && poly->next) {         PolyNode *p, *q;         p = poly;         while (p) {             q = p->next;             free(p);             p = q;         }     }     poly = NULL; } int main() {     printf("用链表实现多项式的加减法\n");     Polynomial poly1, poly2, poly3;     printf("创建多项式一\n");     poly1 = createPolynomial();     printf("多项式一：\n");     printPoly(poly1);     printf("创建多项式二\n");     poly2 = createPolynomial();     printf("多项式二：\n");     printPoly(poly2);     printf("两多项式相加，和为：\n");     poly3 = polyAdd(poly1, poly2);     printPoly(poly3);     freePoly(poly3);     printf("两个多项式相乘，积为：\n");     poly3 = polyMultiply(poly1, poly2);     printPoly(poly3);     freePoly(poly3);     printf("两多项式相减，差为：\n");     poly3 = polySubtract(poly1, poly2);     printPoly(poly3);     freePoly(poly1);     freePoly(poly2);     freePoly(poly3);     system("pause");     return 0; }

为什么你用电脑调试都没找出错误，却要指望别人用眼睛找出错误。。。


Question: c,将字符串s中的c删除并输出字符串s

#include <stdio.h> #include <string.h> //void main() int main() {     char s[81];int i;     gets(s);     for(i=0;i<strlen(s);) {         if(s[i]=='c')             strcpy(s+i,s+i+1);         else //if(s[i]<='a' && s[i]>='z')             i++;         //puts(s);     }     puts(s);      return 0; } 供参考～ 不知道你说的四处都是需要在哪里填写，但是如果不大else if的条件去掉，程序无法正常退出。  建议自己在环境里编译运行一下

原题4处填空， 1.填写头文件，为strcpy函数提供原型 2.for(__2__;i<strlen(s);)我填i=0 3.if语句下一行空白填空，我填写strcpy(s+i,s+i+1) 搞不懂的是for没有把i++;包含进去怎么实现循环?

i++可以写在循环体中


Question: 为什么这个NO输出不了，编程小白请求大神斧正

float表示时会有精度问题，可能会导于0.1+0.2 > 0.3 有可能。

float表示时会有精度问题，可能会导于0.1+0.2 > 0.3

建议把a, b, c定义为int类型，为什么要定义为double呢？ 从你的程序里可以看到没有浮点数比较的影子。 浮点数比较和整型数比较大小是有区别的。建议从网上搜一下浮点数比较大小和浮点数和0比较的方法

你为啥要输入逗号 引用 3 楼 肖亭亭亭亭 的回复:引用 1 楼 與蘤舊縐 的回复：百分号拿来干什么还有，为什么我输入0.1，0.2，0.3电脑输出yes

多了%.........................

引用 1 楼 與蘤舊縐 的回复：百分号拿来干什么哦哦

百分号拿来干什么


Question: 萌新求问，c语言if比较数值大小会产生整数值0，1，怎么打印出这个值？

bool可以理解为int类型，那么直接用%d输出即可～

%d直接打印呀

bool flag = i < j; printf("%d\n",flag);


Question: 新手求助!

画个图就出来了：p = p1（p所指的是p1所指 的x） p1=p2（p1所指的是p2所指 的y） p2 = p(p2所指的是p所指 的x) 所以p1->y,p2->x  指针的指向是交换了的。但是。指针其本体你就认为是值传递吧。值传递的特点是里面你对参数如何改变不影响外面的值，所以看似改了p1和p2的内容（指针的内容是地址。指针的内容是地址。指针的内容是地址。），但外面x,y所对应的内存中的数据并没有发生任何改变 所谓指针做参数为什么特殊：就是因为指针所存的是地址而特殊。你在函数里没有对地址中的内容进行改变。那那样的改变就毫无意义，无法影响外部。  说的有点多，具体去百度：指针作为参数传递。有讲解。问老师也行

只是交换了p1,p2指向的地址，结果是p1指向y,p2指向x,但并未改变地址上储存的值

有人康康我吗……😞


Question: 如何在txt文件中输入文件结尾

引用 4 楼 自信男孩 的回复:这个文件末尾不是输入进去的，而是程序去读文件时，读到文件的的末尾会自动返回的。  如果要了解更多，建议学习一下文件系统。 应该是这样的

引用 2 楼 weixin_40290083 的回复：如果使用文本编辑器的编辑txt文档，保存后自动会在文件结束加上文件结束符，ctrl+z是在使用命令提示符或者某些命统提示符应用程序时用来输入文件结束的。谢谢

后面没数据了不就结束了啊。为什么还要写“文件结尾”。


Question: 大家好，我是新手刚开始接触c语言，请大神指导一下。

引用 9 楼 weixin_40290083的回复:举两个例子，当m为7（7是素数，我们是知道的，需要程序来算）时，i的值需要从2自增到6 并且m%i == 0这个条件表达式的值始终为“假”，那么break是不会执行的。所以i最终的值就是6，因为当i自增到6时，还会执行i++,这时i < m的条件为假，终止循环，i的值自增到m(前两条回复有错之处，i会自增到m). 当m为9时，当i自增到3时，m%i ==0表达式的值为块，break语句执行，跳出循环，这时的跳出循环i++不执行。i的值就为3.  所以当i>=m时，M为素数，否则为和数。 谢谢大佬，终于明白了！！！！！

如果m是素数i会循环自增到m-1，否则i会小于m-1

那是不是说if(m%i==0)这个结果成立才会执行break?      这个理解是对的，在break 后面的if语句始终要执行，是不是素数是这个if根据i和m的关系判断的

引用 5 楼 weixin_40290083的回复:[quote=引用 3 楼 ༺࿈军仔*江河湖海࿈༻ 的回复:] [quote=引用 1 楼 weixin_40290083的回复:]你的程序有错误 1、for(i = 2; i < m; i++) 2、if(i < m)   3、break终止的是循环 1.错误的地方是for(i = 2; i < =m; i++)吗？ 2.如果后面不加break, 加一个括号，把循环内容括起来。这样好像也不行，这又是什么情况？[/quote]  1、是的，必须是i<m，因为判断质时是从2——m-1作为除数的（其实通过数学方法证明 i <m的平方根即可，可以提高算法效率） 加不加{}无所谓，因为你是语句是单行的，所以可以省略{}，按你的算法这个break是必须要有的，因为在2——m-1之间有可以整除的数，那么这个数就是非质数，就必须提前终止循环，否则当i增长到m-1时，永远是m%i!=0;[/quote] 大佬，那是不是说if(m%i==0)这个结果成立才会执行break?和后面的if 语句，我感觉我这样理解是错的，还请大神指导一下。

引用 3 楼 ༺࿈军仔*江河湖海࿈༻ 的回复:[quote=引用 1 楼 weixin_40290083的回复:]你的程序有错误 1、for(i = 2; i < m; i++) 2、if(i < m)   3、break终止的是循环 1.错误的地方是for(i = 2; i < =m; i++)吗？ 2.如果后面不加break, 加一个括号，把循环内容括起来。这样好像也不行，这又是什么情况？[/quote]  1、是的，必须是i<m，因为判断质时是从2——m-1作为除数的（其实通过数学方法证明 i <m的平方根即可，可以提高算法效率） 加不加{}无所谓，因为你是语句是单行的，所以可以省略{}，按你的算法这个break是必须要有的，因为在2——m-1之间有可以整除的数，那么这个数就是非质数，就必须提前终止循环，否则当i增长到m-1时，永远是m%i!=0;

引用 2 楼 自信男孩的回复:#include<stdio.h>               /*函数头：输入输出头文件*/  //void main()                     /*空类型：主函数*/ int main()                     /*空类型：主函数*/ {     int m,i;                    /*定义变量的数据类型为整型*/      printf("输入一个数：");     /*输出文字提示*/     scanf("%d",&m);             /*输入一个数字*/      //for(i=2;i<=m;i++)           /*用for函数重复下面步骤*/     for(i=2;i<m;i++)           /*用for函数重复下面步骤*/         if(m%i==0)              /*判断输入的数是否能被除1和本身以外的数整除*/             break;     //if(i>m)                 /*判断i是否大于m*/     if(i>=m)                 /*判断i是否大于m*/         printf("%d 是素数\n",m);       /*输出是素数*/     else         printf("%d 不是素数\n",m);     /*输出不是素数*/      return 0; }  供参考～  break跳出的是循环，break的用途主要是switch和循环（while/for/do...while等等）中。  楼主的程序有点问题，循环条件和判断素数的条件需要做修改。  如果既然素数是1和他本身之外不能被整除，所以i不能等于m。 1.错误的地方是for(i = 2; i < =m; i++)吗？ 2.如果后面不加break, 加一个括号，把循环内容括起来。这样好像也不行，这又是什么情况

引用 1 楼 weixin_40290083的回复:你的程序有错误 1、for(i = 2; i < m; i++) 2、if(i < m)   3、break终止的是循环 1.错误的地方是for(i = 2; i < =m; i++)吗？ 2.如果后面不加break, 加一个括号，把循环内容括起来。这样好像也不行，这又是什么情况？


Question: 不进这个if 语句这是为什么啊？

if ((strcmp(stl[i].stmc, stl[d].stmc) == 0) && (strcmp(stl[i].number, stl[d].number) == 0))

引用 5 楼 user-2的回复:你查查这个函数说明，先理解这个函数再说吧 似乎，可以了。感谢！

你查查这个函数说明，先理解这个函数再说吧

引用 3 楼 user-2的回复:你的代码没有拍全，看你的代码应该是作业，不涉及商业秘密，没有遮掩，不知道你的d值是如何来的，如果d值正确，那么 st[i].stmc.strcmp(st[d].stmc)，因为你使用的是下标取值也以没有必采使用取址符&， 数值是都是1，还是不进if语句，

引用 1 楼 user-2的回复:C语言中的字符串的比较要使用strcmp，而不是== 那，这个结构体数组还需要加括号嘛？

C语言中的字符串的比较要使用strcmp，而不是==


Question: 江苏省C语言试题

str函数的作用是把字符串连接在一起，那么输出的结果应该是： is good NanJing is NanJing is!is good!good


Question: excel打开csv 用c语言实现

引用 5 楼 赵4老师的回复:system("./excel abc.csv");//? 一样的错误  找不到.   系统里没安装  不支持吧

system("./excel abc.csv");//?

liunx系统里没有excel.exe啊   还有别的办法么

引用 1 楼 赵4老师的回复:system("excel.exe abc.csv");  liunx系统里没有excel.exe啊   还有别的办法么

引用 1 楼 赵4老师的回复:system("excel.exe abc.csv"); 还有其他方法么  这个好像不可以

system("excel.exe abc.csv");


Question: 大佬帮萌新解个答呀

因为int *p没有给它赋初值，那么一般来说默认就是0。这样调用a后，就会给0地址赋值 8,这是严重不允许的。 因为0址是系统内存，你写的程序是应用程序 ，不能直接访问，会出异常。


Question: 为何这段代码运行时会无限循环

一下是VS2015调试的结果  另外就是像楼上朋友说的，int a[3]表示a[0],a[1],a[2]。如果想用a[3]，需要 int a[4];


Question: 新手求教，一个疑问>_<

你这个max是定义了，不是声明。 如果你光有 int max(int x,int y) 这一行，没有后面大括号的东西才叫声明。

编译器检查规则的问题～不必过于理解，建议用哪个编译器熟悉对应的便器规则～

引用 1 楼 user-3的回复:编译器都有严格和宽松选项的 请问一下知不知道要在哪里改严格呀？

编译器都有严格和宽松选项的

这个要具体看哪个环境，查下手册


Question: 新手求助

sum初始化了吗？ 每次进入循环需要初始化一次～

谢谢o(^o^)o


Question: 日历题，卡在一步了，求解决

输入end，这是输入字符串。那就需要%s。 不建议这么做，可以输入-1结束呢。这样和%d还匹配，改动最小。  if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) { 多出重复的代码，建议用一个函数来实现。 并做如下修改：  if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {


Question: c 语言入门

int max(int x, int y); //下面定义max的后面分号去掉，这里是定义而不是声明 注意区分函数定义和函数声明的区别，函数声明是一条语句，因此后面要加分号；

先定义max函数，再使用main函数

max函数的声名放到main外面，定义（就是有函数实体的那个）后面不需要添加分号

scanf引号位置错了


Question: 想问问这个程序运行结果怎么不对啊！谢谢大佬！！

可以啦！验算的时候忘记中英切换了🙈

引用 6 楼 Ayoko_gmy的回复:ac啊。。。 我现在是先比较ab，再比较ac，最后比较bc，但是还是不行orz

ac啊。。。

引用 3 楼 Ayoko_gmy的回复:a=3，b=3,c=4呢 a=3,b=2,c=1呢 那这样最后一次比较还是比较a和b对吗？

引用 3 楼 Ayoko_gmy的回复:a=3，b=3,c=4呢 a=3,b=2,c=1呢 噢噢我懂了！我再试试吧，谢谢！

a=3，b=3,c=4呢 a=3,b=2,c=1呢

引用 1 楼 棉猴的回复:a和c还没比呢？ 但是第一步就赋值到a＜b，第二次b＜c应该不用比较a和c了吧

a和c还没比呢？


Question: 菜鸟新手求救!

这个题目不算难吧。  直接在br和ci函数里打印printf("xxx");对应的字符串即可～


Question: 求助

gdb disassamble printf

建议找到printf的源码，然后反汇编一下～


Question: 《新手求救》各位帮我看看为什么这个题输出成这样了。题目是输入年月日，然后输出是今年第几天，我写完之后运行，无论输入什么都输出这个

scanf是格式化输入，因此需要按照格式输入，这个格式是自己定义的，默认的没有其他符号的，以空格隔开。 自己也可以定义格式，比如逗号，分割。  但是不建议在scanf中加'\n'。

引用 1 楼 user-3的回复:搜一下scanf的用法。  算了，直接告诉你吧。  输入如下数据： 2019 2 6  可以了，感谢可以了，感谢

引用 4 楼 关于现在和未来的我的回复:可以把这个代码，给我复制一下吗？ #include<stdio.h> int main() {   int year,flag,month,day,sum;     scanf("%d%d%d",&year,&month,&day);     if(year%4==0 && year%100!=0 || year%400==0) 	flag=1; 	else 	flag=0; 	if(flag==1) 	{ 		switch(month) 		{ case 1:sum=0;break;  	      case 2:sum=31;break; 	      case 3:sum=59;break;           case 4:sum=90;break; 	      case 5:sum=120;break; 	      case 6:sum=151;break;           case 7:sum=181;break;        	  case 9:sum=243;break;           case 10:sum=273;break;        	  case 11:sum=304;break; 		  case 12:sum=334;break;};}; 	if(flag==0) 	{   switch(month) 	   { case 1:sum=0;break;  	      case 2:sum=31;break; 	      case 3:sum=60;break;           case 4:sum=91;break; 	      case 5:sum=121;break; 	      case 6:sum=152;break;           case 7:sum=182;break;        	  case 9:sum=244;break;           case 10:sum=274;break;        	  case 11:sum=305;break; 		  case 12:sum=335;break;};}; 	      sum=sum+day; 	printf("%d",sum); 	return 0; }

2019  2 6   用空格就可以了

对✓，输入不用用  ，相隔


Question: c语言

scanf_s()函数是scanf()函数的安全版本。VS2015中使用scanf()函数，在编译时会报错  error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.  错误信息为“scanf()函数不安全，要使用scanf_s()来代替。如果不显示这些错误信息，则要使用_CRT_SECURE_NO_WARINGS”。除了使用_CRT_SECURE_NO_WARINGS之外，还可以在应用程序向导中进行设置来实现VS2015中使用scanf()函数的目的。 具体内容请参考《VS2015中使用scanf()不报错的设置方法》 希望能够帮到你！

代码最上面加上下面这句或者在IDE里面设置忽略4996的警告即可： #pragma warning(disable:4996)

我运行没毛病啊 是不是你没有引用math的包？ #include <stdio.h> #include <math.h> int main(void) {  	double x,y;     scanf("%lf",&x); 	y=sin(x);     printf("%lf,%lf",x,y); 	return 0; }

不知道出什错了        －－


Question: 这个错在哪里了，为什么啥都输不出来

#include<stdio.h>  int main() {     /*     int n,i,j=0;     int a,b,c;      scanf("%d",&n);        for(i=100;i<1000;i++)        {        a = i%10;        b = i/10%10;        c=i/100;        if(a+b+c==7)        j++;        }        if(j==n)        printf("%d\n",i);        */      int n, idx, tmp;     int sum = 0, cnt = 0;      scanf("%d",&n);     idx = 100;     while (idx < 1000) {         tmp = idx;         while (tmp) {             sum += tmp % 10;             tmp /= 10;         }         if (sum == 7)             cnt++;         if (cnt >= n)             break;         idx++;         sum = 0;     }      if (cnt == n)         printf("No.%d\n", idx);     else         printf("n is too big!\n");      return 0; } 供参考～  n不能太大，如果太大确实无输出。因为在1000以内的三位数里可能没有n个每位和是7的。

引用 1 楼 ghffffyb 的回复：#include<stdio.h> int main() { 	int n,i,j=0; 	int a,b,c; 	scanf("%d",&n); 	for(i=100;i<1000;i++) 		{    		    a=i%10;b=i/10%10;c=i/100; 			if(a+b+c==7) 			j++; 		} 		if(j==n) 		printf("%d\n",i); 	}if(j==n) printf(“%d”,I); 放到循环里

你应该在for最后j++改为printf("%d ",i);就行了最后的if输出就去掉

只有你输入的n等于 100到999之间等于7的数目才输出

为什么你最后输出的是i

#include<stdio.h> int main() {     int n, i, j = 0;     int a, b, c;     int ra[600] = { 0 };     scanf("%d", &n);      for (i = 100; i < 1000; i++)     {         a = i % 10;         b = i / 10 % 10;         c = i / 100;          if (a + b + c == 7)         {             ra[j] = i;             j++;         }     }      if (n <= j + 1)         printf("%d\n", ra[n - 1]);      return 0; } 这样你觉得可行？


Question: 我是一个学生  哪位跟我讲解下

计算公式也可以用mach.h头文件

a和b应该也要定义为double类型，然后提示用户输入，在scanf输入a和b，scanf("%lf %lf",&a,&b)，再用你那个s＝2*a*b/((a+b)*(a+b))，在输出s，printf("s＝%.2lf\n",s)


Question: 维吉尼亚密码算法的C语言实现(大小写转换，错误检测)满足老师的所有要求，无bug

scanf("%s",choice); getchar();//for '\n'  后面加一句getchar();


Question: C语言计算最小公倍数

求最小公倍数，建议可以顺便算一下最大公约数,比如x, y的最大公约数是z，那么最小公倍数即x * y / z

因为x++这个， 之前你输入6  ，4时候，x变成了2，； 你下次输入3， 3时候，x还是2， 你想想就知道结果了，你把x=1初始化，放在循环内，就可以解决问题了吧

引用 4 楼 user-3 的回复:用编译器调试一下就知道了。  调试时必备的技能之一。 时 -> 是

引用 3 楼 qq_45724609 的回复:[quote=引用 2 楼 user-3的回复:]2 6 4 12 3 3 6 请按任意键继续. . . 您好，谢谢您找出问题，但是输入3 3，则a=3,b=3,3％3=0,那应该直接输出3＊1，即3啊，为什么会输出6呢[/quote]用编译器调试一下就知道了。  调试时必备的技能之一。

引用 2 楼 user-3的回复:2 6 4 12 3 3 6 请按任意键继续. . . 您好，谢谢您找出问题，但是输入3 3，则a=3,b=3,3％3=0,那应该直接输出3＊1，即3啊，为什么会输出6呢

2 6 4 12 3 3 6 请按任意键继续. . .


Question: 请帮忙讲解一下，谢谢！

不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

Debug下单步执行一下就比较清楚了~

因为x=1，所以第一层的switch进入到case1，然后进入到第二层switch，由于y = 0，所以执行第一个case 0，得到a++，即此时a是1； 由于第一层switch的case 1没有break,所以继续执行case2，因此执行a++, b++;break出第一层switch。得到的结果 就是a = 2, b = 1;


Question: 新手求教

getchar()用来读取输入的字符, 如果输入 '\n' (回车) 则条件不成立,退出循环

while里是循环条件，每一次要进行循环体都要判断 这个条件是否成立，成立就进入，不成立就退出循环 ｃｈ　＝　ｇｅｔｃｈａｒ（）　！＝　＇＼ｎ＇就是输入的字符是否等于换行 假如输入ａ，＇ａ＇  不等于＇＼ｎ＇，这个条件成立，就会进入循环里面 假如按了下回车，那么这个不等于条件就不成立，就退出循环。

引用 1 楼 子衿兄的回复:换行，也就是输入的时候如果输了回车键，就退出循环 \n是换行，！＝是判断是否不等于，那连起来什么意思

换行，也就是输入的时候如果输了回车键，就退出循环


Question: 我是小白，有个问题想请大佬们帮我看看，我看不明白

引用 4 楼 weixin_45740438 的回复:我弄好了，谢谢大佬，我把前面的数字去掉了，就好了 这种问题，你在编译的时候引入的，还是你拷贝别人的代码引入的。 我猜是第二种可能。

引用 1 楼 user-5 的回复:你把build框报的错说全啊你这行代码是没问题的 代码没有看出来有问题！错误信息不全

要换行加个斜杠 #include <stdio.h> void  main() {     printf("Hello Feiends,Welcome to study C \ language\n"); }

引用 5 楼 自信男孩的回复:[quote=引用 4 楼 weixin_45740438 的回复:] 我弄好了，谢谢大佬，我把前面的数字去掉了，就好了 这种问题，你在编译的时候引入的，还是你拷贝别人的代码引入的。 我猜是第二种可能。[/quote] 我按照教科书，一个字一个字扣在里面了，我以为在电脑里面也是那样的

我弄好了，谢谢大佬，我把前面的数字去掉了，就好了

引用 楼主 weixin_45740438的回复:1   #include <stdio.h> 2   void  main() 3   { 4	     printf("Hello Feiends,Welcome to study C language\n"); 5   }  第四行上下是一行上的，但在这里发布就变成了两行 然后我运行不了，肯定是哪里出错了，但又不懂  HelloFriends.obj - 2 error(s), 0 warning(s)  上面这段是Build 框框里面的 这该怎么弄，大佬们 在language之前有一个换行符，把光标放到language之前回退一下。

你把build框报的错说全啊你这行代码是没问题的


Question: 我又来求教了

getchar()得到是'\n'，所以的输出是一个换行符而不是'A'

我发现了，getchar多余啊，抱歉啦


Question: 新手求教

哦哦，好的。我还以为只是隔开

这是一个运算符，逻辑或运算，表示两边的表达式，有一个为真，则为真

||是“或”的意思，只要其中一个条件满足就行


Question: 小白向大神求教如何在vim中生成main函数。c语言

建议修改.bashrc。  https://blog.csdn.net/weixin_40637594/article/details/79561370


Question: C初学者求救信号发送

引用 10 楼 Sichongzou32的回复:[quote=引用 9 楼 wowpH的回复:]麻烦提供两组以上的测试数据以及期望的结果。 asdfgfdaa a 3[/quote] 那你这个错的有点离谱。  难道不是先接收字符串，再接受那一个a吗？为什么你的顺序反了。

a a a d ffff f 4

引用 9 楼 wowpH的回复:麻烦提供两组以上的测试数据以及期望的结果。 asdfgfdaa a 3

程序不是从上而下运行的么，从上面先运行getchar输入字符串，然后再用scanf载入a

麻烦提供两组以上的测试数据以及期望的结果。

引用 5 楼 况永金的回复:x 没有初始化 如果我思路有什么问题的话指点一下呗，还是我getchar和scanf用法错了，

引用 6 楼 Sichongzou32的回复:[quote=引用 5 楼 况永金的回复:]x 没有初始化 我这个在调试的时候就有问题 第一行以后回车就直接算结果了 就感觉跳过了scanf[/quote] 我想的时候用getchar预存字段然后回车开始第二行 用scanf载入搜索的字符 之后再用循环判定搜索字符在字段中的数量

引用 5 楼 况永金的回复:x 没有初始化 我这个在调试的时候就有问题 第一行以后回车就直接算结果了 就感觉跳过了scanf

x 没有初始化

引用 2 楼 user-3的回复:scanf（"%c"，&y）; 问题不是这个 补上&也一样

引用 2 楼 user-3的回复:scanf（"%c"，&y）; 小问题 这个我是我手机打的时候没注意

scanf（"%c"，&y）;

scanf(%c,y); 打错了


Question: c语言代码

void swap(int *a, int *b) {     int tmp = *a;     *a = *b;     *b = tmp; }


Question: 合并顺序表的问题

引用 1 楼 自信男孩的回复:#include <stdio.h>  #define MAXSIZE 100           /* 顺序表的最大长度 */  typedef int ElemType;         /*ElemType 为顺序表元素的类型 */ typedef struct{     ElemType data[MAXSIZE];     int length;              /* 顺序表的实际长度 */ }SqList;   void Creat_SqList(SqList *L,int n) {     int i;     L->length=n;     i=0;     printf("\ninput %d data : ", n);     while(i<n){         scanf("%d",&L->data[i]);         i++;     } }  void Print_SqList(SqList *L) {     int i,n;     n=L->length;     i=0;     printf("\noutput %d data : ",n);     while(i<n)     {         printf("%d ", L->data[i]);         i++;     }     printf("\n"); }  //合并函数的定义  //merge_Seq (SeqList *LA, SeqList *LB, SeqList *LC) void merge_Seq (SqList *LA, SqList *LB, SqList *LC) {     int i,j,k;     i=0,j=0,k=0;       while(i<LA->length&&j<LB->length)         //if(LA->ElemType data[i]<LB->ElemType data[j])         if(LA->data[i] < LB->data[j])         {             //LC->ElemType data[k]=LA->ElemType data[i];             LC->data[k] = LA->data[i];             i++;             k++;         }         else         {             //LC->ElemType data[k] = LB->ElemType data[j];             LC->data[k] = LB->data[j];             j++;             k++;         }      while(i < LA->length)     {         //LC->ElemType data[k]=LA->ElemType data[i];         LC->data[k] = LA->data[i];         i++;         k++;     }       //while(j<LB->last)     while(j<LB->length)     {         //LC->ElemType data[k]=LB->ElemType data[j];         LC->data[k] = LB->data[j];         j++;         k++;     }     //LC->length = LA->length+LB->length+1;     LC->length = LA->length+LB->length; }    //main() int main(void) {     SqList LA,LB,LC;     int n;     printf("\n input1: ");     scanf("%d", &n);     Creat_SqList(&LA,n);      //开始进行第二个数组的输入     n=0;     printf("\n input2: ");     scanf("%d",&n);     Creat_SqList(&LB,n);//输入完毕      Print_SqList(&LA);     Print_SqList(&LB);      merge_Seq(&LA, &LB, &LC);     Print_SqList(&LC); }   供参考～ (⊙o⊙)哇谢谢啦😘


Question: 请问各位大佬，能否推荐一本学习c语言的书

选一本教材后，然后多练习，这本就是实践的东西，不码砖，看再多书也没用。


Question: dddd

设两个变量，循环判断就可以。   建议以后直接截屏吧，这样吧，拍照看不清。


Question: c语言运算结果出现-1.#IND00怎么回事？

引用 3 楼 自信男孩的回复:#include<stdio.h> #include<math.h>  //main () int main () {     printf("请输入a,b,c以计算方程ax^2+bx+c=0的解\n");     int a,b,c,dt;     float x1,x2;     scanf("%d%d%d",&a,&b,&c);      //if(a=0)     if(a==0)     {         //if(b=0)         if(b==0)         {             printf("该方程无解");         }         else         {             //printf("该方程的解为x1=x2=%f",(-c)/b);             printf("该方程的解为x1=x2=%f",(-c)*1.0/b);         }     }     else     {         dt=b*b-4*a*c;         if(dt<0)         {             printf("该方程无解");         }         else         {             float g=sqrt(dt);             x1=(-b+g)/(2*a);             //x1=(-b-g)/(2*a);             x2=(-b-g)/(2*a);             printf("该方程的解为x1=%f,x2=%f",x1, x2);         }     }     getchar();     getchar();     return 0; }  供参考～  对比代码，找出自己的问题～  注意=和==的区别～ 谢谢啦！非常感谢帮我解决，我会记住这个问题的！

IND即indeterminate，表示计算时出现数值不确定的错误，比如对负数开方

代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。


Question: 请各位大佬指教

Va=4/3*PI*r*r*r; 这句改一下：  Va=4.0/3*PI*r*r*r; 要确保4/3是浮点运算～

你用的是VS2019吧，这个版本scanf是会报错的，用scanf_s就好了。  #include<stdio.h> #include<stdlib.h>  #define PI 3.14 int main() { 	double r, h, C1, Sa, Sb, Va, Vb; 	scanf_s("%lf %lf", &r, &h); 	C1 = PI * r * 2; 	Sa = PI * r * r; 	Sb = 4 * PI * r * r; 	Va = 4 / 3 * PI * r * r * r; 	Vb = PI * r * r * h; 	printf("%.2lf\n", C1); 	printf("%.2lf\n", Sa); 	printf("%.2lf\n", Sb); 	printf("%.2lf\n", Va); 	printf("%.2lf\n", Vb); 	return 0; }

引用 3 楼 自信男孩的回复:楼主的问题是什么？～ 问一下代码儿哪儿错了，每次提交都错误

楼主的问题是什么？～

#include <stdio.h> #include <stdlib.h> #define PI 3.14159265 int main() {     double r,h,C1,Sa,Sb,Va,Vb;     scanf ("%lf%lf",&r,&h)；     C1=PI*r*2;     Sa=PI*r*r;     Sb=4.0*PI*r*r;     Va=4.0/3.0*PI*r*r*r;     Vb=PI*r*r*h;     printf("%.2lf\n",C1);     printf("%.2lf\n",Sa);     printf("%.2lf\n",Sb);     printf("%.2lf\n",Va);     printf("%.2lf\n",Vb);     return 0; ｝


Question: 新手求救

搜一下选择排序法。你现在用的这个可能是冒泡排序法，但是写错了。

引用 1 楼 大佬求带 的回复:大佬救救孩子吧 有需要加 四六五六一七七二七

大佬救救孩子吧


Question: 求救

已经重发了，结贴

帮结帖+蹭分


Question: 求e

标识符不能是：n!


Question: 大一新生自学c语言遇到问题

return 0 输入分号后就这样了 C:\Users\Razer\Documents\collect2.exe	[Error] ld returned 1 exit status

return 0后面没加分号

关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

#include <stdio.h>  int main() {     int hour1,minute1;     int hour2,minute2;      scanf("%d,%d", &hour1, &minute1);     //scanf("%d,$%d", &hour2, &minute2);     scanf("%d,%d", &hour2, &minute2);      int t1 = hour1*60+minute1;     int t2 = hour2*60+minute2;      int t=t2-t1;      printf("时间差是%d小时%d分钟",t/60,t%60);      return 0; } 供参考～

main函数的函数名输入错误

引用 3 楼 user-6 的回复:int main()  return 0后面加分号 是啊，main拼写错误

int main()  return 0后面加分号


Question: 新手求教

引用 6 楼 weixin_44930231的回复:[quote=引用 4 楼 子衿兄的回复:]将     if (c!=' '||c!='\n'||c!='\t')  修改为  if (c!=' ' && c!='\n'&&c!='\t') { 你代码的意思，是当输入的为空格 或换行或制表符时，就输出打印，状态为OUT，下面这个不是这些字符时也打印，状态修改为IN  当第一次输入g 然后空格，，上面和下面的if都会进入。  不好意思还是不明白为什么d不会输出。 能否详细说一下呢？ 谢谢[/quote] 已经明白了，谢谢。 是短路特性。

第一个空格的时候status值为IN，不执行if...putchar

引用 4 楼 子衿兄的回复:将     if (c!=' '||c!='\n'||c!='\t')  修改为  if (c!=' ' && c!='\n'&&c!='\t') { 你代码的意思，是当输入的为空格 或换行或制表符时，就输出打印，状态为OUT，下面这个不是这些字符时也打印，状态修改为IN  当第一次输入g 然后空格，，上面和下面的if都会进入。  不好意思还是不明白为什么d不会输出。 能否详细说一下呢？ 谢谢

引用 3 楼 yiyefangzhou24的回复:第一个空格的时候status值为IN，不执行if...putchar 你好，能否详细说一下，为什么第二个字符d不会输出吗？ 谢谢

引用 1 楼 user-3的回复:你的程序的功能是什么。 在编写每行输出一个单词的时候发现这样子的话第二个字母不会输出所以想弄明白😊

你的程序的功能是什么。


Question: 各位大佬跪求一帮

引用 8 楼 赵4老师的回复:不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！ 谢谢您啊，领教了，相信事实

你用长度来推测变量类型不科学 应该用 cout<<typeid(变量).name()<<endl; 这是C++11的东西 可以直接打印出来变量类型

1.2这个数值应该是按照double类型来处理的，所以整个表达式是按照double来运算～

引用 2 楼 子衿兄的回复:必定是float 答案是double啊，我有个想法，就是1.2未定义，默认是双精度类型，不知是不是？

必定是float

引用 4 楼 子衿兄的回复:[quote=引用 3 楼 qq_45673225 的回复:] [quote=引用 2 楼 子衿兄的回复:]必定是float 答案是double啊，我有个想法，就是1.2未定义，默认是双精度类型，不知是不是？[/quote]  你说的是对的  [/quote] 哦哦，8字节，看来应该是，谢谢

引用 3 楼 qq_45673225 的回复:[quote=引用 2 楼 子衿兄的回复:]必定是float 答案是double啊，我有个想法，就是1.2未定义，默认是双精度类型，不知是不是？[/quote]  你说的是对的


Question: 大佬看一下之后的代码怎么打啊

这个怎么调用删除函数啊


Question: C语言 for语句莫名其妙被跳过，若图中name字符串改成字符（包括后续）则可正常运行

#include <stdio.h> #include <string.h> //void main() int main() {     int i, j;     struct candidate     {         char name[10];         int vote;     } a[3] = {         {"aa", 0},         {"bb", 0},         {"cc", 0}     };     for( j=0; j < 8; j++)     {         char s[10];         printf("%d.", j+1);         gets(s);         for( i=0; i < 3; i++)         {             //if( s==a[i].name)             if( strcmp(s, a[i].name) == 0)             {                 a[i].vote += 1;             }         }     }     for( i=0; i < 3; i++)     {         printf("%d\n", a[i].vote);     } } 供参考～

#include <string.h>  if(s == a[i].name) 换 if(strcmp(s,a[i].name) == 0)

新手求助


Question: 救救孩子，不知道为什么程序调试总是出现问题中途结束，代码如下

引用 1 楼 user-3 的回复:int main() { void creategraph(graphadjlist *g); graphadjlist *a=new graphadjilist; creategraph(a); delete a; }  new改成malloc，delete改成free就可以了

C语言没有new和delete吧

函数声明跑到main里面去了。

我运行之后结果就是这样的，调试会说access violation 不明白是为什么


Question: 大一新生自学c语言遇到的问题

没有问题吧， 是否你输入没有切到英文


Question: 大佬大佬求帮

C语言就返回错误，C++可以抛出异常


Question: 大佬们，这个为什么输出后没有结果

j的循环的结束的条件i%j=0，在第一轮循环的时候就退出了啊，当然没有结果了。


Question: 大佬求帮

这是在考查运算符的优先级吧 （）优先级最高， 其次% ＊ ／， 这些是从左往右 然后再是＋ 所以这个式子 其实就是 ((((i%（(int)(x+y)) *j) /2) /3)+y

引用 3 楼 qq_45673225 的回复:那为什么是52.00，不是52.50呢？还有小数点的问题 整数和整数相除结果为整数

那为什么是52.00，不是52.50呢？还有小数点的问题

引用 楼主 qq_45673225的回复:以下程序的运行结果是 _ _ 52.00____ _ 。 #include <stdio.h> void main() {int i=5,j=9;  float x=2.3,y=45;  printf(“% 8.2f \n”,i%(int)(x+y)*j/2/3+y); } 这个程序能运行吗？题目来自百度文库，又怎么算 哦哦，符号打错了，但是还是不知道如何算，不应该是52.5吗？


Question: C语言指针先交换地址再交换值的问题

引用 3 楼 MelonSuika 的回复:因为你函数内，x和y始终指向的是a和b这两个不同的变量。 那么只要你执行了下面这句， //交换指针所指向的值     i=*x;     *x=*y;     *y=i; 无论原来是x指向a，y指向b还是x指向b，y指向a， 最终就是交换了a和b的值，区别就是是a和b的值交换还是b和a的值交换罢了  您看我理解的对不对。 在子函数内部,x,y只是a,b的复制，所以交换x,y只是交换了a,b的指向地址，值的交换只是复制品值的交换，并没有影响实参的本身值， 当父函数调用子函数的时候，因为运行了	 	i=*x; 	*x=*y; 	*y=i; 所以父函数的a,b的值发生交换，只不过此时*x指向的是a,*y指向的是b,子函数内部的值的互换并没有实际意义，因为都是复制品， 最终是由主函数调用子函数指针的指向所决定的。

http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

交换地址只在函数内部生效

引用 5 楼 MelonSuika 的回复：没什么大问题， //交换指针中的内容     t=x;     x=y;     y=t; 这几句只是实参的一份拷贝值并且是拷贝值之间互相交换。 对实参没什么影响。我明白了谢谢您


Question: 代码写完了  就是改不出来  求好心人帮忙改改

在网上估计要意思下才行。


Question: 求助

引用 1 楼 與蘤舊縐的回复:其实可以直接printf("********\n        welcome\n**************")（数目不对奥）额，还有个框忘了，加上就行  也可以把图案存进二维数组，然后输出数组，每一行输出一个\n 好的好的谢谢我去试试


Question: 新手求救

你这个程序只输入一次，当然max只能和你输入的这一个数比较了呗


Question: 新手求救

for/while循环没有意义，因为循环里的a还是循环外第一次输入的。

谢谢。。。。。。。

你把输入语句放在循环外面，循环里面又没有输入，当然这样


Question: 娃娃哭了，有木有人免费的写一下，用最通俗易懂的C语言写一写。

是业务代码，无聊

有问题可以提问题哈。 可以加我的群里，大家一起讨论。

引用 4 楼 子衿兄的回复:吓唬下，没什么。 这个应该是数据结构课程设计的题目吧 C语言程序设计，我代码敲的，差不多了，就是还有一些小问题

吓唬下，没什么。 这个应该是数据结构课程设计的题目吧

引用 1 楼 子衿兄的回复:刚布置完，就上网了找人了？？     PS: 前沿技术-嵌入式 720363947 编程语言C/C++ 718801748 编程算法与数据结构群15035519 这个是干啥的？？？？？？？


Question: 编程小白求助，c语言编程

没有太明白题意是什么？你可以加直接联系我wx:18092585064


Question: 链表插入问题，请教

#include <stdio.h> #include <stdlib.h>  typedef struct List {     int data;     struct List *Next; }Node,*NodePtr;  NodePtr ListPtr;  void ListInsert(NodePtr L,int i) {     NodePtr p;     NodePtr q;     p = L;     //while(p)     while(p->Next)     {         p = p->Next;     }     q = (Node*)malloc(sizeof(Node));     if (!q)         exit(0);     q->data = i;     printf("111\n");     p->Next = q;     printf("111\n");     p = q;     p->Next = NULL;  }  void ListCreatTail(NodePtr *L) {     *L = (Node*)malloc(sizeof(Node));     if (!(*L))         exit(0);     (*L)->Next = NULL; }   void ListDelete(NodePtr L, int i) {     int j  = 1;     NodePtr p,q;     p=L;     //while(p,j < i)     while(p && j < i)     {         p=p->Next;         ++j;     }     q=p->Next;     p->Next = q->Next;     free(q);  }  void ListPrintf(NodePtr L) {     NodePtr p;     p=L->Next;     while(p)     {         printf("%d\n",p->data);         p=p->Next;     } }  //void main() int main() {     ListCreatTail(&ListPtr);     ListInsert(ListPtr,1);     /* ListInsert(ListPtr,2);        ListInsert(ListPtr,3);        ListInsert(ListPtr,4);        ListInsert(ListPtr,5);        ListDelete(ListPtr,2);*/     ListPrintf(ListPtr);      return 0; }   供参考～

对 明白了非常感谢 我这个方式创建的链表带不带头结点呢，哪个是头结点哪个是头指针呀

while(p)  {	    p = p->Next;	   } 这里将p指向了Null，所以在运行到下面：p->Next = q;这条语句时，会出错


Question: 设计登录系统找不到bug在哪

崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

又揪掉了一根头发，崩了。


Question: GCC编译，printf打印的值为什么总在最后呢？求解

还是不行 ，  不过同一个程序在dos窗口运行显示正常

谢谢啊   我已经直接安装LINUX啦         省的出这么多问题

gets前加rewind(stdin);试试看

这是 mingw 的缺陷，所以就有了 winpty

很不友好，可以尝试使用   `winpty`  见 `cat $(which lua)` + `gcc -fexec-charset=GBK`  启动慢慢慢慢慢慢

那就应该是这个窗口对应程序对stdout和stdin管道重定向做的不够好。


Question: 小白求教大佬

#include<stdio.h>  #define MAX(x,y) ((x)>(y)?(x):(y)) #define MIN(x,y) ((x)<(y)?(x):(y))  int main() {     int a,b,d,m;     float c;     scanf("%d %d", &a,&b);     d = a*5;     m = MAX(d,b)-MIN(d,b);     //if(m=360) m=360-m;     if(m==360)         m=360-m;     printf("At %d:%02d the angle is %.1f degrees.\n",a,b,c=m*6);     return 0; } 供参考～


Question: C语言  读取位置 0x00000064 时发生访问冲突。 怎么解决？

1、char r[256]; 是栈内存，函数结束会被销毁 2、char input(char Str[128]) 返回的是char，我猜你想返回char*

崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

#include <stdio.h> #include <string.h> #pragma warning(disable:4996)  //char input(char Str[128]) char *input(char Str[128]) {     //char r[256];     static char r[256];     printf(Str);     //scanf_s("%s", &r,256);     scanf_s("%s", r, 256);     fflush(stdin);     //return &r;     return r; }  int main() {     char a[256];     strcpy(a, input("输入一串文字。>>"));     printf(a);     return 0; }  供参考～

input函数写利有问题


Question: 函数

上面都说得很清楚了，形参名是一个标识符，标识符定义必须守规矩。

标识符：用来标识常量，变量，函数等的字符序列。  命名规则：必须由字母或下划线开头。

引用 2 楼 qq_45704513 的回复:[quote=引用 1 楼 自信男孩的回复:]int lover (int 1,int 2  ) 参数名不能用数字。 什么意思？没明白，可以详细说一下吗[/quote] 你自己编译一下就知道问题了～

引用 1 楼 自信男孩的回复:int lover (int 1,int 2  ) 参数名不能用数字。 什么意思？没明白，可以详细说一下吗

int lover (int 1,int 2  ) 参数名不能用数字。


Question: 请问Dev c++ 如何生成可独立于开发环境的执行程序？

加 -static参数

引用 3 楼 秦岭深山土鸡蛋付海波 的回复：编译运行后就会有exe文件存在文件夹啊那个exe不能单独运行

编译运行后就会有exe文件存在文件夹啊

引用 1 楼 taodm 的回复：加 -static参数能详细说一下，我是在Windows下安装的dev c++，谢谢了


Question: 满足条件的数累加

#include<stdio.h>  int main(void) {     int m, n, tmp;     int i,sum=0;      scanf("%d %d", &m,&n);      if (m > n) {         tmp = m;         m = n;         n = tmp;     }      for (i = m; i <= n; i++) {         if (i % 17 == 0)             sum += i;     }     /*     if(m%17!=0)         m+=17-m%17;     if(n%17!=0)         n*=n/17;     for(i=m;i<=n;i+=17)         sum+=i;     */     printf("%d\n",sum);      return 0; } 供参考～

你输入一下33 35试试

n *= n/17 应该是 n = 17 * (n/17); 吧。


Question: Vs code 命令窗口中文输出乱码

对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

引用 7 楼 stay黑 的回复:[quote=引用 5 楼 liups的回复:][quote=引用 4 楼 stay黑 的回复:] [quote=引用 3 楼 liups的回复:][quote=引用 2 楼 stay黑 的回复:] [quote=引用 1 楼 sinat_38804017的回复:]右下角有个编码设置，UTF-8，点击选择gbk，然后保存，重新运行就行了 换成Gbk的话，代码里的中文直接在vs code里乱码[/quote] 代码里面修改一下就好了。如果代码很长，可以整体拷到记事本中转换。[/quote] 代码哪里需要修改。。。。[/quote] 乱码的汉字重新输入一下[/quote] 还是乱码，没有用，加入一天printf语句，中文也乱码[/quote] 你首先要GBK或者GB2312这些，然后看源代码中有乱码的给改成不乱码，再然后就没有问题了

引用 5 楼 liups的回复:[quote=引用 4 楼 stay黑 的回复:] [quote=引用 3 楼 liups的回复:][quote=引用 2 楼 stay黑 的回复:] [quote=引用 1 楼 sinat_38804017的回复:]右下角有个编码设置，UTF-8，点击选择gbk，然后保存，重新运行就行了 换成Gbk的话，代码里的中文直接在vs code里乱码[/quote] 代码里面修改一下就好了。如果代码很长，可以整体拷到记事本中转换。[/quote] 代码哪里需要修改。。。。[/quote] 乱码的汉字重新输入一下[/quote] 还是乱码，没有用，加入一天printf语句，中文也乱码

还是乱码，没有用，加入一天printf语句，中文也乱码

引用 4 楼 stay黑 的回复:[quote=引用 3 楼 liups的回复:][quote=引用 2 楼 stay黑 的回复:] [quote=引用 1 楼 sinat_38804017的回复:]右下角有个编码设置，UTF-8，点击选择gbk，然后保存，重新运行就行了 换成Gbk的话，代码里的中文直接在vs code里乱码[/quote] 代码里面修改一下就好了。如果代码很长，可以整体拷到记事本中转换。[/quote] 代码哪里需要修改。。。。[/quote] 乱码的汉字重新输入一下

引用 3 楼 liups的回复:[quote=引用 2 楼 stay黑 的回复:] [quote=引用 1 楼 sinat_38804017的回复:]右下角有个编码设置，UTF-8，点击选择gbk，然后保存，重新运行就行了 换成Gbk的话，代码里的中文直接在vs code里乱码[/quote] 代码里面修改一下就好了。如果代码很长，可以整体拷到记事本中转换。[/quote] 代码哪里需要修改。。。。

引用 2 楼 stay黑 的回复:[quote=引用 1 楼 sinat_38804017的回复:]右下角有个编码设置，UTF-8，点击选择gbk，然后保存，重新运行就行了 换成Gbk的话，代码里的中文直接在vs code里乱码[/quote] 代码里面修改一下就好了。如果代码很长，可以整体拷到记事本中转换。

引用 1 楼 sinat_38804017的回复:右下角有个编码设置，UTF-8，点击选择gbk，然后保存，重新运行就行了 换成Gbk的话，代码里的中文直接在vs code里乱码

右下角有个编码设置，UTF-8，点击选择gbk，然后保存，重新运行就行了


Question: c语言输出答案求解

贴代码吧，猜不出来的～

无源代码，不分析。


Question: 不会输入数据。关于scanf

头扭的很不难受的～

格式规范字段：scanf和wscanf函数  格式规范的格式如下：    %[*][宽度][{h l i64 l}]类型    format参数指定输入的解释，可以包含以下一项或多项：    空白字符：空白（''）；制表符（'\t'）；或换行符（'\n'）。空白字符使scanf读取但不存储输入中的所有连续空白字符，直到下一个非空白字符。格式中的一个空白字符与输入中的任意数字（包括0）和空白字符组合匹配。     非空白字符，百分比符号（%）除外。非空白字符会导致scanf读取而不是存储匹配的非空白字符。如果stdin中的下一个字符不匹配，scanf将终止。     格式规范，由百分号（%）引入。格式规范使scanf读取输入中的字符并将其转换为指定类型的值。该值被分配给参数列表中的参数。  格式是从左到右读取的。格式规范之外的字符应与stdin中的字符序列匹配；stdin中的匹配字符将被扫描但不会存储。如果stdin中的某个字符与格式规范冲突，scanf将终止，并且该字符将保留在stdin中，就好像它没有被读取一样。    当遇到第一个格式规范时，第一个输入字段的值将根据此规范转换并存储在第一个参数指定的位置。第二个格式规范将转换第二个输入字段并将其存储在第二个参数中，依此类推，一直到格式字符串的末尾。    输入字段被定义为所有字符，直到第一个空白字符（空格、制表符或换行符），或者直到第一个不能根据格式规范转换的字符，或者直到达到字段宽度（如果指定）为止。如果给定规范的参数太多，则将计算额外的参数，但忽略这些参数。如果格式规范没有足够的参数，则结果是不可预测的。    格式规范的每个字段都是表示特定格式选项的单个字符或数字。在最后一个可选格式字段之后出现的类型字符确定输入字段是被解释为字符、字符串还是数字。    最简单的格式规范只包含百分号和类型字符（例如%s）。如果百分号（%）后跟一个没有格式控制字符意义的字符，则该字符和以下字符（直至下一个百分号）将被视为普通字符序列，即必须与输入匹配的字符序列。例如，要指定输入百分号字符，请使用百分号。    百分号后面的星号（*）禁止分配下一个输入字段，该字段被解释为指定类型的字段。字段已扫描但未存储。


Question: Xcode键盘输入和粘贴输入结果不一样？

你debug跟踪一下就都知道了

一定是程序的问题，可能是特殊符号处理的错误，比如多一个回车等等


Question: for语句

for在此处引导的是循环？

你不懂的不是fort循环而是strtok，百度strtok的用法


Question: 编程中出问题了

&a，&b，这个参数要用指针

我知道了，但确实他通过了

引用 5 楼 user-2的回复:scanf("%d %d", a,b); 这样能行？ 额。。这个问题出在哪呢

scanf("%d %d", a,b); 这样能行？

引用 3 楼 user-2的回复:不相信能通过编译 图片上写了没有错误哇

不相信能通过编译

引用 1 楼 user-2的回复:这能通过编译？ 可以啊，没出问题，就是输出不了东西，挺奇怪的

这能通过编译？