Question: 在vc上可以运行，在tcc下出现以下错误

#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define LIST_INT_SIZE 100//线性表存储空间的初始分配量 #define LISTCREMENT 10//线性表存储空间的分配增量 typedef  int Status; typedef  int ElemType; typedef struct{ 	ElemType *elem;//存储空间基址 	int length;//当前长度 	int listsize;//当前分配储存容量 	int listcrement;//当前分配增量 }SqList;  Status InitList_Sq(SqList &La){  	La.elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType)); 	La.length=0; 	La.listsize=LIST_INT_SIZE; 	return 1; }  Status creat(SqList &La)//创建顺序表 {    int i;   scanf("%d",&La.length);      for(i=0;i<La.length;i++) 	 { 		 scanf("%d",&La.elem[i]);      } 	 return 0; } void reverse(SqList &La)//逆序 { 	int i,temp; 	for(i=0;i<La.length/2;i++) 	{temp=La.elem[La.length-1-i];      La.elem[La.length-1-i]=La.elem[i]; 	 La.elem[i]=temp;}  	 } void output(SqList &La)//输出线性表 { 	int i;     for(i=0;i<La.length;i++)     printf("%d ",La.elem[i]); }  void main(){     SqList La;     InitList_Sq(La);     creat(La); 	reverse(La); 	output(La); }

可能是由于编译器支持的语法格式不一致，跟标准不一样导致的。建议贴出代码～

都什么年代了还tcc 太多语法不支持了

引用 9 楼 轻箬笠的回复:如果我没记错的话，引用是c++的概念，c语言是没有这样的东西的。 楼主可以将参数定义成SqList *La 然后 InitList_Sq(&La); creat(&La); reverse(&La); output(&La); 问题已经解决谢谢，学了c和c++都弄混了

Status InitList_Sq(SqList &La){  应该是tcc可能不支持引用?  只支持指针 所以你改成指针来实现吧

引用 1 楼 轻箬笠的回复:是不是变量声明的问题？tcc好像要把所有的变量都放到最前面的。 楼主还是把全部代码贴出来看看吧。 贴出来了


Question: 百思不得其解？？

找到原因了，是把’除号’错误赋值给了op😂😂😂，我真是眼瞎了

输入时，注意数字和中间的符号（加减乘除）不要有空格，否则op可能接收到的是空格。 为了判断输入的是否是你想要的，可以在scanf后面把A B op都打印出来～

引用 楼主 CXL.的回复:编译也没有错啊，为什么第一个else里面的内容执行会得错误的结果，有大神给小白讲讲哪里不对了吗？ 这个程序没有问题啊，我按照你的程序写了一遍能够正常运行，估计是你输入的时候有问题吧，输入的时候不要加空格，比如要计算2+3就直接输入这三个，中间不要加空格，然后按enter键就可以了


Question: 任意输入10个数 分别算出正数和以及负数和的代码怎么敲

楼上正解，顶。

计算输入数据的正负数和代码如下：

引用 2 楼 masudong 的回复：[quote=引用 楼主 ?Black?Star的回复:]以及这个代码为什么错误 图片很模糊看不清楚，可以将图片设置清楚一点嘛[/quote]那个问题解决了 是因为上次的运行程序没关

权限有问题，打开文件的权限或者编译器打开的权限，建议用admin打开，代码没看出有啥问题，但是建议把x, y的打印放到for循环外。

引用 3 楼 @风轻云淡_ 的回复：你上一次运行的程序没关闭 嗯嗯 感谢

你上一次运行的程序没关闭

引用 楼主 ?Black?Star的回复:以及这个代码为什么错误 图片很模糊看不清楚，可以将图片设置清楚一点嘛

自己运行下就知道错在哪儿了就先不要来论坛问了


Question: 新人提问，为什么我这个程序输出一直都是inf

仅供参考：#include <iostream> #include <string> #include <algorithm> using namespace std; inline int COMPARE(string str1,string str2) {//相等返回0，大于返回1，小于返回-1          if (str1.size()>str2.size()) return 1; //长度长的整数大于长度小的整数     else if (str1.size()<str2.size()) return -1;     else                              return str1.compare(str2); //若长度相等，则头到尾按位比较 } string PLUS(string number1,string number2) {     int i;     int length1 = number1.size();     int length2 = number2.size();      string result="";      reverse(number1.begin(), number1.end());     reverse(number2.begin(), number2.end());      for(i = 0; i < length1 && i < length2; i++) {         char c = (char)(number1[i] + number2[i] - 48);         result = result + c;     }      while(i < length1) {         result = result + number1[i];         ++i;     }      while(i < length2) {         result = result + number2[i];         ++i;     }      int carry = 0;     for(i = 0; i < (int)result.size(); ++i) {         int value = result[i] - 48 + carry;         result[i] = (char)(value % 10 + 48);         carry = value / 10;     }      if(carry !=0 ) {         result = result + (char)(carry + 48);     }      for(i = result.size() - 1; i >= 0; i--) {         if(result[i] != '0') break;     }      result = result.substr(0, i + 1);      reverse(result.begin(), result.end());     if(result.length() == 0) result = "0";     return result; } string MULTIPLY(string number1, string number2) {     int i, j;     int *iresult;     int length1 = number1.size();     int length2 = number2.size();     string result = "";      reverse(number1.begin(), number1.end());     reverse(number2.begin(), number2.end());      iresult = (int*)malloc(sizeof(int) * (length1 + length2 + 1));     memset(iresult, 0, sizeof(int) * (length1 + length2 + 1));      for(i = 0; i < length1; i++) {         for(j = 0; j < length2; j++) {             iresult[i+j] += ((number1[i] - 48) * (number2[j] - 48));         }     }      int carry = 0;     for(i = 0; i < length1 + length2; i++) {         int value = iresult[i] + carry;         iresult[i] = value % 10;         carry = value / 10;     }      for(i = length1 + length2 - 1; i >= 0; i--) {         if(iresult[i] != 0)break;     }      for(; i >= 0; i--) {         result = result + (char)(iresult[i]+48);     }      free(iresult);      if(result == "") result = "0";     return result; } string factorial(string n) {     string temp = "1";     string i;     for(i = "1"; COMPARE(i, n) <= 0; i = PLUS(i, "1")) {         temp = MULTIPLY(temp, i);     }     return temp; } int main(void) {     cout << factorial("100") << endl;     return 0; } //93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 //

inf的原因是除数为0了。建议楼主在计算b之前把result2和result3打出来看看是否为0。

求阶乘为什么用double？

输入多少？就会溢出了？

引用 1 楼 user-5的回复:数据超出范围，溢出 其实我想要解决的办法

数据超出范围，溢出


Question: 各位大神，帮我看看，才刚学弄不懂，谢谢了

你的变量a,b 都没有初始化直接传入函数参数？ 建议先看看scanf函数的用法，以及函数的调用、定义。

scanf("%d,%d", &8, &6); 楼主想输入8,6吧。 那么a, b里面存的是什么？从你的逻辑里可以看出是存放的随机值 如果想输入8, 6。这么输入不如直接a = 8, b = 6; 另外，楼主的写法应该编译不过去的。

scanf("%d,%d,&8,&6")没有这种写法的。 int m, n; scanf("%d,%d",&m,&n);正常是这样，然后再终端输入两个整数，以","隔开

建议看看书上：函数声明的内容，以及scanf的用法。


Question: C语言初级小问题

return 0在旧超标准中可以省略 stdio.h也可以省略，前提是没用到其中的东东

stdio.h也可以省略的吗。

return 0在main()中可以省略（因为编译器会隐式帮你插入return 0），其它情况下不可省略


Question: 请问这个程序对吗？

引用 楼主 qq_45699498的回复:求三位数的平均数，要求保留三位小数。 保留3位小数是%.3lf


Question: 关于pta题，有大神指点吗

引用 6 楼 user-1的回复:[quote=引用 5 楼 user-1的回复:][quote=引用 4 楼 qq_41083923的回复:][quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064[/quote] 尴尬，我无权操作。既然如此那你把pi=acos(-1)试试。这还不行我就不知道什么原因了[/quote] 写错了，应该是-1.0[/quote] 也是不行_(´ཀ`」 ∠)__

引用 5 楼 user-1的回复:[quote=引用 4 楼 qq_41083923的回复:][quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064[/quote] 尴尬，我无权操作。既然如此那你把pi=acos(-1)试试。这还不行我就不知道什么原因了[/quote] 照样不行_(´ཀ`」 ∠)__

引用 5 楼 user-1的回复:[quote=引用 4 楼 qq_41083923的回复:][quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064[/quote] 尴尬，我无权操作。既然如此那你把pi=acos(-1)试试。这还不行我就不知道什么原因了[/quote] 写错了，应该是-1.0

引用 4 楼 qq_41083923的回复:[quote=引用 3 楼 user-1的回复:][quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064[/quote] 尴尬，我无权操作。既然如此那你把pi=acos(-1)试试。这还不行我就不知道什么原因了

引用 3 楼 user-1的回复:[quote=引用 2 楼 qq_41083923的回复:][quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集[/quote] https://pintia.cn/problem-sets/1174577858845577216/problems/1174579230118744064

引用 2 楼 qq_41083923的回复:[quote=引用 1 楼 user-1的回复:]多组输入。用while 用了，照样错_(´ཀ`」 ∠)__ [/quote] 题目链接发一下。我看看我的。这是哪个题集

引用 1 楼 user-1的回复:多组输入。用while 用了，照样错_(´ཀ`」 ∠)__

多组输入。用while


Question: 杭电oj acm-steps 1.2.2 An Easy Task，遇到了Time Limit Exceeded，求各位帮忙看下是什么问题

引用 5 楼 user-1 的回复:[quote=引用 4 楼 花札的回复:][quote=引用 3 楼 user-1 的回复:] 思路：这个可以用二分查找做。  left=Y, right=2147483647 middle等于他们和的一半。 然后判断Y和middle之间有多少个闰年。啊好的谢谢你我去试一下这个，那我原来这种写法是因为太慢超时了吗……[/quote] 你那个时间复杂度是O(n)级别的，对于多case的情况确实容易TLE。二分只要log(2n)级别要快的多。[/quote]好滴！谢谢你啦！

引用 4 楼 花札的回复:[quote=引用 3 楼 user-1 的回复:] 思路：这个可以用二分查找做。  left=Y, right=2147483647 middle等于他们和的一半。 然后判断Y和middle之间有多少个闰年。啊好的谢谢你我去试一下这个，那我原来这种写法是因为太慢超时了吗……[/quote] 你那个时间复杂度是O(n)级别的，对于多case的情况确实容易TLE。二分只要log(2n)级别要快的多。

引用 3 楼 user-1 的回复:思路：这个可以用二分查找做。  left=Y, right=2147483647 middle等于他们和的一半。 然后判断Y和middle之间有多少个闰年。啊好的谢谢你我去试一下这个，那我原来这种写法是因为太慢超时了吗……

引用 1 楼 user-1 的回复:你是一个年份一份年份判断的吗是的

你是一个年份一份年份判断的吗


Question: git配置分页显示

不知道你说的分页是什么 在命令后面加|more可以不一下子全部显示完 但是很多客户端都可以通过滚动条上拉显示历史输出,所以这个用途也不大


Question: C语言的环境

学c用VS? 不嫌麻烦吗?

你要Windows还是什么系统的？VS吗？2010就够用了

引用 3 楼 榕树’ 的回复:vs2019够新了吧 初学都折腾什么2019啊

环境？ 最新？  最新系统版本？最新 IDE？ 学习 c 无所谓，会 c 了不会这么问问题

为什么要最新的？适合才是最好的


Question: C语言这个递归方法求斐波那契，始终想不痛是谁想出这个方法的

只是因为我想不出这种方法吧，所以觉得很神奇。

这个不是想象中那么难，楼主可以看看用数据结构模拟递归调用的解决办法。技术上的追求是无止境的，不要以为在路边捡到的一朵小花就是全部的风景。 另外，提醒楼主及时结帖

引用 8 楼 SuperDay 的回复:引用 6 楼 YGLeeeon 的回复：引用 4 楼 SuperDay 的回复:就是以空间换时间我看楼主第一次接触，我就显摆一下，同时楼主要是有心人会进一步去探究递归算法。有什么不好的，老哥你真酸不是酸，空间换时间是有缺陷的，除非你能把缺陷给改善一下没有--我其实想回的不是你那条，是你下面那个，点错了。

引用 5 楼 636f6c696e 的回复:这个是最基础的解法，没人说是下效率高啊我是菜鸡，我错了

这个是最基础的解法，没人说是下效率高啊

就是以空间换时间

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

这样递归，效率太低了。有没有发现第1个数和第2个数被调用了8次。第3和第2个数调用了5次，第4和第3调用了3次，第4和第5个数的计算调用了2次。也就是越靠前的数被重复计算的次数越多.一共进行的冗余调用有14次。位数越冗余运算次数就会指数型增长。 递归算法是有套路的，给你来一个最基本的优化方法：分支记忆化 vector<int> record; int func_1(int n) { 	if (n == 1 || n == 2) { 		record[n] = 1; 		return record[n]; 	} 	if (record[n]) 		return record[n]; 	else { 		record[n] = func_1(n-1) + func_1(n-2); 		return record[n]; 	}  } int func(int n) { 	if (n == 1 || n == 2) { 		return 1; 	} 	return func(n - 1) + func(n - 2); }  int main() { 	int N=0; 	cout << "求第N位斐波那契数：" << endl; 	cin >> N; 	record.assign(N+1,0);  	DWORD start; 	start = GetTickCount(); 	cout<<func(N)<<endl; 	cout << "直接递归的用时:" <<(GetTickCount() - start) << endl;  	start = GetTickCount(); 	cout << func_1(N) << endl; 	cout << "优化重复运算的用时："<<(GetTickCount() - start) << endl;  	system("pause"); 	return 0; } 对比一下运算用时： 当运算靠前的斐波那契额数时 当运算大斐波那契数时：

这个程序貌似没错的呀？


Question: 加密方式

引用 2 楼 轻箬笠 的回复:第六感告诉我，有没有可能是加密的sqlite 这是sqlserver的数据，查varbinary和BLOB都说是二进制类型数据，这也不是啊。有点晕。

引用 1 楼 user-2 的回复:这个没人知道 看上去都是hexbin数据 但是转过去你也不知道是什么加密的 这一段代表着一个物品，但不知道是怎么转过来的或者怎么对应物品的，所以觉得是有加密或者是转进制了。

第六感告诉我，有没有可能是加密的sqlite

这个没人知道 看上去都是hexbin数据 但是转过去你也不知道是什么加密的


Question: 求助如何解析C语言编译产生的obj文件的内容

《Windows PE权威指南》


Question: 最近在学数据结构，求各位大佬指点

1 应该是链表翻转之前的头结点吧

引用 2 楼 自信男孩的回复:不知道代码，怎么知道输出的1是啥？ 第一个输入不是链表节点个数吗？ 第二行是链表节点， 最后输出的是逆序的链表节点～ 能看到的代码都在第一张图了

细节都没有怎么整？


Question: 关于LPBYTE类型取图片字节大小的问题。

这就对了

看来我的思路错了，不必用到fopen的。

@SuperDay  查阅一些资料解决了~  SIZE_T len=_msize（(LPVOID)ImgRes）;  len即为ImgRes的字节长度。

引用 3 楼 TitBlack 的回复：@user-2 我知道fopen第一个参数是文件名，可是我不能这样操作。因为是不知道文件路径地址的，只能在LPBYTE ImgRes;  这里获取。那你fopen之后返回什么？每一步的值都要看呀

那么ImgRes等于多少呢？

fopen第一个参数是文件路径啊。比如a.jpg 当前运行目录下。


Question: c语言链表问题，求大神解答！！！

这个头像似曾相识

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

引用 5 楼 自信男孩 的回复:#include <stdio.h> #include <stdlib.h>  typedef struct T_Node{     int d;     struct T_Node *next; } Node, *List;  void createlink(List *pla, List *plb) {     int i;     Node *p, *q;      *pla = (Node *)malloc(sizeof(Node));     //创建头结点     q = *pla;      for(i = 1; i <=10;i++)     {         p = (Node *)malloc(sizeof(Node));         p->d = i*2;         q->next = p;         q = p;     }     p->next = NULL;       *plb = (Node *)malloc(sizeof(Node));     //创建头结点     q = *plb;      for(i = 1; i <= 8;i++)     {         p = (Node *)malloc(sizeof(Node));         p->d = i+6;         q->next = p;         q = p;     }     p->next = NULL; }  //int  Intersection (List La, List Lb) void  Intersection (List La, List Lb) { #if 0     Node *p, *q, *r;     int i, j;     p = La->next;     q = Lb->next;     r = La;     for (i = 0; i < 8; i++) {         for (j = 0; j < 8; j++) {             if (p->d != q->d) {                 Node *t;                 t = p;                 r->next = t->next;                 free(t);             }             q = q->next;         }         p = p->next;         r = r->next;     }     return 0; #endif      Node *p, *q, *r, *s;      p = La->next;     q = Lb->next;     r = La;     while (p && q) {         if (p->d == q->d) {             p = p->next;             q = q->next;             r = r->next;         } else if (p->d > q->d){             q = q->next;         } else {             r->next = p->next;             s = p;             p = p->next;             free(s);         }     }     r->next = NULL;     while (p) {         s = p;         //printf("%d\n", p->d);         p = p->next;         free(s);     } //}; }  void show_list(List phead) {     if (!phead)         return;      List p = phead->next;      while (p) {         printf("%d\t", p->d);         p = p->next;     }     putchar(10); }  //void main() int main() {     //int i;     List la, lb;     //Node *p;     createlink(&la, &lb);     printf("Show list a: \n");     show_list(la);     printf("Show list b: \n");     show_list(lb);     Intersection (la, lb);     printf("Show list a: \n");     show_list(la);     /*     p = la->next;     while(p!=NULL)     {         printf("%4d",p->d);         p = p->next;     }     */     printf("\n"); }  供参考～ 引用 5 楼 自信男孩 的回复:#include <stdio.h> #include <stdlib.h>  typedef struct T_Node{     int d;     struct T_Node *next; } Node, *List;  void createlink(List *pla, List *plb) {     int i;     Node *p, *q;      *pla = (Node *)malloc(sizeof(Node));     //创建头结点     q = *pla;      for(i = 1; i <=10;i++)     {         p = (Node *)malloc(sizeof(Node));         p->d = i*2;         q->next = p;         q = p;     }     p->next = NULL;       *plb = (Node *)malloc(sizeof(Node));     //创建头结点     q = *plb;      for(i = 1; i <= 8;i++)     {         p = (Node *)malloc(sizeof(Node));         p->d = i+6;         q->next = p;         q = p;     }     p->next = NULL; }  //int  Intersection (List La, List Lb) void  Intersection (List La, List Lb) { #if 0     Node *p, *q, *r;     int i, j;     p = La->next;     q = Lb->next;     r = La;     for (i = 0; i < 8; i++) {         for (j = 0; j < 8; j++) {             if (p->d != q->d) {                 Node *t;                 t = p;                 r->next = t->next;                 free(t);             }             q = q->next;         }         p = p->next;         r = r->next;     }     return 0; #endif      Node *p, *q, *r, *s;      p = La->next;     q = Lb->next;     r = La;     while (p && q) {         if (p->d == q->d) {             p = p->next;             q = q->next;             r = r->next;         } else if (p->d > q->d){             q = q->next;         } else {             r->next = p->next;             s = p;             p = p->next;             free(s);         }     }     r->next = NULL;     while (p) {         s = p;         //printf("%d\n", p->d);         p = p->next;         free(s);     } //}; }  void show_list(List phead) {     if (!phead)         return;      List p = phead->next;      while (p) {         printf("%d\t", p->d);         p = p->next;     }     putchar(10); }  //void main() int main() {     //int i;     List la, lb;     //Node *p;     createlink(&la, &lb);     printf("Show list a: \n");     show_list(la);     printf("Show list b: \n");     show_list(lb);     Intersection (la, lb);     printf("Show list a: \n");     show_list(la);     /*     p = la->next;     while(p!=NULL)     {         printf("%4d",p->d);         p = p->next;     }     */     printf("\n"); }  供参考～ 谢谢大神，看了你的代码我找到错误的原因了！！！感谢！！

我一般没这么用，，，找半天原因。  把createlink里面的pla和plb前面的*全部去掉

引用 2 楼 user-4 的回复:感觉创建链表有点问题。整体贴一下代码吧。 这是全部的代码，求大神解答！！ #include <stdio.h> #include <stdlib.h>  typedef struct T_Node{     int d;     struct T_Node *next; } Node, *List;  void createlink(List *pla, List *plb) {     int i;     Node *p;      *pla = (Node *)malloc(sizeof(Node));     //创建头结点     p = *pla;      for(i = 1; i <=10;i++)     {         p->next = (Node *)malloc(sizeof(Node));         p = p->next;         p->d = i*2;         p->next = NULL;     }       *plb = (Node *)malloc(sizeof(Node));     //创建头结点     p = *plb;      for(i = 1; i <= 8;i++)     {         p->next = (Node *)malloc(sizeof(Node));         p = p->next;         p->d = i+6;         p->next = NULL;     } }  int  Intersection (List La, List Lb){     Node *p, *q, *r;     int i, j;     p = La->next;     q = Lb->next;     r = La;     for (i = 0; i < 8; i++) {         for (j = 0; j < 8; j++) {             if (p->d != q->d) {                 Node *t;                 t = p;                 r->next = t->next;                 free(t);             }             q = q->next;         }         p = p->next;         r = r->next;     }     return 0; };  void main() {     int i;     List la, lb;     Node *p;     createlink(&la, &lb);     Intersection (la, lb);     p = la->next;     while(p!=NULL)     {         printf("%4d",p->d);         p = p->next;     }     printf("\n"); }

感觉创建链表有点问题。整体贴一下代码吧。

main函数自己写的吗？不是的话格式化一下再贴上来。


Question: 求解输出倒数第M个元素问题

原问题英文版本可参考https://codereview.stackexchange.com/questions/98182/mth-to-last-element

我的代码如下，求大佬们看看问题，目测问题出在了读取原字符数组上。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {   const size_t maxLineLen = 1024;   char line [maxLineLen];   while(fgets(line, maxLineLen, stdin) != NULL) {     printf("%s", line);      }   int b[1024];   char *p = NULL;   char *q =NULL; p = strtok(line, " ");    q = strtok(line, " "); q = strtok(NULL, " ");  int i = 0;    while(p) { b[i++] = atoi(p); p = strtok(NULL, " "); }        if (i-1>b[i-1])   printf("%s\n", q[i-1-b[i-1]]);   }


Question: 关于初级c语言我遇到的一个很不解的状况

你这个排版呀。 这个代码没什么问题，那个1是前面的输入影响，因为是多次输入不好控制

引用 2 楼 自信男孩的回复:建议贴更多的代码，应该是上面的输入进入到导致case1 里，scanf("%c", &c);了。 你好，下面是我完整的代码。谢谢你！

引用 1 楼 user-2的回复:不至于的，你给完整无缺代码，可能是别的地方代码有问题 你好，下面附上了我的完整代码。谢谢你

#include<stdio.h>#include<stdlib.h>void insert(int s[],int i,int k,int c);void deleted(int s[],int k,int n);void traversing(int s[],int k);void getelem(int s[],int n);void location(int s[],int k,int n);int main(){    int k,o,count=0;    printf("Please input the initial data number = ");  //输入初始数据个数    scanf("%d",&k);    int a[k+1];    int i,n,x;    printf("please input the operating data number = ");//输入进行操作的数据的次序    scanf("%d",&n);    printf("order:\n1 insert\n2 deleted\n3 traversing\n4 getelem\n5 location");//菜单    printf("\nplease input you choose = ");             //菜单选项    scanf("%d",&o);    printf("please input the array A %d data = ",k-1);  //初始化数组，输入数组各个元素    for(i=0;i<k-1;i++)        {        scanf("%d ",&a[i]);        count++;        }        int c;    switch(o)                                           //选择函数的分支 {        case 1 :printf("please input insert data :\n");scanf("%d",&c);insert(a,k,n,c);break;        case 2 :deleted(a,k,n);break;                   //上方语句的运行就是我疑惑的部分，在程序框中先输入语句，后输出语句        case 3 :traversing(a,k);break;        case 4 :getelem(a,n);break;        case 5 :location(a,k,n);break;    }}void insert(int s[],int k,int i,int c)                 //插入函数{    int j;    for(j=k;j>=i;j--)    {        s[j]=s[j-1];    }    s[i-1]=c;    traversing(s,k+1);}void deleted(int s[],int k,int n)                       //删除函数{    int j;    for(j=n;j<k;j++)    {        s[j-1]=s[j];    }    traversing(s,k-1);}void traversing(int s[],int k)                          //输出打印函数{    int l;    printf("now data = ");    for(l=0;l<k-1;l++)        printf("%d ",s[l]);}void getelem(int s[],int n)                             //取数函数{    printf("%d",s[n]);}void location(int s[],int k,int n)                      //定位函数{    int i;    for(i=0;i<k;i++)    {        if(n==s[i])        {            printf("the goal data WeiXu is :%d",i);        }    }}

不至于的，你给完整无缺代码，可能是别的地方代码有问题


Question: 急!求解答!哪里出问题了 为什么无法退出?

引用 7 楼 轻箬笠 的回复:很多人发帖用手机，难道觉得看帖子回帖子的人都是用手机的？还是每次看个帖子，需要把电脑屏幕竖起来？ 关键还是是CSDN贴图代码没有接入自动识别图片朝上方向或不根据手机上传照片的Orientation信息自动旋转图片。

你可以把代码都贴出来，起码是以函数为单位的吧。 介意贴代码，而不是图片～ 图片还是斜的，不易查看～

你isExit是如何判断退出的

引用 3 楼 qq_45690504 的回复:[quote=引用 1 楼 user-6的回复:]颈椎专用治疗仪，然而没什么用，代码不全 我后面还加了break的[/quote]只要结果不对，任何地方都有可能错。

引用 1 楼 user-6的回复:颈椎专用治疗仪，然而没什么用，代码不全 我后面还加了break的

引用 1 楼 user-6的回复:颈椎专用治疗仪，然而没什么用，代码不全 你好 可以具体说一下哪里不全??

颈椎专用治疗仪，然而没什么用，代码不全


Question: c语言 if语句输入错误时怎么重新输入

请用while循环 while(1) {     if (输入正确)         break;     // 重新输入         }

贴出你的代码


Question: write函数写入数据到txt文件问题

不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

最上面那张图，txt里面写了11111

原先的txt是什么内容？


Question: 如何得出结构体数组中特定的元素

星号不需要的吧？

for(int i=0;i<9;i++) 	{ 		m=* FileSubM[i].MenuItemStrAddr; 		a.push(m); 		printf("%s\n",a.back()); 	}我这样子写的，但是我运行程序，什么都不显示

for(int i=0; i<9; i++) {       FileSubM[i].xxx; } xxx为MenuItemStru你定义的最后元素的名称


Question: 求助

引用 2 楼 自信男孩的回复:只会执行第一次时会变成0，后面对其赋值后（赋值非0值），就不会再变成0，除非再次赋值0. 从你的程序里可以发现，当k <= 0时，又对其赋值0了。查一下你的逻辑是否会执行k <= 0就可以了。 谢谢，有时感觉自己眼神有问题，看不到一些东西，活在梦里，

那就是你的K值<=0了呗


Question: C语言顺序表的基本操作，求大神指点

看到一堆乱码，都不想看了，代码格式还是注意下吧

先把代码整理好在贴出来吧

昨天晚上已经改好了

你这代码法看呀

过两天你能看懂你提交的是什么玩意儿么


Question: 顺序表的基本操作，打了半天，改了半天，还是不对，请大神指点

建议先把代码真理好了再问问题吧。这么乱的代码，自己能看懂不


Question: MCI播放音视频属于硬件解码吗？

有些格式有专利的，如果需要使用或支持需要支付专利费的

引用 8 楼 六道佩恩 的回复:[quote=引用 7 楼 gouyanfen 的回复:] 有些格式有专利的，如果需要使用或支持需要支付专利费的 平时用的那些免费软件不是几乎什么格式都支持吗？还有ffmpeg，不是也几乎支持所有格式吗，而且还开源[/quote] 这就看软件的许可协议了，MCI做为一种接口规范，他并不需要支持所有格式，他只需要规范化一种格式，成为一个标准就行了，MS为什么强大就是在为他的各种规范己经形成了一个行业标准，你不支持他就难以推广，所以很难撼动他的地位，并不代表他的规范就是最好的

引用 7 楼 gouyanfen 的回复:有些格式有专利的，如果需要使用或支持需要支付专利费的 平时用的那些免费软件不是几乎什么格式都支持吗？还有ffmpeg，不是也几乎支持所有格式吗，而且还开源

引用 5 楼 gouyanfen 的回复:[quote=引用 4 楼 六道佩恩 的回复:] [quote=引用 3 楼 user-2 的回复:] 应该不是硬解码  mci是Media Control Interface的缩写，它只是一个媒体控制的接口标准，自己不能播放任何东西，它仅仅是完成控制，按需调用相应的驱动服务来完成。比如一般不支持mpeg4，但它支持COM技术，这样如果加入了相应的解码器就可以了支持mpeg4了 驱动不算硬解吗？我理解的软解应该是加载的dll文件之类的，那么驱动不应该算硬解吗？[/quote] 驱动也有可能是软解码，要看驱动的实现，比如驱动只是返回了硬件的某个调用指令就完成了解码那就是硬解码，反之就是软解码[/quote] 你是说，解码的最终是硬件才是硬解码，其余的都是软解码？所以mci的原理软硬解都有可能？既然有软解的话，那为啥支持的格式还那么有限？没道理呀。。。

引用 4 楼 六道佩恩 的回复:[quote=引用 3 楼 user-2 的回复:] 应该不是硬解码  mci是Media Control Interface的缩写，它只是一个媒体控制的接口标准，自己不能播放任何东西，它仅仅是完成控制，按需调用相应的驱动服务来完成。比如一般不支持mpeg4，但它支持COM技术，这样如果加入了相应的解码器就可以了支持mpeg4了 驱动不算硬解吗？我理解的软解应该是加载的dll文件之类的，那么驱动不应该算硬解吗？[/quote] 驱动也有可能是软解码，要看驱动的实现，比如驱动只是返回了硬件的某个调用指令就完成了解码那就是硬解码，反之就是软解码

引用 3 楼 user-2 的回复:应该不是硬解码  mci是Media Control Interface的缩写，它只是一个媒体控制的接口标准，自己不能播放任何东西，它仅仅是完成控制，按需调用相应的驱动服务来完成。比如一般不支持mpeg4，但它支持COM技术，这样如果加入了相应的解码器就可以了支持mpeg4了 驱动不算硬解吗？我理解的软解应该是加载的dll文件之类的，那么驱动不应该算硬解吗？

引用 1 楼 user-2 的回复:源码在windows_nt_4_source_code\private\mvdm\wow16\mmsystem\mci.c  DWORD WINAPI mciSendString(     LPCSTR lpstrCommand,     LPSTR lpstrReturnString,     UINT wReturnLength,     HWND hwndCallback     ) {     DWORD   dwErr32;     DWORD   dwErr16 = MMSYSERR_NOERROR;     LPSTR   lpstr;     BOOL    fHaveAll = FALSE;      // Initialize the 16-bit device list     if (!MCI_bDeviceListInitialized && !mciInitDeviceList()) {         return MCIERR_OUT_OF_MEMORY;     }      dwErr32 = mciMessage( THUNK_MCI_SENDSTRING, (DWORD)lpstrCommand,                           (DWORD)lpstrReturnString, (DWORD)wReturnLength,                           (DWORD)hwndCallback );      /*     ** Even if the string was processed correctly by the 32 bit side     ** we might still have to pass it through to the 16 bit side if it     ** contains the string " all\0" or " all ".     */     lpstr = _fstrstr( lpstrCommand, " all" );     if ( lpstr ) {          lpstr += 4;          if ( *lpstr == ' ' || *lpstr == '\0' ) {             fHaveAll = TRUE;         }     }       /*     ** If we have the all device or an error from the 32 bit side     ** we have to try the 16 bit side.     */      if ( !fHaveAll && dwErr32 == MMSYSERR_NOERROR ) {         return dwErr32;     }     else {          dwErr16 = mciSendStringInternal( lpstrCommand, lpstrReturnString,                                          wReturnLength, hwndCallback, NULL );     }       /*     ** Special processing of the return code is required if the     ** MCI_ALL_DEVICE_ID was specified.     */     if ( fHaveAll ) {         if ( (dwErr16 != MMSYSERR_NOERROR)           && (dwErr32 != MMSYSERR_NOERROR) ) {              return dwErr32;         }         else {             return MMSYSERR_NOERROR;         }     }      if ( dwErr32 != MCIERR_INVALID_DEVICE_NAME       && dwErr16 != MMSYSERR_NOERROR ) {           return dwErr32;     }      return dwErr16; }  我只是想知道这个属不属于硬解码。。。


Question: 我是c语言初学者，问个问题

引用 7 楼 INCREIBLE_TIGER的回复:[quote=引用 5 楼 Corey_Xiao的回复:]按照楼上的修改以后，头文件加一个#include<stdlib.h>，然后在return 0之前加一个system("pause"); system(”pause”)有什么用，我没加这个也可以运行[/quote] 我是用VS2017，习惯了，用pause看结果

引用 5 楼 Corey_Xiao的回复:按照楼上的修改以后，头文件加一个#include<stdlib.h>，然后在return 0之前加一个system("pause"); system(”pause”)有什么用，我没加这个也可以运行

必须是在%d之后的呀

你那个scanf的参数，引号都括到后头去了呀

明白了，谢谢老铁，晚上试试

printf("%d,c"); 改成 printf("%d",c);

scanf("%d，%d,&a,&b"); 改成 scanf("%d，%d",&a,&b);


Question: c语言

引用 9 楼 liups的回复:[quote=引用 6 楼 jsc123456wuy 的回复:] [quote=引用 5 楼 liups的回复:]主要是题目不明确。  如果是直接把0或0.0这种直接赋值的，==没有问题。但是如果是三个float或double型的变量a、b、c: c=a-b; if (c==0) 这样的写法就有问题了  面试人出题有二义性 我还是不太懂，为什么if(c==0)就不对呢？[/quote] 判断是否相等和是否为0，因为浮点数不是精确的，所以正确的方法是2、3楼的办法，不能简单地使用数学方法来判断[/quote] 嗯嗯，谢谢，先记着，以后用多了就知道了

引用 7 楼 六道佩恩的回复:你放心，直接判断==0 double变量表示0是0x00 00 00 00   00 00 00 00 ，就是0 很多之所以用误差法表示，是因为默认使用的这种浮点型结构不一定能精确表示，注意，是不一定 只要是整型，只要不太大超范围，是完全可以准确表示的，比如1、2、3、4、5......999...... ，而小数有些能精确表示，比如1.5、1.25、0.125、1.625，忽略整数部分，这种小数部分只要是(1/（2^n）)*m的形式，那就能精确表示，但像1.1这种，就不能精确表示，这个时候可以用误差法锁定一个范围 嗯，知道了，谢谢咯

引用 6 楼 jsc123456wuy 的回复:[quote=引用 5 楼 liups的回复:]主要是题目不明确。  如果是直接把0或0.0这种直接赋值的，==没有问题。但是如果是三个float或double型的变量a、b、c: c=a-b; if (c==0) 这样的写法就有问题了  面试人出题有二义性 我还是不太懂，为什么if(c==0)就不对呢？[/quote] 判断是否相等和是否为0，因为浮点数不是精确的，所以正确的方法是2、3楼的办法，不能简单地使用数学方法来判断

你说的面试首先是不是C语言，其次你要能确定题目，别是你记错了，如果这些都确定没问题的话，我觉得是考官自己的问题

0没有误差，可以直接跟0.0比较

引用 5 楼 liups的回复:主要是题目不明确。  如果是直接把0或0.0这种直接赋值的，==没有问题。但是如果是三个float或double型的变量a、b、c: c=a-b; if (c==0) 这样的写法就有问题了  面试人出题有二义性 我还是不太懂，为什么if(c==0)就不对呢？

引用 楼主 jsc123456wuy的回复:如何判断一个double类型的变量为0？？ 我一个同学就被面试了这题，好像是不能跟0.0直接==

引用 2 楼 自信男孩的回复:double df;  if (fabs(df) < 1e-15)     printf("df is zero!\n"); 供参考～ 嗯，知道了，谢谢


Question: 求哪位大神帮忙做下

估计老师刚开始讲概念。哈哈，想想当年，自己第一次编程，求圆面积和周长的c代码，用了差不多两小时。

引用 3 楼 自信男孩的回复:这是什么问题？我都怀疑这是不是问题，就这么简单吗～？！ 大佬，我刚学c没几天

这是什么问题？我都怀疑这是不是问题，就这么简单吗～？！

不知道你说的是用C还是C++编，我用C编了一个 #include<stdio.h>  int main(void) { 	int a, b,sum;  	printf("Enter two numbers: "); 	scanf("%d %d", &a, &b); 	sum = a + b;  	printf("%d\n",  sum);  	return 0; }

#define _CRT_SECURE_NO_WARNINGS #include "iostream"  using namespace std;  int main() { 	int a, b,count; 	cin >> a >> b; 	count = a + b;  	cout<<count<<endl; 	system("pause");	 	return 0; }


Question: 那里错了？

谢谢了。。。。。。。

请问DEV-C++怎么安装

目测没有问题，要说的可能是sleep，这是linux里的函数，Windows上一般用windows.h中的Sleep。 然后，建议你换个IDE，用DEV-C++吧

引入是什么？。。。。

要重新发一张吗？。。。。

你正好没有把编译失败的原因贴出来，关键的信息没有出来。 从你的代码里可以推断可能sleep函数没有生命吧，应该引入<unistd.h>

换什么好？。。。。。。。

简单的，装一个vs2008，或者2010……这些版本都可以

啊            我不会啊

换编译器（凑字数）

有人吗？。。。。。。。。

引用 10 楼 weixin_45677282 的回复:我这才刚学啊.....就卡在这里了！我要怎么办照着课本敲例子。

我这才刚学啊.....就卡在这里了！我要怎么办

引用 8 楼 weixin_45677282 的回复:引入是什么？。。。。  头文件


Question: C语言小白，大佬求解。

数据溢出是一个问题。int类型数据表示的数据范围，即2^31-1。 我觉得楼主的代码不严谨也是一个大问题。既然你这个程序是找零的。怎么可以第二个数小于第一个数呢，程序里面不应该判断下a<price，让用户重新输入吗？

数据溢出了，建议查一下int类型数据表示的数据范围，即2^31-1。 如果用一个小的值就会得出你想要的结果，这个小的值是指小于int表示范围的

数据溢出了，整型保存不了那么大的数据，


Question: 初学c语言 不太明白这个题目中的均值为什么一直算不对

引用 1 楼 ~稻草人~ 的回复：18行 ave=((float)(a+b....))/10； 不同的数据类型，在进行运算时，会自动转换类型。但最好还是人工强制转换，能避免很多暗雷。 在大公司中敲代码，不管用不用转换，反正运算时都自觉多敲几个关键字，全人工强制转换，因为经手的人多了，鬼知道某个变量在上下文中被别的同事怎处理。谢谢


Question: C语言用if语句，else那出现“应输入一个语句”

楼上正解，良好的编程习惯有助于少出错误

if后面如果不加大括号，那么if后面的第一条语句属于if的，多余的一条语句就是其他的了，就会导致后面else不知道和那个if匹配了。  因此建议在if后面的多条语句用大括号括起来，这样后面的else才能找到和其配对的。

if和else之间如果有多条语句应该将这些语句使用{包裹}，else后面的多条语句应该使用{}名裹，如果没有语句则不使用else

引用 2 楼 user-4的回复:if () { } else { } 啊谢谢谢谢谢谢谢谢谢谢谢谢

if () { } else { }

if () { } else  { }


Question: C语言用if语句，else那出现“应输入一个语句”

这个if-else语句就是“如果。。。。否则”，你说完“如果xxx ,  就xxx”，这没问题，也就是只用一个if，但如果你说“如果xxx，就xxx，否则，”，然后你就没话说，这肯定不行啊，这里的否则就是你的else，你首先要看是不是需要这个“否则”，需要你就写上else，不需要就不写，如果需要，写上else，然后呢，“否则”你要怎样呢，就像说话一样， 你得用代码描述出来

可能网速慢发重了，抱歉

printf直接用变量名就行不用&，还有如果要用else（格式如果是个块的话）： if（条件）{   语句      }    else   //要让else有对应的if，也就是说他两之间                语句                   只能有一条语句，否则报错

printf直接用变量名就行不用&，还有如果要用else（格式如果是个块的话）： if（条件）{   语句      }    else   //要让else有对应的if，也就是说他两之间只                 语句                   能有一条语句


Question: 求大佬看看

额额，我懂了，两个数组

不懂，定义数组不一般都像age【5】这样吗

跟你的ID意思差不多


Question: 求大佬们帮忙做下，如何读取字符数组并转换成整数数组

引用 5 楼 gouyanfen 的回复:[quote=引用 4 楼 轻箬笠 的回复:]   while(p)//原来的这里写错了 { b[i++] = atoi(p); p = strtok(NULL, " "); }   char *delim = ", ";   strtok_s(temp_str,delim,&p); 分割符字符串不是可以一次定义多个的吗，不用改吧，不管逗号空格一次都定义在分割串里就行了。 建议用strtok_s[/quote] 我把这题当成两个题目，所以要改下。如果你当成一个的话，也没关系

引用 4 楼 轻箬笠 的回复:  while(p)//原来的这里写错了 { b[i++] = atoi(p); p = strtok(NULL, " "); }   char *delim = ", ";   strtok_s(temp_str,delim,&p); 分割符字符串不是可以一次定义多个的吗，不用改吧，不管逗号空格一次都定义在分割串里就行了。 建议用strtok_s

如果是逗号的话，改成 p = strtok(a, ","); p = strtok(NULL, "");

用strtok char a[] = "1 2 3 4"; int b[1024] = {0}; char *p = NULL; p = strtok(a, " "); int i = 0; while(!p) { b[i++] = atoi(p); p = strtok(NULL, " "); } for (int j = 0; j < i; j++) printf("%d\n", b[j]);

题还是自己做,这里给些提示 1.字符数组是以'\0'结束的,判断'\0'可以获取字符数 2.字符转整数减去'0'这个字符就可以了,具体自行百度ascii码 3.跳过','号的计算就是了,判断','号方法步骤2中的值大于9


Question: 单链表创头节点

引用 4 楼 weixin_45311188的回复:[quote=引用 3 楼 飞奔的小强sky的回复:]一个节点的next保存的是下一个节点的地址呀。 指向空，就说明后边没有呗 还是没懂第一步代表的是创建了一个头节点 第二步 head的next不是相当于头节点嘛？ 第三步 p不相当于就是head了嘛？[/quote] 你不要死心眼，管他头节点尾节点，你只要知道哪个指针指向了哪个节点，就行了。

引用 3 楼 飞奔的小强sky的回复:一个节点的next保存的是下一个节点的地址呀。 指向空，就说明后边没有呗 还是没懂第一步代表的是创建了一个头节点 第二步 head的next不是相当于头节点嘛？ 第三步 p不相当于就是head了嘛？

一个节点的next保存的是下一个节点的地址呀。 指向空，就说明后边没有呗

引用 1 楼 飞奔的小强sky的回复:你圈出来的是创建头节点，p指向的不该说是头节点，应该说尾节点，因为现在是空的，所以p指向head 首先蟹蟹你！对，现在就只有这个头结点，其他都没有，我想问一下p=head代表的是p指向head吗？head-＞next代表的是什么？


Question: 谁可以为我解答一下c语言运算级...

括号优先级最高，取余%、乘法*和除法/是同一优先级的，加法+和减法-优先级最低。 所以 3应该是 5*4%3*2从左向右计算，结果为4 4应该是 5*6%7/8=16

百度运算符优先级，自己查


Question: C语言调用C++利用外部API写的一个函数，如何做

引用 7 楼 Henley_Liang 的回复：[quote=引用 6 楼 SuperDay 的回复:] [quote=引用 5 楼 Henley_Liang 的回复：][quote=引用 3 楼 SuperDay 的回复:] 楼主所说的这个外部API是什么意思呢？ 一个官方的API,用C++写的[/quote]那就是动态连接库吧？可以查看函数列表吧？[/quote]  官方没有封装成dll,是一个C++的类,有头文件,源文件.我自己基于这个写了一个类,然后再用我自己的类,写了一个函数 [/quote]可以自己导出dll，这样调用的时候就不会有前缀了

引用 6 楼 SuperDay 的回复:[quote=引用 5 楼 Henley_Liang 的回复：][quote=引用 3 楼 SuperDay 的回复:] 楼主所说的这个外部API是什么意思呢？ 一个官方的API,用C++写的[/quote]那就是动态连接库吧？可以查看函数列表吧？[/quote]  官方没有封装成dll,是一个C++的类,有头文件,源文件.我自己基于这个写了一个类,然后再用我自己的类,写了一个函数

引用 5 楼 Henley_Liang 的回复：[quote=引用 3 楼 SuperDay 的回复:] 楼主所说的这个外部API是什么意思呢？ 一个官方的API,用C++写的[/quote]那就是动态连接库吧？可以查看函数列表吧？

引用 3 楼 SuperDay 的回复:楼主所说的这个外部API是什么意思呢？ 一个官方的API,用C++写的

调用约定 _stdcall

楼主所说的这个外部API是什么意思呢？

是不是需要在每个导出函数前面放一个__stdcall？

如果C的代码调用C++的接口，建议用C++编译器去编译～


Question: 20! 用%d算出来是怎样都是负数 用f就是整数 为什么?

仅供参考：#include <iostream> #include <string> #include <algorithm> using namespace std; inline int COMPARE(string str1,string str2) {//相等返回0，大于返回1，小于返回-1          if (str1.size()>str2.size()) return 1; //长度长的整数大于长度小的整数     else if (str1.size()<str2.size()) return -1;     else                              return str1.compare(str2); //若长度相等，则头到尾按位比较 } string PLUS(string number1,string number2) {     int i;     int length1 = number1.size();     int length2 = number2.size();      string result="";      reverse(number1.begin(), number1.end());     reverse(number2.begin(), number2.end());      for(i = 0; i < length1 && i < length2; i++) {         char c = (char)(number1[i] + number2[i] - 48);         result = result + c;     }      while(i < length1) {         result = result + number1[i];         ++i;     }      while(i < length2) {         result = result + number2[i];         ++i;     }      int carry = 0;     for(i = 0; i < (int)result.size(); ++i) {         int value = result[i] - 48 + carry;         result[i] = (char)(value % 10 + 48);         carry = value / 10;     }      if(carry !=0 ) {         result = result + (char)(carry + 48);     }      for(i = result.size() - 1; i >= 0; i--) {         if(result[i] != '0') break;     }      result = result.substr(0, i + 1);      reverse(result.begin(), result.end());     if(result.length() == 0) result = "0";     return result; } string MULTIPLY(string number1, string number2) {     int i, j;     int *iresult;     int length1 = number1.size();     int length2 = number2.size();     string result = "";      reverse(number1.begin(), number1.end());     reverse(number2.begin(), number2.end());      iresult = (int*)malloc(sizeof(int) * (length1 + length2 + 1));     memset(iresult, 0, sizeof(int) * (length1 + length2 + 1));      for(i = 0; i < length1; i++) {         for(j = 0; j < length2; j++) {             iresult[i+j] += ((number1[i] - 48) * (number2[j] - 48));         }     }      int carry = 0;     for(i = 0; i < length1 + length2; i++) {         int value = iresult[i] + carry;         iresult[i] = value % 10;         carry = value / 10;     }      for(i = length1 + length2 - 1; i >= 0; i--) {         if(iresult[i] != 0)break;     }      for(; i >= 0; i--) {         result = result + (char)(iresult[i]+48);     }      free(iresult);      if(result == "") result = "0";     return result; } string factorial(string n) {     string temp = "1";     string i;     for(i = "1"; COMPARE(i, n) <= 0; i = PLUS(i, "1")) {         temp = MULTIPLY(temp, i);     }     return temp; } int main(void) {     cout << factorial("100") << endl;     return 0; } //93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 //

问题的解决方案，楼上的大神都提到了。我建议，楼主把每次计算的结果打印下看看 for (int i = 1; i < 20; i++) { k*=i; printf("k=%lld ", k); j+=k; printf("j=%lld\n", j); }

引用 5 楼 qq_45690504 的回复:[quote=引用 1 楼 自信男孩的回复:]溢出了，建议用unsigned long long保存20!的结果  #include<stdio.h>  int main() {     int i;     unsigned long long  sum = 1;      for (i = 1; i < 20; i++)         sum *= i;      printf("%llu\n", sum);      return 0; } 供参考～ 你好! unsigned long long什么意思?[/quote]  如果学习过基本的C语言，应该知道这个unsigned long long，他也是表示整型，只不过表示范围比int要打一倍。 可以从网上了解一下～

int型数据计算不了20的阶乘，溢出了，看看十进制与二进制的转换和补码的章节内容

楼主，数据类型，自动转换和强制转换，三个知识点百度一下，还有字符串处理，这几个基础点比指针更重要。一起加油

引用 5 楼 qq_45690504 的回复:[quote=引用 1 楼 自信男孩的回复:]溢出了，建议用unsigned long long保存20!的结果  #include<stdio.h>  int main() {     int i;     unsigned long long  sum = 1;      for (i = 1; i < 20; i++)         sum *= i;      printf("%llu\n", sum);      return 0; } 供参考～ 你好! unsigned long long什么意思?[/quote]  64位长整型

引用 1 楼 自信男孩的回复:溢出了，建议用unsigned long long保存20!的结果  #include<stdio.h>  int main() {     int i;     unsigned long long  sum = 1;      for (i = 1; i < 20; i++)         sum *= i;      printf("%llu\n", sum);      return 0; } 供参考～ 你好! unsigned long long什么意思?

应该是溢出了

这样肯定是不可以的呀

浮点数可以的原因建议查一下浮点数的表示范围～


Question: C语言--求助

#include<stdio.h>  int main() {     int l_,r_;     printf("please input l and r data:\n");     scanf("%d%d", &l_,&r_);      int i,t,mod;     int mod_cnt =  r_ - l_ + 1;     for(i = l_;i<=r_;i++ )     {         t = i;         while(t != 0 )         {             mod = t % 10;             if(mod != 0 && i % mod != 0)  //保证mod不为0，否则会导致i % 0；             {                 mod_cnt-=1;                 break;             }             t =t /10;         }     }     printf("输出:");     printf("\t %d\n",mod_cnt);      return 0; } 供参考～


Question: 请问大大们C能编写哪些类型的小游戏

《Visual C++ 游戏开发经典案例详解》

**ncurses** https://invisible-island.net/ncurses/ https://c-for-dummies.com/ncurses/source_code/index.php  **pdcurses** https://pdcurses.org/  两个库应该是兼容的

啥类型都能写 RPG类的控制台DEMO也可以 游戏重点还是创意  技术点不是太复杂的 时间够都能写

推箱子，我做过

小游戏 1024

一个月时间，只能搞个简单的，我记得我以前读书时候，搞了24程序

引用 6 楼 liups 的回复：[quote=引用 3 楼 weixin_45693609 的回复:] [quote=引用 1 楼 liups 的回复:] 贪吃蛇、俄罗斯方块等可以用字符表示的界面，不要去搞真正的图形界面。（那种简易的图形库还是算了吧）  另外，组员那些是浮云，还是自己搞吧  老师是让我们必须分组 主要目的是团队合作吧可能 其实现在最困扰我的是这种小游戏怎么分工做。。。[/quote] 关键得靠自己，其他人让他们混下就好[/quote]嗯嗯嗯 全靠自己 谢谢大大～

引用 3 楼 weixin_45693609 的回复:[quote=引用 1 楼 liups 的回复:] 贪吃蛇、俄罗斯方块等可以用字符表示的界面，不要去搞真正的图形界面。（那种简易的图形库还是算了吧）  另外，组员那些是浮云，还是自己搞吧  老师是让我们必须分组 主要目的是团队合作吧可能 其实现在最困扰我的是这种小游戏怎么分工做。。。[/quote] 关键得靠自己，其他人让他们混下就好

还有就是猜字游戏～

剪子包袱锤～

引用 1 楼 liups 的回复:贪吃蛇、俄罗斯方块等可以用字符表示的界面，不要去搞真正的图形界面。（那种简易的图形库还是算了吧）  另外，组员那些是浮云，还是自己搞吧  老师是让我们必须分组 主要目的是团队合作吧可能 其实现在最困扰我的是这种小游戏怎么分工做。。。

扫雷吧。网上都有源码 C语言实现扫雷——详解


Question: 小白求教

引用 11 楼 qq_39932153的回复:可以这么理解，但是在你写的程序里右边才是可以修改的左值，无定义，他就随机选取数字，可能也是算法的问题之后便一次与另一次不同。还有就是养成好习惯还是写return 0； 感谢你的回复，让我明白了他的原因

引用 13 楼 自信男孩的回复:[quote=引用 6 楼 weixin_44930231 的回复:] [quote=引用 3 楼 自信男孩的回复:]if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～ 用了双等号比较运算符，运行之后确实什么都不显示了，但为什么用单等号之后其可以执行并得到一个值呢？虽然这个值一直在变。 也是因为他是一个随机值？ 随着我的类型改变他的值也在变，不仅仅是运行一次就变一次。而且都是有值，不是什么都不显示[/quote] 首先，你的celsius没有初始化呢，这个值随机的。 其次，如果不用双等号，那么等于celsius被赋值为32759，再根据真假规则：0是假，非0是为真。因此会执行后面的运算。 如果用双等号，那么这个celsius要与32759，如果值不等于32759，就不会执行if的语句块。[/quote] 谢谢你的回复，让我明白了这个问题。 感谢

引用 6 楼 weixin_44930231 的回复:[quote=引用 3 楼 自信男孩的回复:]if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～ 用了双等号比较运算符，运行之后确实什么都不显示了，但为什么用单等号之后其可以执行并得到一个值呢？虽然这个值一直在变。 也是因为他是一个随机值？ 随着我的类型改变他的值也在变，不仅仅是运行一次就变一次。而且都是有值，不是什么都不显示[/quote] 首先，你的celsius没有初始化呢，这个值随机的。 其次，如果不用双等号，那么等于celsius被赋值为32759，再根据真假规则：0是假，非0是为真。因此会执行后面的运算。 如果用双等号，那么这个celsius要与32759，如果值不等于32759，就不会执行if的语句块。

只要输入的是数字不为0就是为真，然后随机选一个数字。我是这样理解的

引用 7 楼 qq_39932153的回复:这个也就可以相当于if（（celsius=32759）！= 0）。 也就是说if的条件判断式只判断0与1，而这里直接赋值32759，为真,然后执行语句块，但因为fahrenheit没有赋值，依据编译器规则有的报错，有的赋随机值，而赋值语句执行时从右至左，先计算了左边再赋值于右边，so我看到他的值在变，

引用 3 楼 自信男孩的回复:if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～ 也就是说if的条件判断式只判断0与1，而这里直接赋值32759，为真,然后执行语句块，但因为fahrenheit没有赋值，依据编译器规则有的报错，有的赋随机值，而赋值语句执行时从右至左，先计算了左边再赋值于右边，so我看到他的值在变.  我这样理解是否正确呢

赋初值就行了

这个也就可以相当于if（（celsius=32759）！= 0）。

给fahrenheit赋个初值试一下

引用 3 楼 自信男孩的回复:if(celsius=32759)    //=改成== 另外，celsius没有赋值，没有初始化，是一个随机值。因此有可能一次也不执行～ 用了双等号比较运算符，运行之后确实什么都不显示了，但为什么用单等号之后其可以执行并得到一个值呢？虽然这个值一直在变。 也是因为他是一个随机值？ 随着我的类型改变他的值也在变，不仅仅是运行一次就变一次。而且都是有值，不是什么都不显示

引用 2 楼 阿大古 古古古的回复:1、数字的操作，类型怎么是char 2、if语句的判断用 == 还有就是问下这个程序是想干什么的？ 书上写的温度转换程序，然后我自己给他修改各个语句，我还用过int double，删减增加各种语句，玩的挺开心😄到这就晕了😖。 用了双等号比较运算符，运行之后什么都不显示了，但为什么用单等号之后其可以执行并得到一个值呢？虽然这个值一直在变。 而且if的条件判断式只要是一个判断式就可以，哪怕这个判断式与整个程序无关。

给Fahrenheit赋值之后结果稳定了，不在变化.


Question: 杭电1001问题

scanf("%d",&n)！=EOF; 这个表达式看着是一个判断语句，但是又没放在if/while/for等等里面，没啥意义。 最终还是跟EOF没关系

引用 1 楼 自信男孩的回复:楼主的代码没看出有跟EOF有关系的地方～ #include<stdio.h>  int main() {   int sum=0;   int i=1;   int n;  scanf("%d",&n)！=EOF;  while(i<=n) {   sum=sum+i;   i++; }     printf("%d",sum);     return 0; }

楼主的代码没看出有跟EOF有关系的地方～


Question: linuxc 用单向循环链表实现学生管理系统加上sqlit3要怎么改啊 求回复

秀儿

你这是什么操作？难不成别人帮你解决问题还要这么费劲


Question: 全局变量初始化时，一定要给其初始化为0？，其他值不行么？

最近在学的“程序的组成、存储与运行”内容好像可以回答这个问题。没被初始化为0的全局变量会被存放的RW-data：Read Write data，即可读写数据域，掉电后会被放在ROM中（我学的是MDK的编译过程哈），掉电不消失。而被初始化为0的全局变量，掉电是会消失的

int i=1; char s[10]="hello"; struct _st {  int v;  char t[10]; } st={  1,       //v  "init"  //t }; int main() {} 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

引用 10 楼 lin5161678 的回复:[quote=引用 7 楼 liups 的回复:] 但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0[/quote] 再补充一句，为什么C++(本贴是C)中允许把变量定义放在非开头部分，应该和我11楼说的情况有关

引用 10 楼 lin5161678 的回复:[quote=引用 7 楼 liups 的回复:] 但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0[/quote] 如果有多个变量，那么初始化为有效值的地方和真正使用它的地方可以相隔很远，这种情况下如果按你的做法，逻辑上相关的代码距离很远，个人认为不合适。  所以说我倾向leader的做法：定义时一律初始化为0。后面真正使用时再初始化为有效值。虽然多了一次赋值操作，但是逻辑上更佳。

引用 7 楼 liups 的回复:但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0

没有这样的道理 如果全局变量是个标志位，谁规定标志位初始值一定是0？

全局变量初始化除了0之外，都可以赋值。为什么要抛出0（还有就是NULL）呢， 因为即使编程人员不给全局变量初始化0，系统也会自动给其初始化为0（或NULL）

楼主是把你leader问住了啊！其实公司可以这么规定，但是leader应该只是自己的习惯。 通用的规定应该是必须初始化，但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。  总之，不好说对错。个人倾向leader

如果是团队编程规范 照做就是 哪怕是单纯为了好看 如果是他个人习惯 不听也无所谓 没什么必须初始化为0的要求  C的话 倒是有要求必须用编译期常量初始化 没别的要求了

应该可以随便初始化吧，有时候我们会初始化成1

好像是一种不成文的规定吧。数值型初始化为0，指针型初始为null。初始化后，再重新赋一个有意义的值。主要是怕忘记初始化了。 反正我都是这么干的。

引用 14 楼 lin5161678 的回复:[quote=引用 11 楼 liups 的回复:] [quote=引用 10 楼 lin5161678 的回复:] [quote=引用 7 楼 liups 的回复:] 但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0[/quote] 如果有多个变量，那么初始化为有效值的地方和真正使用它的地方可以相隔很远，这种情况下如果按你的做法，逻辑上相关的代码距离很远，个人认为不合适。  所以说我倾向leader的做法：定义时一律初始化为0。后面真正使用时再初始化为有效值。虽然多了一次赋值操作，但是逻辑上更佳。[/quote]你在函数内部对全局变量进行初始化 那么第二次调用这个函数的时候 你怎么确保这个全局变量不会被重复初始化 ???[/quote] 我觉得是否可以从方便管理的角度去理解。如果每个文件里面都有全局变量，对他们进行赋值的时候，进行统一管理。 C++的暂时没碰到。C语言的开源项目，很多情况下，每个.c文件都有全局变量。对于开发者来说，可能比较方便，但是阅读代码是蛮麻烦的，要反复的去找。如果统一管理，我觉得会带来阅读上的便利。

引用 11 楼 liups 的回复:[quote=引用 10 楼 lin5161678 的回复:] [quote=引用 7 楼 liups 的回复:] 但是楼主这种当时就初始化成可以用的有效值，应该是很少见的情况。 leader 当时就初始化成可以用的有效值 是常见情况  特意给全局变量初始化写0 反而是少见情况 因为完全多余 写不写都是一样的 有初始化为0[/quote] 如果有多个变量，那么初始化为有效值的地方和真正使用它的地方可以相隔很远，这种情况下如果按你的做法，逻辑上相关的代码距离很远，个人认为不合适。  所以说我倾向leader的做法：定义时一律初始化为0。后面真正使用时再初始化为有效值。虽然多了一次赋值操作，但是逻辑上更佳。[/quote]你在函数内部对全局变量进行初始化 那么第二次调用这个函数的时候 你怎么确保这个全局变量不会被重复初始化 ???

我觉得这是他的一种编码习惯（而这也可能是他不回答你的原因）。  所有的都初始化为 0，只在需要的地方改变。

那如果不是数值型的变量呢？比方一个字符串或者结构甚至数组什么。你这个leader估计也是个半桶水

将变量初始化为一个有意义的初始值即可，谁规定的一定要初始化为0


Question: 自学数据结构提一个简单问题

如果你只是查询，不改变首尾的标识就好了

引用 2 楼 qq_45688408 的回复:谢谢 那这样的话数组元素不就丢失了吗 队列就是前出后进的，既然已经出去了，里面的元素就没有用了。

谢谢 那这样的话数组元素不就丢失了吗

数组是用于存数据的，而队列的位置和长度是有对头和队尾的标识来表示的， 出队就会改变队头的表示（index），虽然元素还在数组里，但是对于队列 来讲出队的元素已经无效了。后面入队会将其覆盖～


Question: 求大神帮忙！

总有一个指针指向链表的第一个节点把，挨个去判断，判断到大于等于就找到插入位置了啊

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

无头节点啥意思？那怎么知道链表的切入点？  楼主的描述是没有哨兵的链表吧


Question: C语言关于函数的问题 求教（新人）

引用 9 楼 wowpH 的回复:不好意思，忘释放内存了。     ...      for (int i = 0; i < n; ++i) {         free(a[i]);     }     free(a);     return 0; }

引用 9 楼 wowpH 的回复：#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<malloc.h>  void  PrintYHTriangle(int** a, int  n);/*用于打印杨辉三角形*/  int main() { 	int n; 	printf("Input n(n<=15):\n"); 	scanf("%d", &n);  	int** a; 	a = (int**)malloc(sizeof(int*) * n); 	for (int i = 0; i < n; ++i) { 		a[i] = (int*)malloc(sizeof(int) * n); 	}  	PrintYHTriangle(a, n); 	return 0; }  void PrintYHTriangle(int** a, int n) { 	int i, j; 	//输出列 	for (i = 0; i < n; i++) { 		//输出行 		for (j = 0; j <= i; j++) { 			if (i == 0 || j == i || j == 0) { 				a[i][j] = 1; 				printf("%5d", a[i][j]); 			} else { 				a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; 				printf("%5d", a[i][j]);//a[x][j]=a[x-1][j-1]+a[x-1][j] 			} 		} 		printf("\n"); 	} } 谢谢呀 我现在还不太会用指针

引用 9 楼 wowpH 的回复：#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<malloc.h>  void  PrintYHTriangle(int** a, int  n);/*用于打印杨辉三角形*/  int main() { 	int n; 	printf("Input n(n<=15):\n"); 	scanf("%d", &n);  	int** a; 	a = (int**)malloc(sizeof(int*) * n); 	for (int i = 0; i < n; ++i) { 		a[i] = (int*)malloc(sizeof(int) * n); 	}  	PrintYHTriangle(a, n); 	return 0; }  void PrintYHTriangle(int** a, int n) { 	int i, j; 	//输出列 	for (i = 0; i < n; i++) { 		//输出行 		for (j = 0; j <= i; j++) { 			if (i == 0 || j == i || j == 0) { 				a[i][j] = 1; 				printf("%5d", a[i][j]); 			} else { 				a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; 				printf("%5d", a[i][j]);//a[x][j]=a[x-1][j-1]+a[x-1][j] 			} 		} 		printf("\n"); 	} } 谢谢呀 ..我还不太会指针

引用 8 楼 user-2 的回复：和你用不用函数没关系  差别是 初始化 你正常输出的代码里面 main里面的数组 arr 有做全0初始化  异常输出的代码里面 main里面的数组 arr 没有做初始化 里面的数据的垃圾值 所以会出现 读取垃圾值的情况  导致出现中断   做初始化就没事了那个异常的是0初始化的 我刚刚改了一下 把异常的那个去掉初始化结果反而正常了 不知道为什么

引用 5 楼 wowpH 的回复：报错结果。发不了图片 第二种 Input n（n<=15） 7       1       1    1       1    2    1       1    3    3    1       1    4    6    4    1       1    5    10   10  5   Process returned -1073741819（0xC0000005） execution time：4.533 s Press any key to continue.

引用 5 楼 wowpH 的回复:报错结果。建议 a 大小固定。如果 n 可能非常大，干脆直接动态申请内存。如下：  	int** a; 	a = (int**)malloc(sizeof(int*) * n);// 头文件stdlib.h 	for (int i = 0; i < n; ++i) { 		a[i] = (int*)malloc(sizeof(int) * n); 	}

报错结果。

#include<stdio.h> void YHTriangle(int a[][15], int  n);//用于计算杨辉三角形*/ void  PrintYHTriangle(int a[][15], int  n);/*用于打印杨辉三角形*/ int main() {     int n,a[15][15];     printf("Input n(n<=15):\n");     scanf("%d",&n);     YHTriangle(a,n);     PrintYHTriangle(a,n);     return 0; } void YHTriangle(int a[][15],int n) {     int i,j;     //输入列     for(i=0;i<n;i++)     {         //输入行         for(j=0;j<=i;j++)         {             if(i==0 || j==i ||j==0)             {              a[i][j]=1;              }             else             {                 //递推式求值             a[i][j]=a[i-1][j-1]+a[i-1][j];              }         }         printf("\n");     }  } void PrintYHTriangle(int a[][15], int n) {     int i,j;     for(i=0;i<n;i++)     {         for(j=0;j<=i;j++)         {             printf("%5d",a[i][j]);         }         printf("\n");     }    }

引用 2 楼 Throne? 的回复：#include<stdio.h> /*int  YHTriangle(int a[i][j] int  n);用于计算杨辉三角形*/ void  PrintYHTriangle(int a[][15], int  n);/*用于打印杨辉三角形*/ int main() {     int n,a[][15]={0};     printf("Input n(n<=15):\n");     scanf("%d",&n);     PrintYHTriangle(a,n);     return 0; } void PrintYHTriangle(int a[][15],int n) {     int i,j;     //输出列     for(i=0;i<n;i++)     {         //输出行         for(j=0;j<=i;j++)         {             if(i==0 || j==i ||j==0)             {             a[i][j]=1;             printf("%5d",a[i][j]);             }             else             {             a[i][j]=a[i-1][j-1]+a[i-1][j];             printf("%5d",a[i][j]);//a[x][j]=a[x-1][j-1]+a[x-1][j]             }         }         printf("\n");     }  } /*int YHTiangle(int a[i][j], int n) {     int i,j;              if(i == 0 || j==i+1)             {              a[i][j]=1;             }             else             a[i][j] = a[i-1][j-1]+a[i-1][j];         }     }     return a[i][j]; } */第二种

看看你代码怎么写的。


Question: char二维数组，输出不解，乱码问题

引用 6 楼 提及 的回复:赵4老师的方法最好，不接受反驳  引用 5 楼 tjh12010 的回复: 货卖识家。

引用 7 楼 秋的红果实 的回复:感谢各位，知道这个\0了  那个方框，该怎么解释呢？ 那个方框其实就是乱码～

引用 7 楼 秋的红果实的回复:感谢各位，知道这个\0了  那个方框，该怎么解释呢？ 1：方框意思是不能识别的数据。 2：printf输出字符串数据(%s)，直至遇到'\0'才结束输出。 3：'\0'对于字符串，表示结束符号，占用一字节，所以定义时要[4]； 4：'\0'，就是数据0； 5：字符数组单个赋值时，要人工加结束符。可以b[4]='\0'；也可以b[4]=0； 6：特殊的，b[ ]=“ABC”；不用人工加结束符，也不用在下标中标明数组大小。双引号的作用是，为其中字符串数据自动加'\0'，在内存中开辟存储空间，并把存储地址赋给左边变量。

感谢各位，知道这个\0了  那个方框，该怎么解释呢？

赵4老师的方法最好，不接受反驳  引用 5 楼 tjh12010 的回复:

#include <stdio.h> int main() {	 	char b[][4]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};      for(int i=0;i<3;i++)     {         printf("%s\n",b[i]);       } 	return 0; } 这个方法是最好的！！！！ 如下   是你要的结果吧。。

引用 3 楼 weixin_40290083 的回复:char b[][4]={{'A','B','C','\0'},{'D','E','F','\0'},{'G','H','I','\0'}};      for(int i=0;i<3;i++)     {         printf("%s\n",b[i]);       }  试试这个  char b[][4]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};  这样也是可以，把列数编程4（至少要变成4），这样前三个字符都是初始化的，最后一个会自动补0.

printf("%.3s\n",b[i]);  或者 printf("%.*s\n",3,b[i]);  应该也行。

没有正确的结束符，给二维数组每一行末尾加一个'\0'就行了


Question:
不是说如果省略0标志，则会用空白补齐位数
为啥%.4d和%04d 显示出来都是0123?

治好了我多年的颈椎病

扔到百度咯 精密度规范 格式规范的第三个可选字段是精度规范。它指定一个非负的十进制整数，前面是句点（.），它指定要打印的字符数、小数位数或有效位数（见表R.5）。与宽度规范不同，精度规范可能导致输出值截断或浮点值舍入。如果精度指定为0且要转换的值为0，则结果不输出字符，如下所示：  printf（“%.0d”，0）；/*不输出字符*/  如果精度规范是星号（*），则参数列表中的int参数将提供该值。精度参数必须在参数列表中格式化的值之前。  如表R.5所示，当精度被省略时，类型决定精度的解释和默认值。  表R.5精度值如何影响类型  类型表示默认值 c，c精度没有影响。字符已打印。 d，i，u，o，x，x精度指定要打印的最小位数。如果参数中的位数小于精度，则输出值在左侧用零填充。当位数超过精度时，不会截断该值。默认精度为1。 e，e精度指定小数点后要打印的位数。最后打印的数字是四舍五入的。默认精度为6；如果精度为0或句点（.）后面没有数字，则不打印小数点。 f精度值指定小数点后的位数。如果出现小数点，则至少有一个数字出现在它之前。该值四舍五入到适当的位数。默认精度为6；如果精度为0，或者如果句点（.）后面没有数字，则不打印小数点。 g，g精度指定打印的最大有效位数。将打印六个有效数字，并截断任何尾随零。 s，s精度指定要打印的最大字符数。不打印超过精度的字符。打印字符，直到遇到空字符。   如果与浮点说明符对应的参数是无限、不定或NaN，则printf将提供以下输出。  价值产出 +无穷大1.内指 –无穷大–1.内数位 不定（与安静的NaN相同）数字。 非随机数

引用 1 楼 赵4老师的回复:Precision Specification The third optional field of the format specification is the precision specification. It specifies a nonnegative decimal integer, preceded by a period (.), which specifies the number of characters to be printed, the number of decimal places, or the number of significant digits (see Table R.5). Unlike the width specification, the precision specification can cause either truncation of the output value or rounding of a floating-point value. If precision is specified as 0 and the value to be converted is 0, the result is no characters output, as shown below:  printf( "%.0d", 0 );      /* No characters output */  If the precision specification is an asterisk (*), an int argument from the argument list supplies the value. The precision argument must precede the value being formatted in the argument list.  The type determines the interpretation of precision and the default when precision is omitted, as shown in Table R.5.  Table R.5   How Precision Values Affect Type  Type Meaning Default  c, C The precision has no effect. Character is printed.  d, i, u, o, x, X The precision specifies the minimum number of digits to be printed. If the number of digits in the argument is less than precision, the output value is padded on the left with zeros. The value is not truncated when the number of digits exceeds precision. Default precision is 1.  e, E The precision specifies the number of digits to be printed after the decimal point. The last printed digit is rounded. Default precision is 6; if precision is 0 or the period (.) appears without a number following it, no decimal point is printed.   f  The precision value specifies the number of digits after the decimal point. If a decimal point appears, at least one digit appears before it. The value is rounded to the appropriate number of digits.  Default precision is 6; if precision is 0, or if the period (.) appears without a number following it, no decimal point is printed.  g, G The precision specifies the maximum number of significant digits printed. Six significant digits are printed, with any trailing zeros truncated.  s, S The precision specifies the maximum number of characters to be printed. Characters in excess of precision are not printed. Characters are printed until a null character is encountered.    If the argument corresponding to a floating-point specifier is infinite, indefinite, or NaN, printf gives the following output.  Value Output  + infinity 1.#INFrandom-digits  – infinity –1.#INFrandom-digits  Indefinite (same as quiet NaN) digit.#INDrandom-digits  NAN  digit.#NANrandom-digits 谢谢!  但是我不太看得懂


Question: 输出出现次数最小的字母，如果出现次数一样则输出asiii的最小字母

#include "stdio.h" #include "string.h" int main( void ) { 	char str[]="AGSKHAGSIYAwewqead1328188ashdnbnmxhjgzydae2iu872187adgsa"; 	int C[127]={0}; 	int i=0, min=0, r=0; 	for( i=0 ; i<strlen(str) ; i++ ) 		C[ str[i] ]++; 	for( i=126 ; i>0 ; i-- ) 	{ 		if( (min==0 && C[i]>0) || (C[i]>0 && C[i]<=min ) ) 		{ 			min = C[i]; 			r=i; 		} 	} 	printf("字符%c %d次\n", r , min ); 	return 0; }  结果：字符3  1次 复杂度O( n ) 思路：遍历一次str，每个字符出现一次就记录一次到C数组对应的位置，C数组的小标对应了该字符的ASCII，C数组的值即该字符出现的次数，然后，从C数组的最后往前遍历，出现在最后的最小的非0值就是最小且次数最少的字符，其下标就是该字符的ASCII

引用 1 楼 user-5 的回复:1.a-z,26个字母 2.创建26大小的int数组对应a-z 3.然后遍历输入 4.每出现一个字母对应数组位置的数字+1 5.最后遍历数组 6.取数组中第一个最大值. 还需要考虑大写字母哦。 65～90为26个大写英文字母，97～122号为26个小写英文字母

引用 3 楼 the_sea1 的回复:删除法，从第一个字符开始删除与它相同的字符，计算删除后的字符串长度，得出该字符出现的次数。以此类推计算其它字符出现的次数，比较求得出现次数最少的字符。这种方法相对耗时较长。


Question: 求大神看看程序没问题，就是编译有错误，怎么解决

引用 6 楼 ssdcs_ 的回复:这些改法我都试过了，现在就感觉是编译环境的问题，需要一个C++ Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

这些改法我都试过了，现在就感觉是编译环境的问题，需要一个C++

你的程序中有一个错误：把scanf("%d", val);改为scanf("%d", &val); 另外，把int j;改为//int j;这个变量没有用上。

引用 3 楼 ssdcs_ 的回复:我把你这个程序复制运行在我的C++上也是那个错误，感觉是我的C++有问题，程序调用缺东西，你能把你的C++给我发一下么，谢谢。 在我的环境里编译没问题～

这个完整版的怎么用哇，我之前都是用的阉割版，不会用这个

#include <stdio.h> #include <stdbool.h>  bool IsPrime(int m) {     int i;     for (i=2; i<m; ++i)     {         if (0 == m%i)             break;     }     if (i >= m)         return true;     else         return false; }  int main(void) {     int val;     int i;     int j;      //scanf("%d", val);     scanf("%d", &val);     for (i=2; i<val; ++i)     {         if (IsPrime(i))             printf("%d\n", i);     }      return 0; }   供参考～

两种方法： 1. 扩展名改成.cpp 2. 开头加入#include <stdbool.h>  另外，你的程序中有一个错误： scanf("%d", val); 应该是： scanf("%d", &val);


Question: C#DataGridView空间直接透明了

出门左拐隔壁进C#论坛。 https://bbs.csdn.net/forums/CSharp


Question: 想咨询下国密算法SM2的公私钥生成，签名验签。Lua语言的实现diao'yong

架构师的思路码农一下子确实理解不了也很正常。

跨不同语言比如lua和c调用 就和 跨不同母语的人比如中文和英语办事 类似。 一个只会中文的人Z求一个只会英语的人Y办事，Z扔给Y一个约定好名字和双方都能看懂内容的文件A Y发现文件A存在，读取A，将办事结果写到一个约定好名字和双方都能看懂内容的文件B Z发现文件B存在，读取B

引用 6 楼 赵4老师 的回复:lua写请求数据到临时文本文件A中 sm2.c或java或js读取临时文本文件A，将结果写到临时文本文件B lua发现临时文本文件B存在时，读取其中的结果。 仅供参考：//test.c 本程序演示两个进程之间通过临时文本文件交换数据实现间接调用 //A将请求数据写到文件a.txt，写完后改名为aa.txt //B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt //A发现bb.txt存在时，读取其内容，读完后删除bb.txt #include <io.h> #include <stdio.h> #include <windows.h> int main(int argc,char **argv) {     int d,r;     FILE *f;     char cmdstr[512];      if (argc<2) {         sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);         WinExec(cmdstr,SW_HIDE);         for (d=1;d<=5;d++) {//共使用1..5调用B 5次             //A将请求数据写到文件a.txt，写完后改名为aa.txt             f=fopen("a.txt","w");             fprintf(f,"%d\n",d);             fclose(f);             rename("a.txt","aa.txt");             printf("call with %d\n",d);             //A发现bb.txt存在时，读取其内容，读完后删除bb.txt             while (1) {                 Sleep(100);                 if (_access("bb.txt",0)!=-1) {                     f=fopen("bb.txt","r");                     fscanf(f,"%d",&r);                     fclose(f);                     remove("bb.txt");                     break;                 }             }             printf("result:%d\n",r);         }         return 0;     }     if (argv[1][0]=='a'||argv[1][0]=='A') {//A         for (d=1;d<=5;d++) {//共使用1..5调用B 5次             //A将请求数据写到文件a.txt，写完后改名为aa.txt             f=fopen("a.txt","w");             fprintf(f,"%d\n",d);             fclose(f);             rename("a.txt","aa.txt");             printf("call with %d\n",d);             //A发现bb.txt存在时，读取其内容，读完后删除bb.txt             while (1) {                 Sleep(100);                 if (_access("bb.txt",0)!=-1) {                     f=fopen("bb.txt","r");                     fscanf(f,"%d",&r);                     fclose(f);                     remove("bb.txt");                     break;                 }             }             printf("result:%d\n",r);         }     } else {//B         while (1) {             //B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt             while (1) {                 Sleep(100);                 if (_access("aa.txt",0)!=-1) {                     f=fopen("aa.txt","r");                     fscanf(f,"%d",&r);                     fclose(f);                     r=r*10;                     f=fopen("b.txt","w");                     fprintf(f,"%d\n",r);                     fclose(f);                     remove("aa.txt");                     rename("b.txt","bb.txt");                     break;                 }             }             if (r==50) break;         }     }     return 0; } //C:\tmp\test>test //call with 1 //result:10 //call with 2 //result:20 //call with 3 //result:30 //call with 4 //result:40 //call with 5 //result:50 // //C:\tmp\test>start /B test B // //C:\tmp\test>test A //call with 1 //result:10 //call with 2 //result:20 //call with 3 //result:30 //call with 4 //result:40 //call with 5 //result:50 // //C:\tmp\test> 首先lua要读取公钥，然后用公钥验签，获取验签结果，这些都是要用lua去调用sm2.c实现

引用 1 楼 赵4老师 的回复:那就用C/C++通过共享临时文件的办法间接调用java或js版本对应功能。  不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯我叙述的不是很清楚，java和js都是样例，是用国密生成公私钥，然后用公私钥和各种算法生成签名。而网关是用来验签的，网关是用lua语言写的，我就是需要把网关的原本的rsa替换成sm2的验签就行，所以还是要用lua去调用sm2.c啊文本文件进行信息交流”的岸！我叙述的不是很清楚，java和js都是样例，是用国密生成公私钥，然后用公私钥和各种算法生成签名。而网关是用来验签的，网关是用lua语言写的，我就是需要把网关的原本的rsa替换成sm2的验签就行，所以还是要用lua去调用sm2.c啊

引用 2 楼 秋的红果实 的回复:引用 1 楼 赵4老师 的回复:也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。请问下大侠，这样做具体会出什么错？我经常用C#调用C++的库，如图片比对 内存和序列化/反序列化对象的布局在不同OS、不同开发环境、不同开发语言不可能完全一样。

那就用C/C++通过共享临时文件的办法间接调用java或js版本对应功能。  不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！


Question: 求一个数是否是素数

Finding prime numbers - Kenneth Haugland  Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

引用 1 楼 自信男孩的回复:改一下 if (w = 0) //此处应该用w == 0 感谢你(❁´ω`❁)

引用 3 楼 小熊之怒的回复:for循环里面加打印，如果进不去for循环。for循环之前加打印，打印sqrt相关的东西。检查sqrt的结果。  sqrt的返回值是double类型，如果用int转，会是个很大的值。和编译器也有关。所以加打印调试。 谢谢你哦(´-ω-`)

引用 3 楼 小熊之怒的回复:for循环里面加打印，如果进不去for循环。for循环之前加打印，打印sqrt相关的东西。检查sqrt的结果。  sqrt的返回值是double类型，如果用int转，会是个很大的值。和编译器也有关。所以加打印调试。 好像和这个打印没有什么关系，问题我找到了，是循环里else的事儿，去掉else就好了，因为else的话循环进行不下去

引用 1 楼 自信男孩的回复:改一下 if (w = 0) //此处应该用w == 0 改了，但是还是不对，只能运行到输入的那一部分，循环处不执行

改一下 if (w = 0) //此处应该用w == 0


Question: 有没有类似signal()的函数，可以向里面传递额外参数的那种？

引用 1 楼 user-1 的回复:没有好的办法时，不得已就用外部变量吧  #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h>  //假设x是某结构体指针 char *x;  void sighandler(int);  int main(void) {    x = malloc(128);    signal(SIGINT, sighandler);     while (1)     {       sleep(1);    }     return 0; }  void sighandler(int signum) {    puts("free x");    free(x);    exit(1); }   我去试试，谢谢了


Question: 大神帮忙看一下哦

#include <stdio.h> int main() {	 	printf("char   = %d , 二进制位数 = %d\n",sizeof(char)  ,sizeof(char)*8);   	printf("int    = %d , 二进制位数 = %d\n",sizeof(int)   ,sizeof(int)*8);  	printf("long   = %d , 二进制位数 = %d\n",sizeof(long)  ,sizeof(long)*8); 	printf("float  = %d , 二进制位数 = %d\n",sizeof(float) ,sizeof(float)*8);  	printf("double = %d , 二进制位数 = %d\n",sizeof(double),sizeof(double)*8);  	return 0; }


Question: 求大神帮助，急

https://blog.csdn.net/weixin_42718004/article/details/93051556 单链表供参考

作业自己做吧


Question: 刚学C语言，新手求助

每次都去除10，取余数 比如 12345除10取余数->5 1234除10取余数->4 123除10取余数->3 12除10取余数->2 1除10取余数->1

每次都去除10，去余数

引用 2 楼 the_sea1 的回复: #include "iostream" using namespace std;  void PopNum(int num) { 	int i = 0; 	int a[20] = {0};  	while (1) 	{	 		a[i] = num % 10; 		num = num / 10; 		++i; 		if (num == 0) 		{ 			break; 		} 	}  	while (i--) 	{ 		printf("%2d", a[i]); 	} }  int main() { 	int a; 	cin >> a; 	PopNum(a); 	system("pause");	 	return 0; }	    用C语言的话就把cin换成scanf()函数。

引用 楼主 qq_45664277的回复:这道题怎么做啊，求大佬们帮忙。 我做出来了，较简单的那种

不是很难吧，num % 10; num /= 10; check num == 0?

#include <stdio.h> int main() {	 	int num[20]={0}; 	int input=0,i=0; 	scanf("%d",&input);  	do{ 		num[i++]=input%10; 	}while((input/=10)!=0); 	for(;i>0;)printf("%2d",num[--i]);  	printf("\n");  	return 0; }     亲测！亲测！亲测！亲测！亲测！！！ 看图，有不对的说声


Question: 求助

引用 1 楼 阿大古 古古古 的回复:这个真的看不懂，哪里的题目啊 一本书上看到的

这个真的看不懂，哪里的题目啊


Question: 数据结构，非递减顺序表中删除相等元素

引用 1 楼 自信男孩的回复:删除元素的方法是删除的位置的后面元素向前移动一个位置。 说的没错，这是用的数组里的双指针法

删除元素的方法是删除的位置的后面元素向前移动一个位置。


Question: 学生链表

#include <stdio.h> #include <stdlib.h> #include <string.h>  #define ERROR 0 #define OK 1  typedef int Status; typedef struct    //学生信息系统 {     char num[8];     char name[10];     float score; }student;  typedef student ElemType;  typedef struct LNode {     ElemType data;     struct LNode *next; }LNode,*LinkList;       //LinkList为指向结构体LNode的指针类型  Status GetElem(LinkList L,int i,ElemType &e)  //链表的取值 {      //在带头结点的单链表中L根据序号i获取元素的值,用e返回L中第i个数据元素的值     LNode *p;     int j;     p=L->next;     j=1;     while(p&&j<i)     {         p = p->next;         ++j;     }     //if(!p || j>i)     if(!p || j >= i)         return ERROR;      e=p->data;      return OK; }  LNode *LocateElem(LinkList L,ElemType e)    //链表的按值查找 {     LNode *p;     p = L->next;     //while(p && p->data.name!=e.name)     while(p && strcmp(p->data.name, e.name))         p = p->next;      return p; }  Status ListInsert(LinkList &L,int i,ElemType e)   //链表的插入操作 {         //在带头结点的单链表L中第i个位置插入值为e的新结点     LNode *p=L,*s;     int j=0;      //while(p && (j > i-1))     while(p && (j < i-1))     {         p = p->next;         ++j;     }     //if(!p||j>i-1)     if(!p || j > i-1)         return ERROR;      s = new LNode;     s->data = e;     s->next = p->next;     p->next = s;      return OK; }  Status ListDelete(LinkList &L,int i)   //链表的删除操作 {      //在带头结点的单链表L中,删除第i个元素     LNode *p=L,*q;     int j=0;      while((p->next) && (j < i-1))     {         p = p->next;         ++j;     }     //if(!(p->next)||(j>i-1))     if(!(p->next)||(j>=i-1))         return ERROR;     q = p->next;     p->next = q->next;     delete q;      return OK; }  int CreateList_H(LinkList &L,int n)    //前插法创建单链表 {      //逆位序输入n个元素的值,建立带表头结点的单链表     int i;     LNode *p;      L = new LNode;     L->next = NULL;     for(i=0;i<n;i++)     {         p=new LNode;         printf("学号:");         scanf("%s",p->data.num);         printf("\n");         getchar();         printf("姓名:");         scanf("%s",p->data.name);         printf("\n");         printf("成绩:");         //scanf("%.2f", &p->data.score);         scanf("%f", &p->data.score);         p->next=L->next;         L->next=p;     }     printf("\n");     return OK; }  //void main() int main() {     LinkList L;     int k,m,x,y,choose,temp,z;     ElemType a,b,c;     LNode *p1;     printf("\t\t\t欢迎进入学生的信息系统\n");     printf("**************************************************************\n");     printf("\t\t1.根据指定学生个数，输入学生信息\n");     printf("\t\t2.逐个显示表中所有学生的相关信息\n");     printf("\t\t3.根据姓名进行查找，返回此学生的学号和成绩\n");     printf("\t\t4.根据指定的位置返回相应的学生信息\n");     printf("\t\t5.给定一个学生信息，插入到表中指定的位置\n");     printf("\t\t6.删除指定位置的学生记录\n");     printf("\t\t7.统计表中学生个数\n");     printf("\t\t8.运行结束退出程序\n");     printf("**************************************************************\n");     //从循环中拿出一个     printf("请输入你的选择:\n");     scanf("%d", &choose);     while(choose)     {         if(choose>8)             printf("输入错误！\n");          switch(choose)         {             case 1:                 printf("\t\t1.根据指定学生个数，输入学生信息\n");                 printf("请输入学生的人数:\n");                 scanf("%d",&m);                 printf("\n");                 if (CreateList_H(L,m))                     printf("输入成功！\n");                 else                     printf("输入失败！\n");                 break;              case 2:                 printf("\t\t2.逐个显示表中所有学生的相关信息\n");                 p1 = L->next;    //初始化p1                 //for(k=0;k<m;*(++p1),k++)                 for(k=0; k<m; p1=p1->next, k++)                 {                     printf("第%d个学生的信息:",k+1);                     printf("学号:%s",p1->data.num);                     printf("名字:%s",p1->data.name);                     printf("成绩:%.2f",p1->data.score);                 }                 printf("\n");                 break;              case 3:                 printf("\t\t3.根据姓名进行查找，返回此学生的学号和成绩\n");                 printf("请输入要查找的姓名:");                 //scanf("%s",&a.name);                 scanf("%s", a.name);                 p1=LocateElem(L,a);                 if (!p1) {                     printf("Not find it named %s!\n", a.name);                     break;                 }                 printf("学号:%s\t", p1->data.num);                 printf("成绩:%.2f\n",p1->data.score);                 break;              case 4:                 printf("\t\t4.根据指定的位置返回相应的学生信息\n");                 printf("请输入指定的位置:");                 scanf("%d", &x);                 temp=GetElem(L,x,b);                 if(temp)                     printf("学号:%s,姓名:%s,成绩:%.2f\n",b.num,b.name,b.score);                 break;              case 5:                 printf("\t\t5.给定一个学生信息，插入到表中指定的位置\n");                 printf("请输入要插入的位置:\n");                 scanf("%d",&y);                 printf("请输入要插入的信息:\n");                 printf("学号:");                 //scanf("%s",&c.num);                 scanf("%s", c.num);                 printf("姓名:");                 //scanf("%s",&c.name);                 scanf("%s", c.name);                 printf("成绩:");                 //scanf("%d", &c.score);                 scanf("%f", &c.score);                  if(ListInsert(L,y,c))                 {                     printf("插入成功！\n");                     ++m;                 }                 else                     printf("插入失败！\n");                 break;              case 6:                 printf("\t\t6.删除指定位置的学生记录\n");                 printf("请输入要删除的位置:");                 scanf("%d",&z);                 if(ListDelete(L,z))                 {                     printf("删除成功！\n");                     --m;                 }                 printf("删除失败！\n");                 break;              case 7:                 printf("\t\t7.统计表中学生个数\n");                 printf("统计后学生的个数为:%d\n",m);                 break;             case 8:                 printf("\t\t8.运行结束退出程序\n");                 printf("\n退出系统成功！ 请按任意键结束！\n");                 exit(0);                 break;         }         printf("请输入你的选择:\n");         scanf("%d",&choose);     }      return 0; }  供参考～  建议对比一下代码找出自己的问题～

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

引用 1 楼 阿大古 古古古的回复:在主函数的while前把choose赋个1值，就能运行了起来了，其他对不对不清楚 我在while有赋值

我运行了，为啥输出信息(case 2)的时候，顺序是倒过来的，能改成正序的不？


Question: 已知顺序表L中元素为int，请写一个时间复杂度为O(n)，空间复杂度为O(1)的算法，将L中奇数元素排在前偶数元素排在后

可以教一下我怎么把这个代码写出来之后怎么实现吗，它显示我没有定义什么的🙏🙏拜托


Question: 新手自学中一个数学算法用C语言表示的问题1-1/2+1/3-1/4....+1/99-1/100的值

问题1：我想问下这个2.0 跟1.0是什么 他有什么具体的含义吗，是什么算法吗？ 将sum的值设置为1.0，对应1-1/2+1/3-1/4....+1/99-1/100中的1，即加红的部分。将deno的值设置为2.0，对那个1-1/2+1/3-1/4....+1/99-1/100中的-1/2，即加红的部分，后面随着deno的值逐次加1，对应1/3，1/4.... 问题2：还有就是1-2分之1+3分之1 的 分号在程序里是怎么体现的啊 分号在程序中，通过 term=sign/deno; 体现，因为sign的值始终是1或者-1,所以随着deno的值逐次加1，对应sign/deno1/3，-1/4.... 另外，你的代码写的很不错，就是有一个小小的手误， while(deon<=100) 应该是 while(deno<=100)

。。。把那个倒数第五行那个{删了（纯手打失误见谅）

另外一办法这样的： #include<stdio.h>//希望对你有帮助233 void main(){   int a,b,s,t; double num;//num是总和，a是分子b分母s控制符号。   a=1,b=1,s=1,t=1,nu0=o;  w)hile(b<=100){   num+=,+b=b+1,s=-s,t=a/b{ }  printf("%ld\n",num);  }

#include<stdio.h> int main() { 	int sign=1; 	double deno =  2.0, sum = 1.0,term;    //我想问下这个2.0 跟1.0是什么 他有什么具体的含义吗，是什么算法吗？ 	while(deno<=100.0) 	{ 		sign=-sign; 		term=sign/deno; 		sum=sum+term; 		deno=deno+1; 		printf("%lf", sum); 	} 	 	return 0; } /*我也是一个刚学的, 我觉得哪两个数字没有什么影响，因为你已经定义成了DOUBLE类型了，所以写成整数或者小数形式都行 注意输出的时候放到循环里面是显示每一个阶段之和，放到循环外面是直接输出最后的总和，不过最后的总和都不变 注意输出变量控制符为%lf 这个WHILE循环是从 1/2 开始的   你可以试数 还有大兄弟，注意代码规范， 你里面好几个变量都写错了 可能有说的不对的地方希望大牛指点 */

term 代表一个元素 “1”“-1/2”.......  sign 表示正负号  每次while循环先判断符号，通过更新Deon值得到term值，递加到sum上，最后更新deon值 2.0 和 1.0就是普通数字


Question: 线性表

摘自：CSFDN论坛提问的智慧


Question: 关于socket数据转发，有兴趣的讨论下

引用 7 楼 stherix 的回复:如果转发的数据量比较大的话,常规的方法CPU占用都会比较高 IOCP能有效降低CPU占用率,提高并发量 受教，我研究一下IOCP

引用 6 楼 stherix 的回复:[quote=引用 5 楼 yiyefangzhou24 的回复:] [quote=引用 4 楼 stherix 的回复:] 看了下,CPU占用高是因为用的循环,而不是异步访问 现在的软件开发中,这种同步socket基本已经被淘汰了吧 一般这种服务器建议采用IOCP技术 受教，但这还没到服务器级别，仅仅在个人机本地做了一个端口转发而已，一个网页的打开虽然有多个资源需要加载，根据浏览器的不同可能机制不一样，假定一个资源对应一个链接，理论上（实际上）没有很多线程，循环的时候实际上很多线程是挂起的[/quote]  没有看到阻塞啊 select FD_ISSET 都是非阻塞函数 所以就算没有客户端发来数据 你的循环也是一直在空转[/quote] 哦哦，你说的这边，对的，原来有个sleep(5)调试的时候不小心删掉了，加上了之后是好了很多，要是有类似的管道对接输入输出流就好了

引用 5 楼 yiyefangzhou24 的回复:[quote=引用 4 楼 stherix 的回复:] 看了下,CPU占用高是因为用的循环,而不是异步访问 现在的软件开发中,这种同步socket基本已经被淘汰了吧 一般这种服务器建议采用IOCP技术 受教，但这还没到服务器级别，仅仅在个人机本地做了一个端口转发而已，一个网页的打开虽然有多个资源需要加载，根据浏览器的不同可能机制不一样，假定一个资源对应一个链接，理论上（实际上）没有很多线程，循环的时候实际上很多线程是挂起的[/quote]  没有看到阻塞啊 select FD_ISSET 都是非阻塞函数 所以就算没有客户端发来数据 你的循环也是一直在空转

引用 4 楼 stherix 的回复:看了下,CPU占用高是因为用的循环,而不是异步访问 现在的软件开发中,这种同步socket基本已经被淘汰了吧 一般这种服务器建议采用IOCP技术 受教，但这还没到服务器级别，仅仅在个人机本地做了一个端口转发而已，一个网页的打开虽然有多个资源需要加载，根据浏览器的不同可能机制不一样，假定一个资源对应一个链接，理论上（实际上）没有很多线程，循环的时候实际上很多线程是挂起的

引用 2 楼 user-3 的回复:[quote=引用 1 楼 yiyefangzhou24 的回复:] CPU占用高，是因为我用的控制台，有printf的问题？ 应该是有这方面的原因[/quote] 有类似的库吗？手动置顶一下，热度不够啊

引用 11 楼 smwhotjay 的回复: 我也用过lcx.但代码貌似很旧，运行不正常，就把他代码移植了一下，实现了个自己的lcx. listen配合slave工作的很好。 怕死循环空转就sleep(0)一下主要是输入输出4个流都是用一个循环处理的，确实也费点劲

引用 1 楼 yiyefangzhou24 的回复:CPU占用高，是因为我用的控制台，有printf的问题？ 应该是有这方面的原因

CPU占用高，是因为我用的控制台，有printf的问题？


Question: 用C语言编译完成这个程序，但我现在在学Java，对C的了解真的不多，希望大触们能帮帮我

编程的思路和java是相同的，只是语法上有区别，java是面向对象的，是对象.方法（参数），而C中直接是函数（参数）。 思路就是按行读取数据，然后对数据近‘，’折分成字符串数组，trim掉每个元素的前导和后缀的空格，判断字符串元素的长度是为0，如果为0则赋值为null或者不插入并记录错误数。看到你的数据库中所有字段均是varchar型，所以可以不用考虑字符串转换数字的问题。 C语言中没有直接的split，但是有类似的函数通过循环可以得到字符串数组，没有trim函数，需要自己编写。


Question: C语言学习中的一个问题

嗯，数组名是指向数组首元素地址的指针常量，可作为函数参数传递从而改变数组元素的值

引用 2 楼 林多 的回复：因为，数组作为形参传递。传递的是数组首地址（相当于指针）。  所以三个操作，操作的是同一个对象。意思说是当数组名当做形参在调用函数内被改变的时候主函数内的数组也会被改变，因为数组名相当于一个指针？是这样吗？

两张图顺序反了。


Question: 显存和内存是什么关系？

引用 21 楼 qq_43572852 的回复：显存与显示器有关，内存与主机有关跟显示器有啥关系？

显存与显示器有关，内存与主机有关

关系：都具有存储信息的功能。显存有关于电脑的显卡，通常决定于大型游戏的流畅度；内存关系的的是电脑的程序运行数量。

老赵请看这贴：https://bbs.csdn.net/topics/394576253

又建一楼

读写显存在Windows下一定是必须通过系统API的，所有的资源必须由系统管理。至于映射是由系统完成还是由硬件完成？以前显卡功能单一的时候，为了效率我猜是由硬件完成的，因为只要显示一下即可；现在的显卡功能不单一，有很多显示缓冲，在多个缓冲之间切换，这个应该是由显卡自身(通过显卡驱动)完成的。

引用 13 楼 Intel0011 的回复:现在的独立显卡的显存容量都很大，但大部分是给显卡自己计算用的，只有显示器显示内容部分的显存被映射到了内核空间用于系统刷新显示内容，当然现在的显卡为了效率，内部通常都有几个类似双缓冲的东西。 简单的说显存中只有一部分是用于CPU写显示内容的，大部分用于显卡自身的特效计算，当然，现在也有很多的利用GPU来完成计算任务的，和楼主的问题无关了  当计算机没有独立显卡时，PC内存就要划分出一部分内存当作显存使用 这个映射是由系统完成还是由硬件完成？位置通过系统获取还是传统的固定位置（某个算法）？读写显存（屏幕显示的这块）是需要通过系统的API吗？

显存在显卡上；内存在主板上。

显存是设备上的，而内存是给所有设备和程序使用的。显存可以映射到内存了，以提高数据的读写速度～

有些显卡是支持借用内存的，但是内存速度慢于显存速度，借用的太多，会感到明显卡顿； 但是内存不够去借用显存，目前还没见过支持的；常见的是内存借用硬盘的，也就是虚拟内存。

引用 11 楼 六道佩恩 的回复:[quote=引用 10 楼 user-10 的回复:] 应用程序===>请求内存===>系统内存管理===>分配虚拟内存空间===>映射到物理内存===>反回虚拟内存地址 这之间系统内存会管理所有应用的内存到物理内存的映射表 目前操作显存都是采用在内存上映射的方式吗？那映射的位置是固定的吗？[/quote] 目前就windows来讲，显存操作并不会发生映射,显存不可以直接操作的,具体怎么用要看显卡驱动的实现了

引用 10 楼 user-10 的回复:应用程序===>请求内存===>系统内存管理===>分配虚拟内存空间===>映射到物理内存===>反回虚拟内存地址 这之间系统内存会管理所有应用的内存到物理内存的映射表 目前操作显存都是采用在内存上映射的方式吗？那映射的位置是固定的吗？

引用 7 楼 六道佩恩 的回复:[quote=引用 6 楼 早打大打打核战争 的回复:] 显存映射到内存地址空间就可以当内存用，但是显存的延迟大，随机访问性能不行 最普通的情况就是显存映射到内存吗？那假设显存比内存还大怎么办？ 假如内存和显存都是2G，CPU可访问的范围还是0-2G吗？[/quote] 即然是映射那就是都是虚拟寻址地址了，不会重叠的，虚拟的寻址也是线性的。比如你电脑的内存是512M但是你写个应用程序，可以使用的内存空间，如果是32位的话是4G，这个内核做了映射，并不是直接操作内存的

引用 3 楼 赵4老师 的回复:显存在显卡上；内存在主板上。 您这个是区别呀，不是关系

引用 6 楼 早打大打打核战争 的回复:显存映射到内存地址空间就可以当内存用，但是显存的延迟大，随机访问性能不行 最普通的情况就是显存映射到内存吗？那假设显存比内存还大怎么办？ 假如内存和显存都是2G，CPU可访问的范围还是0-2G吗？

显存映射到内存地址空间就可以当内存用，但是显存的延迟大，随机访问性能不行


Question: 字符数组

第一张图的char  t[N]后面多了个符号

引用 7 楼 自信男孩的回复:#define M 10; #define N 5; #define MaxSize 100; 去掉宏定义后的分号;。宏定义是等价替换，如果替换到[]中，你会发现;也在里面。 之后错误变成了 error spawning c1.exe 这是什么意思哇？

#define M和#define N的时候把M和N后面的“;”删除了，同时再复习复习define的相关内容

引用 1 楼 自信男孩的回复:建议贴出完整代码吧～ 这有点乱，我不知道怎么改

引用 1 楼 自信男孩的回复:建议贴出完整代码吧～ 这有点乱，我不知道怎么改

引用 1 楼 自信男孩的回复:建议贴出完整代码吧～ #include<stdio.h>#include<iostream>using namespace std;#define M 10;#define N 5;#define MaxSize 100;int next[MaxSize];#include<string.h>int BF(char S[ ], char T[ ]){     int index=0;   //主串从下标0开始第一趟匹配     int i=0,j=0;   //设置起始下标    while (S[i] != '\0'&& T[j] != '\0')    {         if (S[i]==T[j]) {i++; j++;}           else {index++; i=index; j=0; }  //i和j分别回溯     } 返回本趟匹配的起始位置（不是下标）      if (T[j] =='\0') return (index+1);     else return 0;}/*void GetNext(char  t[], int next[]) //由模式串t求next的值{     int  i, j, len;     next[0]=-1;     for(j=1; t[j] != '\0'; j++)  //依次求next[j]     {	for(len=j-1; len>1; len--)  //相等子串最大长度为len-1	{	      for(i=0; i<len; i++)   //依次比较		if(t[i] != t[j-len+1])  break;	      if(i==len){		next[j]=len;		break;	      }	}	if(len<1) next[j]=0;  //其他情况，无相等子串       }}*/int KMPIndex(char s[], char t[]){	int next[MaxSize];	int i=0, j=0;	GetNext(t, next);	while(s[i] !='\0'&& t[j] !='\0')	{		if(s[i]==t[j]){			i++; j++;	//i、j各增1		}		else {			j=next[j];	//i不变，j后退			if(j==-1) {i++; j++;}		}	}	if(t[j] == '\0') return i-strlen(t)+1;	//返回本趟匹配的开始位置	else return 0;		//返回不匹配标志}int main(){	char s[M];	char t[N];	int i,j;	for(i=0;i<M;i++)		cin>>s[i];	for(j=0;j<N;j++)		cin>>t[j];   return 0;}

N和M换成定值试试

建议贴出完整代码吧～


Question: 输入a b c怎么输出它的ascll码？？

引用 2 楼 weixin_40290083的回复:char ch = 'a'; printf("%d",ch); 谢了小弟不胜感激，，，，，

printf("a = %d, b = %d, c = %d\n", 'a', 'b', 'c');

char ch = 'a'; printf("%d",ch);

赋值给int型变量就可以了 例如:int a = 'a'; a的值就是'a'的ascii码


Question: 问一下

第一个printf没有换行或者空格等其他分隔符，导致j循环的数粘在了一起，看上去是一个十位数，其实是两个个位数

在行号前面加断点，按F5调试，然后按F10单步执行。

引用 5 楼 自信男孩的回复:[quote=引用 4 楼 baidu_38774389 的回复:] [quote=引用 3 楼 自信男孩的回复:]建议在第一个printf后面加几个空格，就很明显的知道为什么会出现圈住的数字了。 比如putchar('\t'); 在printf哪个位置加？[/quote] 第一个printf后面加，在第二个大括号里。[/quote] 第二的大括号里面哪里？

第二的大括号里面哪里？

引用 4 楼 baidu_38774389 的回复:[quote=引用 3 楼 自信男孩的回复:]建议在第一个printf后面加几个空格，就很明显的知道为什么会出现圈住的数字了。 比如putchar('\t'); 在printf哪个位置加？[/quote] 第一个printf后面加，在第二个大括号里。

引用 3 楼 自信男孩的回复:建议在第一个printf后面加几个空格，就很明显的知道为什么会出现圈住的数字了。 比如putchar('\t'); 在printf哪个位置加？


Question: 编译fastdfs报错，实在搜不到，请高人指导

就是搜不到啊，能搜到就好了。会不会是哪个文件有语法错误导致的

把出错提示信息全部或部分复制粘贴到百度搜索框里面搜一下。


Question: 最大子列和的分治法，求大神看看我写的代码到底哪里出错了为什么结果一直不对？

我懂了。。我没有初始化。。


Question: 主函数

这里做笔记不如在本本上或者使用网络上的笔记～

C primer plus

学习笔记吗？


Question: 字符串长度

那是因为没有区分\0,再说你怎么确定是'\0'而不是'\017'呢？

scanf没法输入空字符啊，斜杠和0是两个字符，无法作为空字符存入字符串。

应该是保存了'\'和‘0’而不是‘\0’

1：一楼正解 2：'\0'，只一个字符，不是两个字符，刚接触时，思维是有点矛盾的 3：可以结合ASCII表，和字符变量char，还有字符串，查阅一下三者是如何存储的，如何读取的。明白这三者的关系后，指针和数组就水到渠成了


Question: 求代码

再笼统也不怕，咱中国不有百度嘛。

太笼统了吧这个


Question: 大佬求助

引用 4 楼 覆陇黄 的回复：如果俺没有猜错的话 你把函数体里的东西放在主函数里就可以就行交换了（不要“硬”放....）  原因是： 你在函数体内想对地址进行交换，是“反应”不到主函数里的，因为你swap函数相当于“拷贝”了a、b的地址而非俩指针的地址，可以交换a、b但不可以交换两指针的值（反应不到主函数里）  希望有用，推荐谭浩强教授的对应书，上面有详细的对应内容谢谢🙏

你可以试一试，注意形参的类型

引用 4 楼 覆陇黄的回复:如果俺没有猜错的话 你把函数体里的东西放在主函数里就可以就行交换了（不要“硬”放....）  原因是： 你在函数体内想对地址进行交换，是“反应”不到主函数里的，因为你swap函数相当于“拷贝”了a、b的地址而非俩指针的地址，可以交换a、b但不可以交换两指针的值（反应不到主函数里）  希望有用，推荐谭浩强教授的对应书，上面有详细的对应内容 那要这么说的话。是不是可以直接在 调用swap时这么写。swap(&p,&q);

引用 1 楼 user-6 的回复：函数体里有问题，前面都要加星号加了*是数值交换，我是想用函数交换地址

函数体中:应该是数在交换，不是地址交换

int tmp = *pa; *pa = *pb; *pb = tmp;  函数体改成如上的表达式～

函数体里有问题，前面都要加星号


Question: c语言小问题

这个如果只是用不用的问题，根据你的需求来定吧。

O. o了解了，谢谢各位大佬

如果输出结果在同一行且不容易区分建议添加\n

printf("1"); printf("2"); 运行结果：12 printf("1\n"); printf("2\n"); 运行结果：1                      2

\n这个换行符是个什么意思啊

\n是换行符，什么时候用你自己决定

这问题问题得... 你知道'\n’是什么吗？


Question: 求大佬帮我解一下这道普通算法题目

引用 3 楼 Daniel201418 的回复：#include<stdio.h> int main(void){ 	int n; 	scanf("%d",&n); 	int a[n]; 	int max=-1,count=1; 	for(int i=0;i<n;i++){ 		scanf("%d",&a[i]); 	} 	for(int i=0;i<n;i++){ 		if(i>0) 		if(a[i]>a[i-1]){ 			count++; 		}else{ 			if(count>max) 			max=count; 			count=1; 		} 	} 	if(count>max) 	max=count; 	printf("%d",max); }谢谢大佬

引用 1 楼 user-2 的回复：确实挺简单的。一个循环就够了。刚上这门课，小白

确实挺简单的。一个循环就够了。


Question: 改错题

scanf("%f,%f", &x, &y); 输入错误～ else少一个}


Question: StretchBlt应该能取代BitBlt吧？为什么还留着BitBlt?

因为StretchBlt基于BitBlt，它只不过做了缩放，最后还是要用到BitBlt的，就跟 FindWindow最终都要调用到FindWindowEx，看着没有用，实则是为不同层次的应用程序保留的接口

引用 6 楼 赵4老师 的回复:尺有所短，寸有所长。 进即退，得即舍。 任何问题首先是一个哲学问题。  我觉得我应该知道没有取代的另一个原因了（也许是真正原因）——设置缩放模式会影响传输效果，而BitBlt则不会受影响

尺有所短，寸有所长。 进即退，得即舍。 任何问题首先是一个哲学问题。

引用 3 楼 六道佩恩 的回复:[quote=引用 2 楼 赵4老师 的回复:] 电动车应该能取代自行车吧？为什么还留着自行车? 我看自行车能做到的事情，电动车好像应该都能做到  自行车有电动车没有的优点啊，但BitBlt对比StretchBlt好像没什么优点吧[/quote] 我现在这一刻能猜到的BitBlt对比StretchBlt的优点有： ◆名字短，好敲。 ◆可能早期版本只有BitBlt，StretchBlt压根没诞生，后来才有了StretchBlt。且微软希望StretchBlt诞生前已存在的调用BitBlt的程序无需在StretchBlt诞生后都必须修改为BitBlt那么麻烦，只好保留BitBlt了。（很多问题都需要这样历史地看） ◆……

引用 5 楼 赵4老师 的回复:[quote=引用 3 楼 六道佩恩 的回复:] [quote=引用 2 楼 赵4老师 的回复:] 电动车应该能取代自行车吧？为什么还留着自行车? 我看自行车能做到的事情，电动车好像应该都能做到  自行车有电动车没有的优点啊，但BitBlt对比StretchBlt好像没什么优点吧[/quote] 我现在这一刻能猜到的BitBlt对比StretchBlt的优点有： ◆名字短，好敲。 ◆可能早期版本只有BitBlt，StretchBlt压根没诞生，后来才有了StretchBlt。且微软希望StretchBlt诞生前已存在的调用BitBlt的程序无需在StretchBlt诞生后都必须修改为BitBlt那么麻烦，只好保留BitBlt了。（很多问题都需要这样历史地看） ◆……[/quote] 666，这么一说感觉懂起了

引用 楼主 六道佩恩 的回复:我看BitBlt能做到的事情，StretchBlt好像应该都能做到 存在即合理，思考这些没用的东西没有意义，你觉得能做到，你挑一个学习就行了，就算你不学习这个也不影响你写出好的程序。

引用 2 楼 赵4老师 的回复:电动车应该能取代自行车吧？为什么还留着自行车? 我看自行车能做到的事情，电动车好像应该都能做到  自行车有电动车没有的优点啊，但BitBlt对比StretchBlt好像没什么优点吧

Win源码 /******************************Public*Routine******************************\ * PatBlt                                                                   * *                                                                          * * Client side stub.  Copies all LDC attributes into the message.           * *                                                                          * *  Wed 12-Jun-1991 01:02:25 -by- Charles Whitmer [chuckwh]                 * * Wrote it.                                                                * \**************************************************************************/  BOOL META WINAPI PatBlt(     HDC hdc,     int x,     int y,     int cx,     int cy,     DWORD rop ) {     BOOL bRet = FALSE;     PDC_ATTR pdca;      FIXUP_HANDLE(hdc);      if (IS_ALTDC_TYPE(hdc))     {         PLDC pldc;          if (IS_METADC16_TYPE(hdc))             return(MF16_RecordParmsWWWWD(hdc,(WORD)x,(WORD)y,(WORD)cx,(WORD)cy,rop,META_PATBLT));          DC_PLDC(hdc,pldc,bRet);          if (pldc->iType == LO_METADC)         {             if (!MF_AnyBitBlt(hdc,x,y,cx,cy,(LPPOINT)NULL,(HDC)NULL,0,0,0,0,(HBITMAP)NULL,0,0,rop,EMR_BITBLT))                 return(bRet);         }          if (pldc->fl & LDC_SAP_CALLBACK)             vSAPCallback(pldc);          if (pldc->fl & LDC_DOC_CANCELLED)             return(bRet);          if (pldc->fl & LDC_CALL_STARTPAGE)             StartPage(hdc);     }      RESETUSERPOLLCOUNT();      PSHARED_GET_VALIDATE(pdca,hdc,DC_TYPE);      BEGIN_BATCH_HDC(hdc,pdca,BatchTypePatBlt,BATCHPATBLT);          //         // check DC to see if call can be batched, all DCs in use         // by the client must have a valid dc_attr         //          pBatch->rop4       = rop;         pBatch->x          = x;         pBatch->y          = y;         pBatch->cx         = cx;         pBatch->cy         = cy;         pBatch->hbr        = pdca->hbrush;         pBatch->TextColor  = (ULONG)pdca->ulForegroundClr  & 0x13ffffff;         pBatch->BackColor  = (ULONG)pdca->ulBackgroundClr  & 0x13ffffff;      COMPLETE_BATCH_COMMAND();      return(TRUE);  UNBATCHED_COMMAND:      return(NtGdiPatBlt(hdc,x,y,cx,cy,rop)); }  /******************************Public*Routine******************************\ * PolyPatBlt * * Arguments: * *  hdc   - dest DC *  rop   - ROP for all patblt elements *  pPoly - pointer to array of PPOLYPATBLT structures *  Count - number of polypatblts *  Mode  - mode for all polypatblts * * Return Value: * *   BOOL Status * \**************************************************************************/  BOOL META WINAPI PolyPatBlt(     HDC         hdc,     DWORD       rop,     PPOLYPATBLT pPoly,     DWORD       Count,     DWORD       Mode     ) {     BOOL bRet = FALSE;      FIXUP_HANDLE(hdc);      if (IS_ALTDC_TYPE(hdc))     {         ULONG Index;         HBRUSH hOld;          for (Index=0;Index<Count;Index++)         {             //             // select =brush, save first to restore             //              if (Index == 0)             {                 hOld = SelectObject(hdc,pPoly[0].BrClr.hbr);             }             else             {                 SelectObject(hdc,pPoly[Index].BrClr.hbr);             }              bRet = PatBlt(hdc,                           pPoly[Index].x,                           pPoly[Index].y,                           pPoly[Index].cx,                           pPoly[Index].cy,                           rop                          );         }          //         // restore brush if needed         //          if (hOld)         {             SelectObject(hdc,hOld);         }     }     else     {         RESETUSERPOLLCOUNT();          if ((Count != 0) && (pPoly != NULL) && (Mode == PPB_BRUSH))         {             //             // size of batched structure             //              USHORT uSize = sizeof(BATCHPOLYPATBLT) +                            Count * sizeof(POLYPATBLT);             PDC_ATTR pdca;              PSHARED_GET_VALIDATE(pdca,hdc,DC_TYPE);              BEGIN_BATCH_HDC_SIZE(hdc,pdca,BatchTypePolyPatBlt,BATCHPOLYPATBLT,uSize);                  pBatch->rop4    = rop;                 pBatch->Count   = Count;                 pBatch->Mode    = Mode;                 pBatch->TextColor  = (ULONG)pdca->ulForegroundClr  & 0x13ffffff;                 pBatch->BackColor  = (ULONG)pdca->ulBackgroundClr  & 0x13ffffff;                  memcpy(&pBatch->ulBuffer[0],pPoly,Count*sizeof(POLYPATBLT));                  //                 // if the first hbr entry is NULL, copy in current hbr so                 // it is remembered.                 //                  if (((PPOLYPATBLT)(&pBatch->ulBuffer[0]))->BrClr.hbr == NULL)                 {                     ((PPOLYPATBLT)(&pBatch->ulBuffer[0]))->BrClr.hbr = pdca->hbrush;                 }                  bRet = TRUE;              COMPLETE_BATCH_COMMAND();          UNBATCHED_COMMAND:              if (!bRet)             {                 bRet = NtGdiPolyPatBlt(hdc,rop,pPoly,Count,Mode);             }         }     }      return(bRet); }  /******************************Public*Routine******************************\ * BitBlt                                                                   * *                                                                          * * Client side stub.  Copies all LDC attributes into the message.           * *                                                                          * *  Wed 12-Jun-1991 01:02:25 -by- Charles Whitmer [chuckwh]                 * * Wrote it.                                                                * \**************************************************************************/  BOOL META WINAPI BitBlt(     HDC hdc,     int x,     int y,     int cx,     int cy,     HDC hdcSrc,     int x1,     int y1,     DWORD rop ) {     BOOL bRet = FALSE;      //     // if this call redueces to PatBlt, then let PatBlt     // do the metafile and/or output.     //      if ((((rop << 2) ^ rop) & 0x00CC0000) == 0)     {         return(PatBlt(hdc,x,y,cx,cy,rop));     }      //     // Src is required by ROP, do bitblt     //      FIXUP_HANDLE(hdc);     FIXUP_HANDLE(hdcSrc);      if (IS_ALTDC_TYPE(hdc))     {         PLDC pldc;          if (IS_METADC16_TYPE(hdc))             return (MF16_BitBlt(hdc,x,y,cx,cy,hdcSrc,x1,y1,rop));          DC_PLDC(hdc,pldc,bRet);          if (pldc->iType == LO_METADC)         {             if (!MF_AnyBitBlt(hdc,x,y,cx,cy,(LPPOINT)NULL,hdcSrc,x1,y1,cx,cy,(HBITMAP)NULL,0,0,rop,EMR_BITBLT))                 return(bRet);         }          if (pldc->fl & LDC_SAP_CALLBACK)             vSAPCallback(pldc);          if (pldc->fl & LDC_DOC_CANCELLED)             return(bRet);          if (pldc->fl & LDC_CALL_STARTPAGE)             StartPage(hdc);     }      RESETUSERPOLLCOUNT();      return(NtGdiBitBlt(hdc,x,y,cx,cy,hdcSrc,x1,y1,rop,(COLORREF)-1)); }  /******************************Public*Routine******************************\ * StretchBlt                                                               * *                                                                          * * Client side stub.  Copies all LDC attributes into the message.           * *                                                                          * *  Wed 12-Jun-1991 01:02:25 -by- Charles Whitmer [chuckwh]                 * * Wrote it.                                                                * \**************************************************************************/  BOOL META WINAPI StretchBlt(     HDC   hdc,     int   x,     int   y,     int   cx,     int   cy,     HDC   hdcSrc,     int   x1,     int   y1,     int   cx1,     int   cy1,     DWORD rop ) {     BOOL bRet = FALSE;     ULONG crBackColor;      FIXUP_HANDLE(hdc);     FIXUP_HANDLEZ(hdcSrc);      if (IS_ALTDC_TYPE(hdc))     {         PLDC pldc;          if (IS_METADC16_TYPE(hdc))             return (MF16_StretchBlt(hdc,x,y,cx,cy,hdcSrc,x1,y1,cx1,cy1,rop));          DC_PLDC(hdc,pldc,bRet);          if (pldc->iType == LO_METADC)         {             if (!MF_AnyBitBlt(hdc,x,y,cx,cy,(LPPOINT)NULL,hdcSrc,x1,y1,cx1,cy1,(HBITMAP)NULL,0,0,rop,EMR_STRETCHBLT))                 return(bRet);         }          if (pldc->fl & LDC_SAP_CALLBACK)             vSAPCallback(pldc);          if (pldc->fl & LDC_DOC_CANCELLED)             return(bRet);          if (pldc->fl & LDC_CALL_STARTPAGE)             StartPage(hdc);     }      RESETUSERPOLLCOUNT();      return(NtGdiStretchBlt(hdc,x,y,cx,cy,hdcSrc,x1,y1,cx1,cy1,rop,(COLORREF)-1));  }


Question: 我真笨啊，各位帮忙看看

引用 5 楼 轻箬笠 的回复:很好奇是什么书，这么低级的错误都有，难道都是抄来抄去的 我估计书没错，这应该是一个习题之类的，就是要考这种地方

这书也太那啥了吧，误导新手的节奏。

很好奇是什么书，这么低级的错误都有，难道都是抄来抄去的

哦哦，谢谢额，不过不是我的错，书中有错

哦哦，谢谢额，不过不是我的错，书中有错

if (a=1) 改成  if (a==1) 不是笨，而是不够细心～ 以后可以养成这样的习惯   if (1==a)

条件错了，那个a = 1是赋值语句，应该是if(a == 1)


Question: 指针

printf("output = %d\n",output ); 这条语句用%x打印看看～ output是4个字节，1， 2， 3， 4分别放在这四个字节里。然后组成一个新的unsigned int数值。

一般的计算机小端存储方式下， int 型数据  #include<stdio.h> typedef unsigned char int8; typedef unsigned int int32; int8 input[5] = {1,2,3,4,5}; int32 hst(int8 *ndsk) {     int32 m = 0;                                // m = 0x00 00 00 00  ndsk= {1,2,3,4,5};     int8 *h = (int8 *)&m;       h[0] = ndsk[0];                            // m = 0x00 00 00 01       h[1] = ndsk[1];                            // m = 0x00 00 02 01       h[2] = ndsk[2];                            // m = 0x00 03 02 01       h[3] = ndsk[3];                            // m = 0x04 03 02 01                   printf("h = %p\n",h);     if(0 == m)     {         printf("m == 0\n");         m = 1;     }     printf("##  m value: %d \n",m);     return m; } int main() {     int32 output;     output = hst(input);     printf("output = %d\n",output );     printf("sizeof(int8) = %ld\n",sizeof(int8));     printf("sizeof(int32) = %ld\n",sizeof(int32));           return 0; }


Question: 【求助】初学链表，在free阶段出玄学错误

又建一楼

引用 4 楼 自信男孩的回复:void song_list_free(){     current = head;     while(current!=NULL){         //放到下面         head = current->next;         free(current->name);         free(current);         current = head;    //放到这里～     }     printf("结束···"); } 噢噢噢我懂了！谢谢老哥！是我傻了

引用 4 楼 自信男孩的回复:void song_list_free(){     current = head;     while(current!=NULL){         //放到下面         head = current->next;         free(current->name);         free(current);         current = head;    //放到这里～     }     printf("结束···"); } 嗯不过这样就可以了我后来也是这么修改的，可是我不太懂这两种写法有啥子区别嘞

引用 3 楼 自信男孩的回复:void song_list_free(){     current = head;     while(current!=NULL){         current = head;         head = current->next;         free(current->name);    //先释放name空间，在释放节点         free(current);     }     printf("结束···"); }  供参考～ 这个样子我试了诶，好像依然不行

重复释放问题 void song_list_free(){     current = head;     while(current!=NULL){         current = head;         head = current->next;         //free(current->next);          free(current);     }     printf("结束···"); }

人工顶贴1.0


Question: 有没有大佬帮忙看一下，是不是少了什么？还是哪里错了，结果出现underfined reference to prtEnCalendar(int)

引用 6 楼 自信男孩的回复:[quote=引用 5 楼 tianyuxuanling 的回复:] [quote=引用 3 楼 自信男孩的回复:]#include <iostream> #include <cstdio> using namespace std;   /*函数声明*/ int isLeap(int year);//判断闰年 int weekOfNewYear(int year);//求元旦是星期几 int FirstWeekday(int year);//求某年某月1日是星期几 void showMonthName(int month);//显示月份的英文名称 void showCNweek(int weekDay);//显示星期几的中文信息 void display(int year);//显示某年元旦是星期几以及是否闰年的信息 void prtMonthCalendar(int year,int month);//打印月历 void prtEnCalendar(int year);//打印英文年历  //主函数（程序执行的入口） int main() {     int year;     cout<<"Please input year: ";     cin>>year;     cout<<"\n";     display(year);//显示当年元旦是星期几以及是否闰年的信息     prtEnCalendar(year);//输出当年英文年历     return 0; }  //判断闰年 int isLeap(int year) {     int y_or_n;     if(year > 0)         //y_or_n = (year%4==0&&year%100!=0||year%400==0);         y_or_n = ((year%4==0&&year%100!=0)||year%400==0);     else             y_or_n =-1;    //-1，表示非法参数错误     return y_or_n ; } //求元旦是星期几 int weekOfNewYear(int year) {     int i,days,m=0;   //days为1900年至(year-1)年份为止的实际总天数,m是此期间的闰年数 for(i=1900;i<year;i++)     //if(isLeap(i))     if(isLeap(year))         m++;     days=(year-1900)*365+m;     return (days+1)%7; } //求某年某月1日是星期几 int FirstWeekday(int year) {     int days=(year-1)*365+(year -1)/4-(year -100)/100+(year-1)/400;     return days%7; } //显示月份的英文名称 void showMonthName(int month) {     int n;     printf("请输入月份数字：");     //scanf("%d,&n");     scanf("%d", &n);     switch(n)     {         case 1:printf("Jan\n");break;         case 2:printf("Feb\n");break;         case 3:printf("Mar\n");break;         case 4:printf("Apr\n");break;         case 5:printf("May\n");break;         case 6:printf("Jun\n");break;         case 7:printf("Jul\n");break;         case 8:printf("Agu\n");break;         case 9:printf("Sep\n");break;         case 10:printf("Oct\n");break;         case 11:printf("Nov\n");break;         case 12:printf("Dec\n");break;     } }  //显示星期几的中文信息 void showCNweek(int weekDay) {     switch(weekDay)     {         case 0: cout<<"星期日"; break;         case 1: cout<<"星期一"; break;         case 2: cout<<"星期二"; break;         case 3: cout<<"星期三"; break;         case 4: cout<<"星期四"; break;         case 5: cout<<"星期五"; break;         case 6: cout<<"星期六"; break; default:cout<<"error";     } } //输出元旦是星期几等信息 void display(int year) { int weekDay; weekDay=weekOfNewYear(year);//获取元旦是星期几(int)     cout<<year<<"年元旦 "; showCNweek(weekDay);  //显示中文的星期几     if(isLeap(year)) cout<<" 闰年";     cout<<"\n";}  供参考～ 语法错误，建议对比代码找出自己的问题。中英文都有～ 两个函数未找到定义～ 那个，麻烦问一下，如果按照这个写的话，那两个没定义的函数该怎么写，我写得老是有问题？[/quote] 先自己谢谢，有问题提出来，或者把问题代码直接贴出来～[/quote] 我已经删了，而且越写问题越多，实在写不出来了

引用 5 楼 tianyuxuanling 的回复:[quote=引用 3 楼 自信男孩的回复:]#include <iostream> #include <cstdio> using namespace std;   /*函数声明*/ int isLeap(int year);//判断闰年 int weekOfNewYear(int year);//求元旦是星期几 int FirstWeekday(int year);//求某年某月1日是星期几 void showMonthName(int month);//显示月份的英文名称 void showCNweek(int weekDay);//显示星期几的中文信息 void display(int year);//显示某年元旦是星期几以及是否闰年的信息 void prtMonthCalendar(int year,int month);//打印月历 void prtEnCalendar(int year);//打印英文年历  //主函数（程序执行的入口） int main() {     int year;     cout<<"Please input year: ";     cin>>year;     cout<<"\n";     display(year);//显示当年元旦是星期几以及是否闰年的信息     prtEnCalendar(year);//输出当年英文年历     return 0; }  //判断闰年 int isLeap(int year) {     int y_or_n;     if(year > 0)         //y_or_n = (year%4==0&&year%100!=0||year%400==0);         y_or_n = ((year%4==0&&year%100!=0)||year%400==0);     else             y_or_n =-1;    //-1，表示非法参数错误     return y_or_n ; } //求元旦是星期几 int weekOfNewYear(int year) {     int i,days,m=0;   //days为1900年至(year-1)年份为止的实际总天数,m是此期间的闰年数 for(i=1900;i<year;i++)     //if(isLeap(i))     if(isLeap(year))         m++;     days=(year-1900)*365+m;     return (days+1)%7; } //求某年某月1日是星期几 int FirstWeekday(int year) {     int days=(year-1)*365+(year -1)/4-(year -100)/100+(year-1)/400;     return days%7; } //显示月份的英文名称 void showMonthName(int month) {     int n;     printf("请输入月份数字：");     //scanf("%d,&n");     scanf("%d", &n);     switch(n)     {         case 1:printf("Jan\n");break;         case 2:printf("Feb\n");break;         case 3:printf("Mar\n");break;         case 4:printf("Apr\n");break;         case 5:printf("May\n");break;         case 6:printf("Jun\n");break;         case 7:printf("Jul\n");break;         case 8:printf("Agu\n");break;         case 9:printf("Sep\n");break;         case 10:printf("Oct\n");break;         case 11:printf("Nov\n");break;         case 12:printf("Dec\n");break;     } }  //显示星期几的中文信息 void showCNweek(int weekDay) {     switch(weekDay)     {         case 0: cout<<"星期日"; break;         case 1: cout<<"星期一"; break;         case 2: cout<<"星期二"; break;         case 3: cout<<"星期三"; break;         case 4: cout<<"星期四"; break;         case 5: cout<<"星期五"; break;         case 6: cout<<"星期六"; break; default:cout<<"error";     } } //输出元旦是星期几等信息 void display(int year) { int weekDay; weekDay=weekOfNewYear(year);//获取元旦是星期几(int)     cout<<year<<"年元旦 "; showCNweek(weekDay);  //显示中文的星期几     if(isLeap(year)) cout<<" 闰年";     cout<<"\n";}  供参考～ 语法错误，建议对比代码找出自己的问题。中英文都有～ 两个函数未找到定义～ 那个，麻烦问一下，如果按照这个写的话，那两个没定义的函数该怎么写，我写得老是有问题？[/quote] 先自己谢谢，有问题提出来，或者把问题代码直接贴出来～

引用 3 楼 自信男孩的回复:#include <iostream> #include <cstdio> using namespace std;   /*函数声明*/ int isLeap(int year);//判断闰年 int weekOfNewYear(int year);//求元旦是星期几 int FirstWeekday(int year);//求某年某月1日是星期几 void showMonthName(int month);//显示月份的英文名称 void showCNweek(int weekDay);//显示星期几的中文信息 void display(int year);//显示某年元旦是星期几以及是否闰年的信息 void prtMonthCalendar(int year,int month);//打印月历 void prtEnCalendar(int year);//打印英文年历  //主函数（程序执行的入口） int main() {     int year;     cout<<"Please input year: ";     cin>>year;     cout<<"\n";     display(year);//显示当年元旦是星期几以及是否闰年的信息     prtEnCalendar(year);//输出当年英文年历     return 0; }  //判断闰年 int isLeap(int year) {     int y_or_n;     if(year > 0)         //y_or_n = (year%4==0&&year%100!=0||year%400==0);         y_or_n = ((year%4==0&&year%100!=0)||year%400==0);     else             y_or_n =-1;    //-1，表示非法参数错误     return y_or_n ; } //求元旦是星期几 int weekOfNewYear(int year) {     int i,days,m=0;   //days为1900年至(year-1)年份为止的实际总天数,m是此期间的闰年数 for(i=1900;i<year;i++)     //if(isLeap(i))     if(isLeap(year))         m++;     days=(year-1900)*365+m;     return (days+1)%7; } //求某年某月1日是星期几 int FirstWeekday(int year) {     int days=(year-1)*365+(year -1)/4-(year -100)/100+(year-1)/400;     return days%7; } //显示月份的英文名称 void showMonthName(int month) {     int n;     printf("请输入月份数字：");     //scanf("%d,&n");     scanf("%d", &n);     switch(n)     {         case 1:printf("Jan\n");break;         case 2:printf("Feb\n");break;         case 3:printf("Mar\n");break;         case 4:printf("Apr\n");break;         case 5:printf("May\n");break;         case 6:printf("Jun\n");break;         case 7:printf("Jul\n");break;         case 8:printf("Agu\n");break;         case 9:printf("Sep\n");break;         case 10:printf("Oct\n");break;         case 11:printf("Nov\n");break;         case 12:printf("Dec\n");break;     } }  //显示星期几的中文信息 void showCNweek(int weekDay) {     switch(weekDay)     {         case 0: cout<<"星期日"; break;         case 1: cout<<"星期一"; break;         case 2: cout<<"星期二"; break;         case 3: cout<<"星期三"; break;         case 4: cout<<"星期四"; break;         case 5: cout<<"星期五"; break;         case 6: cout<<"星期六"; break; default:cout<<"error";     } } //输出元旦是星期几等信息 void display(int year) { int weekDay; weekDay=weekOfNewYear(year);//获取元旦是星期几(int)     cout<<year<<"年元旦 "; showCNweek(weekDay);  //显示中文的星期几     if(isLeap(year)) cout<<" 闰年";     cout<<"\n";}  供参考～ 语法错误，建议对比代码找出自己的问题。中英文都有～ 两个函数未找到定义～ 那个，麻烦问一下，如果按照这个写的话，那两个没定义的函数该怎么写，我写得老是有问题？

该函数你只有最开始的声明，函数定义没有，也就是具体函数实现的代码没有

引用 2 楼 user-3的回复:你这个prtEnCalendar函数的定义在哪个cpp文件中？ 额，好像知道错哪了，多谢了，我先去试试

你这个prtEnCalendar函数的定义在哪个cpp文件中？


Question: 水仙花

#include <stdio.h> #include <math.h> #include <stdlib.h>  void swap(int *a, int *b) {     int t = *a;     *a = *b;     *b = t; }  void get_bit_value(int *arr, int key) {     int i = 0;      while (key) {         arr[i++] = key % 10;         key /= 10;     } }  int main() {     int arr[3], i, m, n, sum, flag;      while (scanf("%d %d", &m, &n) != EOF)     {         flag = 0;         if (m > n)             swap(&m, &n);         if (n >= 1000)             n = 999;         if (m <= 100)             m = 100;          while (m < n) {             get_bit_value(arr, m);             sum = 0;             for (i = 0; i < 3; i++)                 sum += (int)pow(arr[i], 3);             if (sum == m){                 printf("%d\t", m);                 flag = 1;             }             m++;         }         if (flag == 0)             printf("no!\n");         putchar(10);     }      return 0; } 去掉注释的代码～比较干净的代码，供参考～

#include <stdio.h> #include <math.h> #include <stdlib.h>    void swap(int *a, int *b) {     int t = *a;     *a = *b;     *b = t; }  void get_bit_value(int *arr, int key) {     int i = 0;      while (key) {         arr[i++] = key % 10;         key /= 10;     } }  int main() {     //int i,m,n,a,b,c,t;     int arr[3], i, m, n, sum, flag;     while (scanf("%d %d", &m, &n) != EOF)     { #if 0         int p = 0;         int cnt = 0;         if (m>n)         {             t=m;             m=n;             n=t;         } #else         flag = 0;         if (m > n)             swap(&m, &n);         if (n >= 1000)             n = 999;         if (m <= 100)             m = 100; #endif  #if 1         while (m < n) {             get_bit_value(arr, m);             sum = 0;             for (i = 0; i < 3; i++)                 sum += (int)pow(arr[i], 3);             if (sum == m){                 printf("%d\t", m);                 flag = 1;             }             m++;         }         if (flag == 0)             printf("no!\n");         putchar(10); #else         i=m;         while(i<=n)         {             a=i%10;             b=i/10%10;             c=i/100;             if (i==a*a*a+b*b*b+c*c*c)             {                 if(cnt ==0)                 {                     printf("%d",i);                 }else                 {                     printf(" %d",i);                 }                 cnt = 1;                 p=1;             }             i++;         }         if (p==0) printf("no\n");         else printf("\n"); #endif     }      return 0; } 供参考～


Question: 一个想法

推荐阅读《从一到无穷大》

#include <stdio.h> long a=10000; long b; long c=2800; long d; long e; long f[2801]; long g; int main() {     for(;b-c;) f[b++]=a/5; //  while (1) { //      if (0==b-c) break; //      f[b]=a/5; //      b++; //  }      //f[0 - 2800] = 10000/5     for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)           for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); //  while (1) { //      d=0; //      g=c*2; //      if (0==g) break; //      b=c; //      while (1) { //          d+=f[b]*a; //          f[b]=d%--g; //          d/=g--; //          --b; //          if (0==b) break; //          d*=b; //      } //      c-=14; //      printf("%.4d",e+d/a); //      e=d%a; //  }  	return 0; }

这个计算量巨大的，与语言无关

这么说。。。，π还知道了我的银行密码。。。

理论上，pi还包含了整个宇宙的信息！


Question: C语言基础题

该怎样做有效性坚持呢

没有做输入有效性检测，A，N都有取值范围，而你输入后没有做检测，样本给出超出范围的，就会得出无效答案

引用 1 楼 user-2 的回复:有一种操作叫屏幕截图 还有一种叫复制，粘贴代码

有一种操作叫屏幕截图


Question: 大佬帮忙看看程序怎么运行不了，大一新生，不会

现在都在手机上码了吗

运行不了是提示什么错误，建议贴出错误信息～

可以了，花括号弄错了，输入法是中文的

程序可以运行的（gcc）。 你用的什么编译器？  另外，这一行。建议用括号，括起来。 实际项目中，这么写是很不规范的，静态检查时，就被要求改掉的。  ans=a>1&&b++>1.5;

a > 1  -> TRUE b ++ > 1.5 -> FALSE  所以ans的值是0，最后打印出来的就是0

自己敲敲，运行一下不就行了 多练习，用gdb 跟跟，想进步就得自己多练，多好的学习机会，主要是考运算符优先级把，对着教材一点点对，看那个优先级高。