Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: while(1)的循环问题求助

回复:
user: user-1
content: #include<stdio.h> int main(void) {     int i = 0, j = 0;     char ch;      printf("Please input a string end by '#':\n");     while (1) {         ch = getchar();         if (ch == '#') break;         if (ch == '.') {             putchar('!');             i++;         } else if (ch == '!') {             putchar('!');             putchar('!');             j++;         } else putchar(ch);     }     printf("\n");     printf("'.' times=%d\n", i);     printf("'!' times=%d\n", j);     return 0; } //输出Please input a string end by '#': //输入abc.!# //输出abc!!! //输出'.' times=1 //输出'!' times=1 //输出

user: user-0
content: 没少，后面的补上了。但我就是出不了结果，应该是编译器问题

user: user-1
content: while循环中你少了ch=getchar();

user: user-2
content: 很好奇楼主的问题是什么？我跑了一遍感觉没问题啊   引用 5 楼 老犯錯誤 的回复:不是很明白你说的，ch用int类型定义？其他步骤跟你是一样的。难道我下了个盗版的编译器？有人能帮忙运行一下吗 #include<stdio.h>  int main(void) { 	int i = 0, j = 0; 	char ch;  	printf("Please input a string end by '#':\n"); 	while (1) 	{ 		ch = getchar(); 		if (ch != '#') 		{ 			if (ch == '.') 			{ 				putchar('!'); 				i++; 			} 			else if (ch == '!') 			{ 				putchar('!'); 				putchar('!'); 				j++; 			} 			else 				putchar(ch); 		} 		if (ch == '#') 			break; 	} 	printf("\n"); 	printf("'.' times=%d\n", i); 	printf("'!' times=%d\n", j); 	return 0; }

user: user-0
content: 引用 4 楼 自信男孩 的回复:while里面不是有break；吗？   int ch; //定义为int类型。 while (1) {     ch = getchar();     if (ch == '#')         break; }  不是很明白你说的，ch用int类型定义？其他步骤跟你是一样的。难道我下了个盗版的编译器？有人能帮忙运行一下吗 #include<stdio.h>  int main(void) { 	int i = 0, j = 0; 	char ch;  	printf("Please input a string end by '#':\n"); 	while (1) 	{ 		ch = getchar(); 		if (ch != '#') 		{ 			if (ch == '.') 			{ 				putchar('!'); 				i++; 			} 			else if (ch == '!') 			{ 				putchar('!'); 				putchar('!'); 				j++; 			} 			else 				putchar(ch); 		} 		if (ch == '#') 			break; 	} 	printf("\n"); 	printf("'.' times=%d\n", i); 	printf("'!' times=%d\n", j); 	return 0; }

user: user-3
content: while里面不是有break；吗？   int ch; //定义为int类型。 while (1) {     ch = getchar();     if (ch == '#')         break; }

user: user-0
content: 重新放张图

user: user-2
content: while(1)语句块为啥没有ch赋值的操作。没有赋值就是乱码

user: user-0
content: 截错图了，while(1)下面是一个ch=getchar();

user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-0
content: 此贴终结，新建了个项目可以运行了。谢谢大家

user: user-4
content: 你应该写：     while ((ch = getchar()) != '#')       ch == '.' ? putchar('!'), i++ :        ch == '!' ? printf("!!"), j++ : putchar(ch);
user-0 提问: 关于打开文本文档时ASCII码转成二进制码不能理解

回复:
user: user-1
content: 文本文件是以二进制数值存储的，一个二进制数就是一个字符（只以ASCII码为例），打开文件的软件将每个二进制数对应的ASCII码显示或打印出来。所以这里是将存储的二进制数转换成ASCII码显示或打印出来让我们看明白。所有的存储的文件都是以二进制数值存储的。

user: user-0
content: 引用 1 楼 赵4老师的回复:电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 您的意思是他是由二进制比如01000001表示A,就是从前者二进制转成A，而不是我理解的10000那个由ASCII码五字节变成二进制吗四字节吗？

user: user-0
content: 您的意思是他是由二进制比如01000001表示A,就是从前者二进制转成A，而不是我理解的10000那个由ASCII码五字节变成二进制吗四字节吗？

user: user-2
content: 电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-3
content: 数据在计算机里都是二进制形式存放的，而我们能看懂的ASCII只是数据的存放形式不一样。对于计算机而言，它只 认识二进制数。

user: user-4
content: 存在电脑上的是二进制的数。读的方式像是个转换规则， 将二进制按照这个码表的规则转化显示出来给人， 人能看看得懂。  文本中以ascII 码读出来为10000 的块内存 已经不是数字了 而是 '1''0''0''0''0'五个字符

user: user-5
content: 存放到硬盘上都是二进制，会用UltraEdit  16进制看文件，你再回来讨论这个问题比较好。
user-0 提问: paho_mqtt 客户端源码例程部分使用交叉编译工具不通过的问题

回复:
user: user-0
content: 嗯，问题解决了，我使用cmake 将编译器换成自己的交叉编译器重新生成了库！

user: user-1
content: paho这个依赖库找不到，有可能是路径配置问题，也有可能没配置生成好的

user: user-1
content: 你要看-L参数指定的路径啊，跟你找到的目录是不是吻合，虽然是用makefile，但你也要知道gcc参数的含义，最好还是把关键参数都了解一遍

user: user-0
content: 有的，但还是会报错

user: user-1
content: 就是这个“-lpaho_mqtt3cs”,要不就是libpaho_mqtt3cs.a文件，要不就是paho_mqtt3cs.so，在你的所谓output目录里面到底有没有

user: user-0
content: 引用 1 楼 user-1的回复:paho这个依赖库找不到，有可能是路径配置问题，也有可能没配置生成好的 你好，你可以详细讲解一下吗？我把生成的库放在了output文件夹下，然后编译的时候是优先去这个文件夹中寻找，但是就一直会报这个错误，
user-0 提问: C++ 问题求助

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

user: user-2
content: #include <stdio.h>  int main() {     //int a[5]={0,0,0,0,0};     int a[5]={0};     long long n,m;     //while(scanf("%d%d",&m,&n)!=EOF && m!=0 && n!=0)     while(scanf("%lld%lld", &m, &n) != EOF && m != 0 && n!=0)     {         if(m<=6 && n>=6) a[0]=6;         if(m<=28 && n>=28) a[1]=28;         if(m<=496 && n>=496) a[2]=496;         if(m<=8128 && n>=8128) a[3]=8128;         if(m<=33550336 && n>=33550336) a[4]=33550336;         int d=0;         for(int i=0;i<5;i++)         {             if(a[i]!=0)             {                 printf("%d", a[i]);                 d=1;                 int c=0;                 for(int j=i+1;j<5;j++)                 {                     if(a[j]!=0)                     {                         printf(" ");                         c=1;                         break;                     }                 }                 if(c==0)                     printf("\n");             }         }         if(d==0) printf("No\n");     } }  供参考～

user: user-3
content: long long是%lld while(scanf("%lld%lld",&m,&n)!=EOF && m!=0 && n!=0)
user-0 提问: 关于算术溢出的问题

回复:
user: user-1
content: 换个编译器就没问题。推荐 codeblocks

user: user-2
content: 没碰到过类似的情况，不过建议楼主用debug win32模式。

user: user-3
content: printf("%f",(float)(b-a));

user: user-4
content: 目前我认为可以忽略这种提示。VS2019目前还不能算是一个成熟的成品。 https://docs.microsoft.com/zh-cn/visualstudio/code-quality/c26451?view=vs-2019

user: user-5
content: 应该是跟你选择x64配置项有关
user-0 提问: 中缀转后缀时，用栈处理运算符，处理方法步骤，以及运算符优先级

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：楼主到底想说什么？如果是想说算法，百度一下一大堆，如果是想说控件，不论C#还是JAVA都有现成的。我在给我写日志自己以后好看

user: user-1
content: 楼主到底想说什么？如果是想说算法，百度一下一大堆，如果是想说控件，不论C#还是JAVA都有现成的。
user-0 提问: 疑难问题

回复:
user: user-1
content: 那就是保存的地方有问题呗，你是存到堆上了，还是存到栈上了 如果不懂堆栈，那么就问你保存到全局了还是保存在局部作用域了？ 如果保存到数据库那么就得指定数据库语句是否正确执行了。 得确定两件事情 1，是否正确保存 2，拿到的保存信息是否正确

user: user-2
content: 请帖代码。靠猜是不可能猜到的

user: user-3
content: 请判断每个函数调用的返回值。

user: user-4
content: 这样提问，真的世界级难题，没有人能答上
user-0 提问: c语言疑惑

回复:
user: user-1
content: 调用函数是参数的传递，实际是把实参拷贝了一份传递给函数。所以函数里面再怎么改也只是改的函数中的a,b。跟主函数中的ab没关系。 如果要改主函数中的值，就传地址。通过指针来改。

user: user-2
content: 主函数中改成 swap(&a,&b);  swap函数整个修改： void swap(int *a,int *b){     int t = *a;     *a = *b;     *b = t; }

user: user-3
content: 准确地说，C语言中都是传值的，不能返回结果。哪怕是传指针，指针本身也不能返回，但是可以通过指针改变所指向的变量的值

user: user-4
content: 在main函数里，a和b是实参，在swap函数里，a和b是形参，参数传递只能从实参传到形参，不能从形参传到实参

user: user-5
content: 因为swap中的a,b是局部变量，swap的a, b交换只是改变了swap中的a, b值并没有改变main函数里的a, b值； 参数传递其实是值传递，传给swap的值，即swap局部变量a, b接收了这两个值。
user-0 提问: LeetCode 506 输出乱码问题

回复:
user: user-1
content: 栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……

user: user-1
content: /**  * Note: The returned array must be malloced, assume caller calls free().  */ char ** findRelativeRanks(int* nums, int numsSize, int* returnSize){     static char first[11] = "Gold Medal";     static char second[13] = "Silver Medal";     static char third[13] = "Bronze Medal";     static char mingci[10+5];      char ** ret = (char **)malloc(sizeof(char *)*numsSize);     //建立标记数组，表示该名词有没有被标记过     //1-标记过，0-没有被标记过     int * ptr = (int *)malloc(sizeof(int)*numsSize);     memset(ptr,0,sizeof(int)*numsSize);     //找出前三名的下标，在ret数组里授予相应的奖牌     for(int i = 0;i<3;i++){         int max_index = -1;         int max = INT_MIN;         int index = -1;         for(int j =0;j<numsSize;j++){             if(nums[j] >= max && ptr[j] == 0){                 index = j;                 max = nums[j];             }         }         ptr[index] = 1;         printf("第%d次搜索，最高名次的下标是%d\n",i,index);          if(i ==  0 )             ret[index] = first;         if( i == 1 )             ret[index] = second;         if(i ==  2)             ret[index] = third;         printf("ret[%d] = %s\n",index,ret[index]);         // printf("index = %d,ret = %s\n",index,ret[index]);      }     printf("***");     //对4~剩下的进行排名     char *p=(char *)&mingci[0];     int L;     for(int i = 0;i<numsSize-3;i++){         int max_index = -1;         int max = INT_MIN;         int index = -1;         for(int j =0;j<numsSize;j++){             if(nums[j] >= max && ptr[j] == 0){                 index = j;                 max = nums[j];             }         }         ptr[index] = 1;         printf("第%d次搜索，最高名次的下标是%d\n",i,index);          char mingci[2] ="";         L=sprintf(p,"%d",4+i);         ret[index] = p;         p+=L+1;         if (p-(char *)&mingci[0]>10) {             printf("Too many times!\n");             exit(1);         }         printf("ret[%d] = %s\n",index,ret[index]);         // printf("%c\n",'4'+i);         // printf("index = %d,ret = %s\n",index,ret[index]);     }     // printf("numsSize = %d\n",numsSize);      *returnSize = numsSize;     return ret; }

user: user-0
content: 引用 3 楼 轻箬笠 的回复:楼主的资源这么紧张吗？ char first[11] = "Gold Medal";     char second[13] = "Silver Medal";     char third[13] = "Bronze Medal"; 改成 char first[32] = "Gold Medal";     char second[32] = "Silver Medal";     char third[32] = "Bronze Medal";  因为想空间最小呀，这里改不改问题都不大吧，而且改了之后也是一样的问题，输出还是乱码

user: user-2
content: 楼主的资源这么紧张吗？ char first[11] = "Gold Medal";     char second[13] = "Silver Medal";     char third[13] = "Bronze Medal"; 改成 char first[32] = "Gold Medal";     char second[32] = "Silver Medal";     char third[32] = "Bronze Medal";

user: user-0
content: 引用 1 楼 自信男孩 的回复:出现乱码很可能是字符串没有以'\0'结束，建议查一下你的字符串是否都用'\0'结束了。  请看代码，前三名的字符串是直接赋值的，后面的都在第54行给了'\0'

user: user-3
content: 出现乱码很可能是字符串没有以'\0'结束，建议查一下你的字符串是否都用'\0'结束了。
user-0 提问: xp，c

回复:
user: user-1
content: VC6EN https://pan.baidu.com/s/1_t4HPLJZCdiIaJKecguK_A

user: user-2
content: 引用 2 楼 Fick dich 的回复:引用 1 楼 zjq9931 的回复：很多啊，不知你遇到了什么问题？我想下一个 VC6,VS2003 -vs2008 其实是主要是库，对xp的兼容，还有函数，确认函数是否能在xp上使用。只要看MSDN，就好了。

user: user-3
content: vs就兼容xp啊，不过需要安装xp兼容组件

user: user-0
content: 引用 1 楼 zjq9931 的回复：很多啊，不知你遇到了什么问题？我想下一个
user-0 提问: token "." is not valid in preprocessor expressions

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-2
content: 宏定义就是等价替换，你把这个宏定义等价替换到使用的地方看看。
user-0 提问: C语言数组学习的困惑，望各位大神解答

回复:
user: user-1
content: #include<stdio.h> int main(void) {     int digit_seen[10] = { 0 };//, repeated_digit[10] = { 0 };     int digit,i=0, flag = 0;//j=0;     long n;     printf("Enter a number: ");     //scanf_s("%ld", &n);     scanf("%ld", &n);     while (n > 0) {         digit_seen[n % 10]++;         n /= 10;         /*         digit = n % 10;         digit_seen[digit] = digit;         if (digit_seen[digit] == digit)         {             repeated_digit[j] = digit;             j++ ;         }         n /=10;         */     }      for (i = 0; i < 10; i++)         if (digit_seen[i] > 1) {             if (flag == 0)                 printf("Repeated digit\n");             printf("%d ", i);             flag = 1;         }     if (flag == 0)         printf("No repeated digit\n");     else         putchar(10);  /*     if (j > 0)     {         printf("Repeated digit\n");         for (i = 0; i <= j; i++)         {             printf(" %d", repeated_digit[j]);         }     }     else         printf("No repeated digit\n"); */     return 0; } 供参考 一个数组就可以完成了！

user: user-2
content: 1. 你的算法不对，if循环永远成立 2. 最后输出的时候应该是printf(" %d", repeated_digit[i]);
user-0 提问: visual stdio的用法求助！

回复:
user: user-1
content: 我就只用一个控制台项目test，项目中配置源代码为test.cpp,生成test.exe 以后每次都照以下步骤操作：  copy /y xxx.cpp test.cpp 编译链接调试test.exe copy /y test.exe xxx.exe

user: user-2
content: 引用 3 楼 Italink 的回复:[quote=引用 2 楼 老犯錯誤 的回复:] 那每次编写一个新程序倒要重新建立一个win32控制台吗（也不知道是不是这样表述） 是这样的，难道你不觉得所有代码放在一个项目中很乱吗？[/quote] 一般是新建-项目-空项目（c++）

user: user-3
content: 引用 2 楼 老犯錯誤 的回复:那每次编写一个新程序倒要重新建立一个win32控制台吗（也不知道是不是这样表述） 差不多就是你想的那样。每次写新程序，都要新建项目。楼主可以在同一个解决方案下面建多个项目

user: user-2
content: 引用 2 楼 老犯錯誤 的回复:那每次编写一个新程序倒要重新建立一个win32控制台吗（也不知道是不是这样表述） 是这样的，难道你不觉得所有代码放在一个项目中很乱吗？

user: user-0
content: 那每次编写一个新程序倒要重新建立一个win32控制台吗（也不知道是不是这样表述）

user: user-4
content: vc中有一个项目或解决方案的概念，具体来说你这里项目有四个cpp文件，其他CPP文件中也有main函数，就是这个原因。解决：从项目中移除其他cpp

user: user-4
content: 引用 2 楼 老犯錯誤 的回复:那每次编写一个新程序倒要重新建立一个win32控制台吗（也不知道是不是这样表述） 每次把新的CPP加入项目并把不要的CPP移出项目就可以了
user-0 提问: devc++循环体内a[k++]调试是k变量的值乱变问题

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:建议贴源码，贴图片看不全代码～ 服了，贴了三张图，全乱掉了

user: user-1
content: 建议贴源码，贴图片看不全代码～
user-0 提问: c primer plus 294页

回复:
user: user-0
content: 引用 3 楼 user-1 的回复：又看到楼主的帖子，还没搞明白呀？  结合性指的是，在一个表达式里面的优先结合次序，就像楼主所说的，*和++的 优先级是一样的，那么这时候就需要结合性了判断一个表达式是如何进行运算的。 楼主所说的*start++这个表达式，它到底指的是*(start++)还是(*start)++，这就是由结合性来决定的，因为++这个操作符是从右至左的，那么它就是表示*(start++)。但因为start++这个表达式的值是start，所以这个表达式的取值就是*start，从而total+=*start++，就相当于是total+=*start之后start++。结合性指的是操作符的结合次序，并不是运算的次序，就是说，total+=*start++不是start++之后再total+=*start 同样的，因为++start表达式的值是start+1，所以total+=*++start就相当于total+=*(start+1)之后再start++  不知道我说的你明白了吗?明白了，谢谢你

user: user-1
content: 又看到楼主的帖子，还没搞明白呀？  结合性指的是，在一个表达式里面的优先结合次序，就像楼主所说的，*和++的 优先级是一样的，那么这时候就需要结合性了判断一个表达式是如何进行运算的。 楼主所说的*start++这个表达式，它到底指的是*(start++)还是(*start)++，这就是由结合性来决定的，因为++这个操作符是从右至左的，那么它就是表示*(start++)。但因为start++这个表达式的值是start，所以这个表达式的取值就是*start，从而total+=*start++，就相当于是total+=*start之后start++。结合性指的是操作符的结合次序，并不是运算的次序，就是说，total+=*start++不是start++之后再total+=*start 同样的，因为++start表达式的值是start+1，所以total+=*++start就相当于total+=*(start+1)之后再start++  不知道我说的你明白了吗?

user: user-1
content: start++表达式的值是start，++start表达式的值是start+1

user: user-0
content: 有人回答吗？
user-0 提问: 纯小白求助，如何做出一个能实际应用的软件

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

user: user-0
content: 引用 11 楼 user-6的回复:[quote=引用 10 楼 weixin_45486151的回复:][quote=引用 4 楼 user-6的回复:][quote=引用 楼主 weixin_45486151的回复:]我是数学专业的开学大二，计算机知识仅限于学完了c语言程序设计这门课程。今天英语四级出分，需要准考证号，但是我给忘记了...但是前几位的大家都一样，所以我就想用c设计了一个枚举程序。让我很困惑的是我如何一次次的把数据上传到那个成绩查询网站上呢。 使用爬虫提交表单，应该可以吧[/quote] 您好可以细说一下不，蟹蟹啦[/quote] 要学的多喽，放弃吧，不的话，Python爬虫，不过大部分网站都要反爬手段，比如验证码，那么你需要去学Python的ocr文字识别，还要训练模型，只会基础的c是没指望了[/quote] 现在已经接触了入门的机器学习，现在已经可以能应用那种识别纯数字的文本了

user: user-2
content: 引用 8 楼 weixin_45486151 的回复:这个成绩没什么，因为过一段时间学校教务系统可以查看，主要是对这个方法很感兴趣。感觉现在学的编程对解决事情没什么用啊 还是有用的，比如“拼夕夕抢优惠商品”， 你懂的

user: user-0
content: 引用 3 楼 轻箬笠的回复:我觉得够呛，就算有办法穷举，查分网站肯定也有次数限制的，否则被攻击了咋办。 类似楼主这种，直接问辅导员是最好的办法，别问我咋知道的。毕业去打印六级成绩，问我要准考证号，我就是问的导员，让导员帮忙拿的，因为学校有留档的，只需要学号就可以查到了。 这个成绩没什么，因为过一段时间学校教务系统可以查看，主要是对这个方法很感兴趣。感觉现在学的编程对解决事情没什么用啊

user: user-3
content: 引用 6 楼 自信男孩 的回复:[quote=引用 2 楼 liups 的回复:] [quote=引用 1 楼 自信男孩 的回复:] 你写的这个应用程序应该是能够访问网站的后台，比如数据库，这样你才能与真正的数据交互。 不会是来搞笑的吧，这么多专家分就给这样的答案！[/quote] 你给个不搞笑的答案吧[/quote]楼上多人已给

user: user-4
content: 引用 2 楼 liups 的回复:[quote=引用 1 楼 自信男孩 的回复:] 你写的这个应用程序应该是能够访问网站的后台，比如数据库，这样你才能与真正的数据交互。 不会是来搞笑的吧，这么多专家分就给这样的答案！[/quote] 你给个不搞笑的答案吧

user: user-5
content: 我同意轻箬笠的观点，就像Q.Q密码输错了几次之后要输入验证码一样，网站会采取一些措施来验证你是否为机器人.

user: user-6
content: 引用 楼主 weixin_45486151的回复:我是数学专业的开学大二，计算机知识仅限于学完了c语言程序设计这门课程。今天英语四级出分，需要准考证号，但是我给忘记了...但是前几位的大家都一样，所以我就想用c设计了一个枚举程序。让我很困惑的是我如何一次次的把数据上传到那个成绩查询网站上呢。 使用爬虫提交表单，应该可以吧

user: user-6
content: 引用 10 楼 weixin_45486151的回复:[quote=引用 4 楼 user-6的回复:][quote=引用 楼主 weixin_45486151的回复:]我是数学专业的开学大二，计算机知识仅限于学完了c语言程序设计这门课程。今天英语四级出分，需要准考证号，但是我给忘记了...但是前几位的大家都一样，所以我就想用c设计了一个枚举程序。让我很困惑的是我如何一次次的把数据上传到那个成绩查询网站上呢。 使用爬虫提交表单，应该可以吧[/quote] 您好可以细说一下不，蟹蟹啦[/quote] 要学的多喽，放弃吧，不的话，Python爬虫，不过大部分网站都要反爬手段，比如验证码，那么你需要去学Python的ocr文字识别，还要训练模型，只会基础的c是没指望了

user: user-2
content: 我觉得够呛，就算有办法穷举，查分网站肯定也有次数限制的，否则被攻击了咋办。 类似楼主这种，直接问辅导员是最好的办法，别问我咋知道的。毕业去打印六级成绩，问我要准考证号，我就是问的导员，让导员帮忙拿的，因为学校有留档的，只需要学号就可以查到了。

user: user-0
content: 引用 4 楼 user-6的回复:[quote=引用 楼主 weixin_45486151的回复:]我是数学专业的开学大二，计算机知识仅限于学完了c语言程序设计这门课程。今天英语四级出分，需要准考证号，但是我给忘记了...但是前几位的大家都一样，所以我就想用c设计了一个枚举程序。让我很困惑的是我如何一次次的把数据上传到那个成绩查询网站上呢。 使用爬虫提交表单，应该可以吧[/quote] 您好可以细说一下不，蟹蟹啦

user: user-3
content: 引用 1 楼 自信男孩 的回复:你写的这个应用程序应该是能够访问网站的后台，比如数据库，这样你才能与真正的数据交互。 不会是来搞笑的吧，这么多专家分就给这样的答案！

user: user-4
content: 你写的这个应用程序应该是能够访问网站的后台，比如数据库，这样你才能与真正的数据交互。
user-0 提问: c primer plus第294页

回复:
user: user-1
content: 就是后缀自加在本行或者本表达式中，值按原值；下一行或者以后用到该变量的表达式按该变量加1处理；这样*p++就是首先P自增了，但是当前表达式的P++仍按P计算，下一行再有*p，此时的P按P原值+1处理。

user: user-2
content: 引用 11 楼 马振宇 的回复:引用 10 楼 lin5161678 的回复：[quote=引用 9 楼 自信男孩 的回复:] [quote=引用 6 楼 lin5161678 的回复:] [quote=引用 5 楼 自信男孩 的回复:] [quote=引用 2 楼 马振宇 的回复:] [quote=引用 1 楼 自信男孩 的回复：]*start++;是start++现结合，那么由于后置自增，所以start++成为一个整体，先将*(start++)赋值个total，然后再start += 1;还是没明白，他说start先求值是什么意思呢？ 就是先计算start指向的内存的内容，然后赋值给total，然后在计算start指针变量的偏移[/quote]start指针什么时候偏移都可以  *操作的不是 start  [/quote] 你这么说我也不明白你要表达的了[/quote] *操作之前 start 可以已经完成+1  但*操作的依然是start+1之前的地址  两者没有必然联系  没有必须先完成取值 最后才执行 +1[/quote]有什么依据吗？很难理解[/quote] 依据是 *操作前后没有序列点 标准没要求副作用必须完成

user: user-0
content: 引用 10 楼 lin5161678 的回复：引用 9 楼 自信男孩 的回复:[quote=引用 6 楼 lin5161678 的回复:] [quote=引用 5 楼 自信男孩 的回复:] [quote=引用 2 楼 马振宇 的回复:] [quote=引用 1 楼 自信男孩 的回复：]*start++;是start++现结合，那么由于后置自增，所以start++成为一个整体，先将*(start++)赋值个total，然后再start += 1;还是没明白，他说start先求值是什么意思呢？ 就是先计算start指向的内存的内容，然后赋值给total，然后在计算start指针变量的偏移[/quote]start指针什么时候偏移都可以  *操作的不是 start  [/quote] 你这么说我也不明白你要表达的了[/quote] *操作之前 start 可以已经完成+1  但*操作的依然是start+1之前的地址  两者没有必然联系  没有必须先完成取值 最后才执行 +1[/quote]有什么依据吗？很难理解

user: user-2
content: 引用 9 楼 自信男孩 的回复:引用 6 楼 lin5161678 的回复:[quote=引用 5 楼 自信男孩 的回复:] [quote=引用 2 楼 马振宇 的回复:] [quote=引用 1 楼 自信男孩 的回复：]*start++;是start++现结合，那么由于后置自增，所以start++成为一个整体，先将*(start++)赋值个total，然后再start += 1;还是没明白，他说start先求值是什么意思呢？ 就是先计算start指向的内存的内容，然后赋值给total，然后在计算start指针变量的偏移[/quote]start指针什么时候偏移都可以  *操作的不是 start  [/quote] 你这么说我也不明白你要表达的了[/quote] *操作之前 start 可以已经完成+1  但*操作的依然是start+1之前的地址  两者没有必然联系  没有必须先完成取值 最后才执行 +1

user: user-3
content: 引用 6 楼 lin5161678 的回复:引用 5 楼 自信男孩 的回复:[quote=引用 2 楼 马振宇 的回复:] [quote=引用 1 楼 自信男孩 的回复：]*start++;是start++现结合，那么由于后置自增，所以start++成为一个整体，先将*(start++)赋值个total，然后再start += 1;还是没明白，他说start先求值是什么意思呢？ 就是先计算start指向的内存的内容，然后赋值给total，然后在计算start指针变量的偏移[/quote]start指针什么时候偏移都可以  *操作的不是 start  [/quote] 你这么说我也不明白你要表达的了

user: user-0
content: 哪位大神能帮忙看看

user: user-0
content: 引用 3 楼 lin5161678 的回复：start++ 先求值  问题是 这个表达式求值结果就是start  而不是start+1 那是start本身的值  和 * 操作没关系start++求值结果还是start？更迷糊了

user: user-2
content: 引用 5 楼 自信男孩 的回复:引用 2 楼 马振宇 的回复:[quote=引用 1 楼 自信男孩 的回复：]*start++;是start++现结合，那么由于后置自增，所以start++成为一个整体，先将*(start++)赋值个total，然后再start += 1;还是没明白，他说start先求值是什么意思呢？ 就是先计算start指向的内存的内容，然后赋值给total，然后在计算start指针变量的偏移[/quote]start指针什么时候偏移都可以  *操作的不是 start

user: user-3
content: 引用 2 楼 马振宇 的回复:引用 1 楼 自信男孩 的回复：*start++;是start++现结合，那么由于后置自增，所以start++成为一个整体，先将*(start++)赋值个total，然后再start += 1;还是没明白，他说start先求值是什么意思呢？ 就是先计算start指向的内存的内容，然后赋值给total，然后在计算start指针变量的偏移

user: user-2
content: 分清楚表达式的值 和 表达式的操作数的值  这是2个不同概念

user: user-2
content: start++ 先求值  问题是 这个表达式求值结果就是start  而不是start+1 那是start本身的值  和 * 操作没关系

user: user-0
content: 引用 1 楼 自信男孩 的回复：*start++;是start++现结合，那么由于后置自增，所以start++成为一个整体，先将*(start++)赋值个total，然后再start += 1;还是没明白，他说start先求值是什么意思呢？

user: user-3
content: *start++;是start++现结合，那么由于后置自增，所以start++成为一个整体，先将*(start++)赋值个total，然后再start += 1;
user-0 提问: 小白求问，如果在字符串中判断到特定符号然后删除

回复:
user: user-1
content: 楼上方法不错

user: user-2
content: 用strtok啊。  char data[1024]; 初始化data char *p = strtok(data, "*～+=%$"); char data2[1024] = {0}; while(p) { memcpy(data2 + strlen(data2), p, strlen(p); p = strtok(NULL, "*～+=%$"); }

user: user-3
content: 建一个256字符的替换表

user: user-4
content: 引用 3 楼 weixin_43925997 的回复:[quote=引用 1 楼 自信男孩的回复:]反过来，判断非*~+=%$等符号之外的用空格替换 switch (ch) {     case '*'         xxx;         break;     ...     default:     break; } 伪代码～ 代码已经做别的处理了，做了中英文识别，小写转大写，然后又让删除特定符号，有十几个，不知道这么加进去好看了，if里面可以家很长很长，但是太难看了[/quote] 你把要删除的字符放到一个数组里，每次判断都从数组里查询，这样就不会if很长了。

user: user-0
content: 引用 1 楼 自信男孩的回复:反过来，判断非*~+=%$等符号之外的用空格替换 switch (ch) {     case '*'         xxx;         break;     ...     default:     break; } 伪代码～ 代码已经做别的处理了，做了中英文识别，小写转大写，然后又让删除特定符号，有十几个，不知道这么加进去好看了，if里面可以家很长很长，但是太难看了

user: user-5
content: 正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸)http://download.csdn.net/detail/zhao4zhong1/1808549 #include <iostream> #include <string> #include <regex> using namespace std; int main() {     string str("This expression could match from A and beyond. [ expression  express ]");     string rs = "exp\\w*";  // 正则字符串，exp开始的单词     cout << str << endl;      regex expression(rs); // 字符串传递给构造函数，建立正则表达式  // regex_match 判断一个正则表达式(参数 e)是否匹配整个字符序列 str. 它主要用于验证文本。 // 注意，这个正则表达式必须匹配被分析串的全部，否则函数返回 false. // 如果整个序列被成功匹配，regex_match 返回 True.     bool ret = regex_match(str, expression);     if (ret)         cout << "可以匹配整个文本" << endl;     else         cout << "不能匹配整个文本" << endl;  // regex_search 类似于 regex_match, 但它不要求整个字符序列完全匹配。 // 你可以用 regex_search 来查找输入中的一个子序列，该子序列匹配正则表达式 e.     ret = regex_search(str, expression);     if (ret)         cout << "能够搜索到 " << rs << endl;     else         cout << "不能搜索" << endl;  // regex_replace 在整个字符序列中查找正则表达式e的所有匹配。 // 这个算法每次成功匹配后，就根据参数fmt对匹配字符串进行格式化。 // 缺省情况下，不匹配的文本不会被修改，即文本会被输出但没有改变。      str = regex_replace(str, expression, string("表达式")); // VC2010或者TR1注意：这里第三个参数要用string()转换 // http://www.johndcook.com/cpp_regex.html // started with C++ TR1 regular expressions     cout << str << endl;     return 0; } //This expression could match from A and beyond. [ expression  express ] //不能匹配整个文本 //能够搜索到 exp\w* //This 表达式 could match from A and beyond. [ 表达式  表达式 ]

user: user-4
content: 反过来，判断非*~+=%$等符号之外的用空格替换 switch (ch) {     case '*'         xxx;         break;     ...     default:     break; } 伪代码～
user-0 提问: 好像遇到了点问题？

回复:
user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-0
content: 最后一个数字应该是0.....是零的话也输出不了

user: user-2
content: 输入一个字母就退出while循环了。即输入一个非数字的字符（当然空格和换行也是不行的）。
user-0 提问: devc++调试自增变量会乱变的问题

回复:
user: user-1
content: 没用过dev. 想说一句vs是宇宙第一编译器

user: user-2
content: 这个软件不行，我也这样

user: user-3
content: 从你的表述中看到应该是你那边编译器的问题喽！换个编译器。  验证代码没问题只要是给定指定输入能达到期望的输出就可以了。 看一下你第一张图就是个大位数加法的算法，再加你的这个结构体定义。 我好像在《程序员的数学思维》这本书上有看到过。

user: user-4
content: http://blog.csdn.net/zhao4zhong1/article/details/53078924 老司机找bug的十年心路历程

user: user-0
content: 引用 6 楼 自信男孩的回复:[quote=引用 5 楼 weixin_44484668 的回复:] int main(){ 	int a[10]={0}, k=0; 	while(k<10){ 		a[k++]=5; 	} 	for(int i=0; i<10; i++){ 		printf("%d ", a[i]); 	} 	return 0; }  比如这个，我想让a数组10个元素都是5，直接编译输出是对的，经过调试确实错的(调试时k的取值会不断变化，第一次放上去是1？不应该是0吗？第一次直接变为3了。可我没有让循环进行下去啊，只是单纯的想查看k的值) 第一次k是0，其实是a[k++] = 5;可以分解为：a[k] = 5; k++;运行也是这么分解运行的。[/quote] 你说的这个步骤我是明白的，先让a[k取值]5，然后k++。调试的时候我放在k上，k会不停地变化怎么解？假如我的最终结果不正确，我想看看哪里出错了，放到k上，k变一个数，再次放k又变。比如i=0时，第一次k是0，我在放到k上，k变成了1，那么i=0时，就成了a[1]=5，这样最后成了a[10]=5

user: user-0
content: 引用 6 楼 自信男孩的回复:[quote=引用 5 楼 weixin_44484668 的回复:] int main(){ 	int a[10]={0}, k=0; 	while(k<10){ 		a[k++]=5; 	} 	for(int i=0; i<10; i++){ 		printf("%d ", a[i]); 	} 	return 0; }  比如这个，我想让a数组10个元素都是5，直接编译输出是对的，经过调试确实错的(调试时k的取值会不断变化，第一次放上去是1？不应该是0吗？第一次直接变为3了。可我没有让循环进行下去啊，只是单纯的想查看k的值) 第一次k是0，其实是a[k++] = 5;可以分解为：a[k] = 5; k++;运行也是这么分解运行的。[/quote] 是不是不能查看k的值，因为查看一次k就变化一次，严重影响我的最终结果

user: user-0
content: 那我放在k上，为什么经过一段时间k的值会变化？我不调试结果没问题，调试的时候这样结果就会变。

user: user-5
content: 引用 5 楼 weixin_44484668 的回复:int main(){ 	int a[10]={0}, k=0; 	while(k<10){ 		a[k++]=5; 	} 	for(int i=0; i<10; i++){ 		printf("%d ", a[i]); 	} 	return 0; }  比如这个，我想让a数组10个元素都是5，直接编译输出是对的，经过调试确实错的(调试时k的取值会不断变化，第一次放上去是1？不应该是0吗？第一次直接变为3了。可我没有让循环进行下去啊，只是单纯的想查看k的值) 第一次k是0，其实是a[k++] = 5;可以分解为：a[k] = 5; k++;运行也是这么分解运行的。

user: user-0
content: int main(){ 	int a[10]={0}, k=0; 	while(k<10){ 		a[k++]=5; 	} 	for(int i=0; i<10; i++){ 		printf("%d ", a[i]); 	} 	return 0; }  比如这个，我想让a数组10个元素都是5，直接编译输出是对的，经过调试确实错的(调试时k的取值会不断变化，第一次放上去是1？不应该是0吗？第一次直接变为3了。可我没有让循环进行下去啊，只是单纯的想查看k的值)

user: user-0
content: 引用 3 楼 weixin_44484668的回复:[quote=引用 1 楼 飞雪蝶映的回复:]结构体的定义是怎样的你得弄出来呀 大整数运算那里的代码 struct bign{   int d[1000]，len;   bign(){      memset(d, 0, sizeof(d);)      len=0;   } }[/quote] 而且我发现只要调试循环体内的自增变量就会出现这种情况，不知道什么原因

user: user-0
content: 引用 1 楼 飞雪蝶映的回复:结构体的定义是怎样的你得弄出来呀 大整数运算那里的代码 struct bign{   int d[1000]，len;   bign(){      memset(d, 0, sizeof(d);)      len=0;   } }

user: user-5
content: 看你的帖子扭的脖子疼，能不能直接发代码呢？不截图

user: user-3
content: 结构体的定义是怎样的你得弄出来呀
user-0 提问: 比较小白的问题  麻烦各位进来看一眼

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:用while替代goto 我在后面加了一个分号   变成  loop:;就好了  谢谢你

user: user-1
content: 用while替代goto
user-0 提问: _vsctprintf函数是不是跨平台的？

回复:
user: user-0
content: 参考：  the equivalent of _vscprintf && _vscwprintf under Linux

user: user-1
content: Linux下要学会使用man命令比如 man vsprintf man 1 vsprintf man 2 vsprintf man 3 vsprintf man 3p vsprintf

user: user-2
content: 这个函数需要：Required for UNIX V compatibility. 需要兼容UNIX V  如果不兼容，可以用fprintf，输出到文件，返回值就是大小了。 然后再分配。

user: user-3
content: linux底下也是可以的，这个代码十多年前写过，现在一时半会儿不知道在哪里，哪天找到了告诉你
user-0 提问: c语言指针做函数实参问题求解

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

user: user-2
content: #include<stdio.h>  int max(int x,int y); int min(int x,int y); int add(int x,int y); void process(int x,int y, int (*fun)(int, int)); int main() {       int a,b;      printf("Please input a and b:\n");     scanf("%d %d",&a,&b);      printf("max=");     process(a,b,max);      printf("min=");     process(a,b,min);      printf("sum=");     process(a,b,add);     return 0; }  void process(int x,int y,int (*fun)(int, int)) {     int value;     //value =(*fun)(x,y);     value = fun(x,y);     printf("%d\n",value); }  int max(int x,int y) {     int max;     if(x>y)     {         return x;     }     else     {         return y;     }  }  int min(int x,int y) {     int min;     if(x<y)     {         return x;     }     else     {         return y;     } }  int add(int x,int y) {     return (x+y); } 供参考～  函数指针变量需要确定参数个数和类型～

user: user-3
content: 引用 2 楼 赵4老师 的回复：printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”这个有时间限制吗🚫

user: user-3
content: 引用 1 楼 qq_36835025 的回复：对不起，自己粗心scanf里面打错了符号，刚检查出来那问题解决了吗？ 指向函数的指针不是： int （*p）（）= & fun；//fun是函数名，要加取地址符吗？

user: user-0
content: 对不起，自己粗心scanf里面打错了符号，刚检查出来
user-0 提问: 关于c语言强转问题

回复:
user: user-0
content: 是在嵌入式系统用的哦，

user: user-1
content: 引用 楼主 守望者910 的回复:请问各位老师，这个整数强转成地址，然后赋值的时候总是段错误怎么回事呀？比如 unsigned  int  a =0x12345678   unsigned short *p;      p=（unsigned  short *）a;    *p =0x78; 编译出现段错误是怎么回事呀？请各位老师指出问题 你的这种用法是在嵌入式系统用的。在Windows下，访问内存，你必须先向系统申请一片内存，系统返回内存地址，你才能使用该地址 你随便写个地址就访问是几个意思，万一该地址被系统或其他地方使用，你这样一改写，岂不出现问题，而且该问题很难查找

user: user-0
content: 引用 3 楼 weixin_44327736的回复:不是unsigned int 的范围问题吗？感觉0x12345678已经超过它的存储范围了 没超过范围呀，这个范围是0x0-0xffffffff，没超过呀

user: user-2
content: 每个进程都有自己的地址范围，不是随便就能用的。

user: user-3
content: 不是unsigned int 的范围问题吗？感觉0x12345678已经超过它的存储范围了

user: user-4
content: 引用 1 楼 user-5 的回复:你怎么知道0x12345678 这个地址是能让你访问的？ IsBadReadPtr The IsBadReadPtr function verifies that the calling process has read access to the specified range of memory.   BOOL IsBadReadPtr(   CONST VOID *lp,  // address of memory block   UINT ucb         // size of block );   Parameters lp  Pointer to the first byte of the memory block.  ucb  Specifies the size, in bytes, of the memory block. If this parameter is zero, the return value is zero.  Return Values If the calling process has read access to all bytes in the specified memory range, the return value is zero.  If the calling process does not have read access to all bytes in the specified memory range, the return value is nonzero.   If the application is compiled as a debugging version, and the process does not have read access to all bytes in the specified memory range, the function causes an assertion and breaks into the debugger. Leaving the debugger, the function continues as usual, and returns a nonzero value This behavior is by design, as a debugging aid.   Remarks If the calling process has read access to some, but not all, of the bytes in the specified memory range, the return value is nonzero.   In a preemptive multitasking environment, it is possible for some other thread to change the process's access to the memory being tested. Even when the function indicates that the process has read access to the specified memory, you should use structured exception handling when attempting to access the memory. Use of structured exception handling enables the system to notify the process if an access violation exception occurs, giving the process an opportunity to handle the exception.   QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winbase.h.   Import Library: Use kernel32.lib.  See Also Memory Management Overview, Memory Management Functions, IsBadCodePtr, IsBadStringPtr, IsBadWritePtr

user: user-5
content: 你怎么知道0x12345678 这个地址是能让你访问的？
user-0 提问: VS Code写C语言标准头文件报错，小白求解

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

user: user-2
content: 单击旁边的小灯泡，打开配置的json文件，把头文件的路径写进IncludePath就可以了

user: user-3
content: 初学不建议用vscode，配置项多。还是vs比较，跟着引导生成就可以了。

user: user-4
content: 按照提示，设置好头文件的路径即可

user: user-5
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt
user-0 提问: 实型数据，赋值运算符

回复:
user: user-1
content: 默认情况下，浮点常量都是以double存储在内存中，末尾加上f后强制编译器按照float存储。 例如3.14E30和3.14E30f，3.14E30以64位double存在内存中，float f=3.14E30需要隐式转换，double转为float， 3.14E30f以32位float存储在内存中，float f=3.14E30f不需要隐式转换

user: user-2
content: 理解和讨论之前请先学会如何观察！  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-0
content: float f=3.14，计算机按什么类型存储3.14

user: user-3
content: 类型隐式提升char类型的计算，提升为int，float类型的提升为double类型。

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437
user-0 提问: While

回复:
user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: 引用 楼主 qq_45444545的回复:While这个逻辑思维是怎么样的，求解 while(条件){执行语句}，进入while循环时判断条件，条件为真，执行语句，条件为假，跳出循环
user-0 提问: 大神帮我看看这个哪里错了，平均分数不对

回复:
user: user-1
content: 刚才打断点 逐步循环了一下！发现应该是i=0

user: user-0
content: 引用 5 楼 qq_42755412 的回复：[quote=引用 4 楼 不减20斤不换网名的回复:][quote=引用 3 楼 qq_42755412 的回复：]# include <stdio.h>  int main(void) { int i, j, k; float a;  k = 0; i = 1;//初始应该改为0,即i=0;  printf("请输入分数，以-1结束："); scanf("%d", &j);  while (j != -1) { k = k + j; i = i + 1;  printf("请输入分数，以-1结束："); scanf("%d", &j); } //printf("%d",i); 循环结束时i比输入的值的个数多1 if (i != 0) { a = (float) k / i; printf("平均分数是：%.2f\n", a); } else    printf("No\n");   return 0; }谢谢大哥[/quote] 没事，很高兴帮到你。有问题还可以问我，只不过缺点积分下东西[/quote]太直接了

user: user-2
content: 引用 4 楼 不减20斤不换网名的回复:[quote=引用 3 楼 qq_42755412 的回复：]# include <stdio.h>  int main(void) { int i, j, k; float a;  k = 0; i = 1;//初始应该改为0,即i=0;  printf("请输入分数，以-1结束："); scanf("%d", &j);  while (j != -1) { k = k + j; i = i + 1;  printf("请输入分数，以-1结束："); scanf("%d", &j); } //printf("%d",i); 循环结束时i比输入的值的个数多1 if (i != 0) { a = (float) k / i; printf("平均分数是：%.2f\n", a); } else    printf("No\n");   return 0; }谢谢大哥[/quote] 没事，很高兴帮到你。有问题还可以问我，只不过缺点积分下东西

user: user-0
content: 引用 3 楼 qq_42755412 的回复：# include <stdio.h>  int main(void) { int i, j, k; float a;  k = 0; i = 1;//初始应该改为0,即i=0;  printf("请输入分数，以-1结束："); scanf("%d", &j);  while (j != -1) { k = k + j; i = i + 1;  printf("请输入分数，以-1结束："); scanf("%d", &j); } //printf("%d",i); 循环结束时i比输入的值的个数多1 if (i != 0) { a = (float) k / i; printf("平均分数是：%.2f\n", a); } else    printf("No\n");   return 0; }谢谢大哥

user: user-3
content: # include <stdio.h>  int main(void) {     int i, j, k;     float a;      k = 0;     //i = 1;     i = 0;     printf("请输入分数，以-1结束：");     scanf("%d", &j);      while (j != -1)     {         k = k + j;         i = i + 1;          printf("请输入分数，以-1结束：");         scanf("%d", &j);     }     printf("k = %d, i = %d\n", k, i);     if (i != 0)     {         a = (float) k / i;         printf("平均分数是：%.2f\n", a);     }     else         printf("No\n");       return 0; } 供参考～ i应该从0开始。

user: user-4
content: 把i的初始值改成0，试一试

user: user-2
content: # include <stdio.h>  int main(void) { int i, j, k; float a;  k = 0; i = 1;//初始应该改为0,即i=0;  printf("请输入分数，以-1结束："); scanf("%d", &j);  while (j != -1) { k = k + j; i = i + 1;  printf("请输入分数，以-1结束："); scanf("%d", &j); } //printf("%d",i); 循环结束时i比输入的值的个数多1 if (i != 0) { a = (float) k / i; printf("平均分数是：%.2f\n", a); } else    printf("No\n");   return 0; }
user-0 提问: 实型数据

回复:
user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-2
content: float 的精度是 6~7 位有效数字。  计算机中存储的是二进制，无法精确的表示所有的十进制小数 比如  0.25 转换成二进制是 0.01 0.2 转换成二进制是 0.0011001....  float 共 32 位二进制比特，一位表示符号，八位表示指数，23位表示底数（尾数）： 所以 float 的十进制精度是 log(2^23) = 6.92 位有效数字  关于浮点型数据在内存中的存储方式可以自行百度，附其中一条结果： https://www.cnblogs.com/BradMiller/archive/2010/11/25/1887945.html

user: user-3
content: 参考下： https://www.cnblogs.com/c-primer/p/5992696.html
user-0 提问: dataset相同编号，不同数量的数据合并问题

回复:
user: user-1
content: 我觉得这跟数据是不是从数据库来的没关系，主要是手段。比如楼主从字符串获取了数据，完全可以用linq来处理。效果跟处理数据库的数据是一样的。 比如下面的代码就跟楼主想要的效果差不多。 5 sum中使用group by 下面例子讲解如何使用sum来统计每一组比如下面 每一个player属于一个组team的然后又一个得分score 然后我们使用sum来统计分组中所有玩家的分数 view sourceprint? var players = new List<Player> {     new Player { Name = "Alex", Team = "A", Score = 10 },     new Player { Name = "Anna", Team = "A", Score = 20 },     new Player { Name = "Luke", Team = "L", Score = 60 },     new Player { Name = "Lucy", Team = "L", Score = 40 }, };   var teamTotalScores =     from player in players     group player by player.Team into playerGroup     select new     {         Team = playerGroup.Key,         TotalScore = playerGroup.Sum(x => x.Score),     };  例子来源：http://www.bamn.cn/News/views/123

user: user-0
content: 引用 1 楼 轻箬笠 的回复:对C#的了解仅限于简单的例子。类似楼主这个问题。用sql语句就可以处理了 select sum(number1) as n1, sum(number2) as n2 from table group by id  不好意思，你可能没懂我的操作，我所得到的数据不是从数据库中获取的，而是通过输入框，扫描二维码标签录入的。所以目前看来跟数据库没多大联系。谢谢你的解答。不然就冷贴了

user: user-1
content: 对C#的了解仅限于简单的例子。类似楼主这个问题。用sql语句就可以处理了 select sum(number1) as n1, sum(number2) as n2 from table group by id
user-0 提问: 求助请教！codeup 1003

回复:
user: user-0
content: 引用 1 楼 user-1的回复:为什么要写m=m+i; 一语点醒梦中人，因我看题目的意思是每一行的总和，以为第一个数既要表示后面数的个数又要算进 去但看样例并不是

user: user-1
content: 为什么要写m=m+i;
user-0 提问: codeup问题1817，我写的代码总是时间超限！有大佬可以帮我看看吗！

回复:
user: user-1
content: #include <stdio.h>  int main() {   char a[13], b[13], *p = a;   int x, y;    while (scanf("%c", p) != EOF)     if (*p == 10)     {       *(p + 1) = 0, p = a;       sscanf(a, "%d", &x);       sscanf(b, "%d", &y);       printf("%d\n", x + y);     }     else       if (*p == 32) *(p + 1) = 0, p = b;       else         if (*p != ',') p++;      return 0; }
user-0 提问: 求解一道题

回复:
user: user-1
content: 五百元有这个整额货币吗，两块的也没有了哦

user: user-2
content: 我的思路是先确定最大面额的找零货币的张数，也就是50块的张数，用找零/50可以得出50块的张数，然后计算20块的张数，用找零总数减去50块的张数×50可以得出余额a，再用a/20即可得出20块的张数，10块的，5块的还有剩下的面值的货币张数也同理，我利用while循环让程序可以一直运行，但是相比单次程序，这个程序的运行初始化的时间会比较长，具体原因我不知道，求大佬指点

user: user-2
content: #include<stdio.h> int main() {     int sum;     int pay;     int givechange;      int one,two,five,ten,twenty,fifty,hundred;         one = 0;         two = 0;         five = 0;         ten = 0;         twenty = 0;         fifty = 0;      while(1)     {          printf("input sum\n");         scanf("%d",&sum);           printf("input pay\n");         scanf("%d",&pay);           givechange = pay - sum;         printf("give change for %d\n",givechange);           fifty  = givechange / 50;         twenty = (givechange - (fifty*50)) / 20;          ten   = (givechange - (fifty*50) - (twenty*20)) / 10;          five  = (givechange - (fifty*50) - (twenty*20) - (ten*10)) / 5;          two   = (givechange - (fifty*50) - twenty*20) - (ten*10) - (five*5) / 2;          one   = givechange - (fifty*50) - (twenty*20) - (ten*10) - (five*5) - (two*2);           printf("*******************\n");         printf("fifty= %d\n",fifty);         printf("twenty= %d\n",twenty);         printf("ten= %d\n",ten);         printf("five= %d\n",five);         printf("two= %d\n",two);         printf("one= %d\n",one);         printf("\n");         printf("\n");      } }

user: user-0
content: 这种大问题应该怎么入手小白也很懵

user: user-3
content: 啊哈，思路：（稍点一下，毕竟upon hearing of your genius）  一个数：463 哈 先对100进行除法，取整结果（这就是要找顾客的100元的张数） 再对100进行取余，结果为63  （不是循环结构，是顺序结构）  新的数：63 哈 再对10进行整除（注意20元和50元） 再对10进行取余，变成了个位数  新的数，（注意5元）即可
user-0 提问: 实型变量

回复:
user: user-0
content: f+1-f，不是说浮点数参与运算时都是双精度吗，书上说最末位加上1，保存为float类型，有点矛盾，大神能解释一下

user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-0
content: 哪位大神能解释一下f+1-f，0怎么来的，里面那些隐式转换能详细解释一下

user: user-0
content: 引用 3 楼 轻箬笠的回复:f+1-f时都是double类型，我咋觉得这句话就有问题呢？ f+1-f，是float+int-float，为啥要转成double进行计算呢，不是转成float进行计算的吗？我记得做算术运算的时候，有个转换顺序的，类似上面这种情况，没有出现double的话，转成float就终止了。难道是我记错了？ 浮点数参与运算是以双精度进行的，float先转成double类型，参与运算，所以double+int-double，还是double，

user: user-2
content: f+1-f时都是double类型，我咋觉得这句话就有问题呢？ f+1-f，是float+int-float，为啥要转成double进行计算呢，不是转成float进行计算的吗？我记得做算术运算的时候，有个转换顺序的，类似上面这种情况，没有出现double的话，转成float就终止了。难道是我记错了？

user: user-3
content: 认真看了两遍这题，发现玩了多年的C不认识了！！ 1：float输出的为什么是近似值？上次在项目中已发现这个问题，但时间太紧了没上心。 2：floa只能保存6位有效数？我没看错吧？惊~
user-0 提问: 用低级钩子尝试屏蔽系统按键，像WIN,alt+Tab都成功了，但是任务管理器的就是不行

回复:
user: user-0
content: 引用 2 楼 赵4老师的回复:任务管理器和普通进程不一样。 不能用拦截系统按键的方式阻止任务管理器打开吗，那有其他办法吗

user: user-1
content: 任务管理器和普通进程不一样。

user: user-0
content: 不沉~~~
user-0 提问: 记录输入的数字、空格和换行、其他字符的输入个数

回复:
user: user-1
content: #include<stdio.h>  //void main() int main() {     //int blank=0,i=0,z,a[10]={0,0,0,0,0,0,0,0,0,0},others=0;     int blank=0,i=0,z,a[10]={0}, others=0;     for (;;)//死循环用来输入     {         z=getchar();         if (z==32||z==10)//判断是否为空格和换行         {             blank=blank+1;         }         //if (z>=48&&z<=57)//判断是否为数字         else if (z>=48&&z<=57)//判断是否为数字         {             a[z-'0']++;             /*             switch (z)             {                 case 48:a[0]=a[0]+1;break;                 case 49:a[1]=a[1]+1;break;                 case 50:a[2]=a[2]+1;break;                 case 51:a[3]=a[3]+1;break;                 case 52:a[4]=a[4]+1;break;                 case 53:a[5]=a[5]+1;break;                 case 54:a[6]=a[6]+1;break;                 case 55:a[7]=a[7]+1;break;                 case 56:a[8]=a[8]+1;break;                 case 57:a[9]=a[9]+1;break;             }             */         }         //if (!(z>=48&&z<=57)&&!(z==32||z==10))//去除数字和空格和换行的其他字符         else         {             others=others+1;         }         if (z==10)//遇到换行时结束输入         {             break;         }     }     printf("blank=%d\n",blank);     for (i=0;i<10;i++)     {         printf("a[%d]=%d\n",i,a[i]);     }     printf("others=%d\n",others);  }  供参考～  程序写的有些复杂，可以更简单一些的。

user: user-2
content: 有什么问题吗？

user: user-3
content: 原来其它字符的ASCII码是这样的啊
user-0 提问: 关于GetSystemMetrics的SM_CXSIZEFRAME

回复:
user: user-0
content: 引用 7 楼 赵4老师 的回复:CX的全称是Coordinate axis X CY的全称是Coordinate axis Y 好的，非常感谢！

user: user-1
content: CX的全称是Coordinate axis X CY的全称是Coordinate axis Y

user: user-2
content: CX CY  x轴和y轴

user: user-1
content: 可惜我没搜到相关图。 只搜到这个：

user: user-1
content: 千字不如一图。

user: user-0
content: 引用 1 楼 cmztestat 的回复:CX CY  x轴和y轴 引用 3 楼 hack_to_hell 的回复:“SM_CYSIZEFRAME is the height of the vertical border”我从开始就把它当成是官档写错了，我按X和Y都是width  根据SM_CYCAPTION来看的话，这里的X和Y应该是指横向宽和纵向高吧，所以CX是指左右边框的横向宽度，CY指上下边框的纵向宽度？

user: user-3
content: “SM_CYSIZEFRAME is the height of the vertical border”我从开始就把它当成是官档写错了，我按X和Y都是width

user: user-0
content: 引用 1 楼 cmztestat 的回复:CX CY  x轴和y轴 所以X轴是指上下边框？ 那么对于Y轴的左右边框，说它的高度岂不是很不合理？
user-0 提问: C语言scanf_s输入字符串后敲回车后没有输出就结束了

回复:
user: user-1
content: 引用 6 楼 qq_43208299 的回复：[quote=引用 3 楼 自信男孩的回复:]scanf_s缺少一个参数，scanf_s比scanf安全，前提是第三个参数，可以确定%s字符串长度。 产什么意思，不是很明白[/quote]以上代码如果用scanf_s,第二行应改为scanf_s("%s",buf,5),表示最多读取4个字符，因为buf[4]要放'\0'。   搜一下呗，这是我挑的，scanf_s函数有三个参数，你少一个

user: user-0
content: 引用 3 楼 自信男孩的回复:scanf_s缺少一个参数，scanf_s比scanf安全，前提是第三个参数，可以确定%s字符串长度。 产什么意思，不是很明白

user: user-0
content: 引用 1 楼 user-4的回复:使用scanf_s需要设置缓冲区长度，而原来的scanf不安全就是因为很容易越界  	scanf_s("%s", name,sizeof(name));  那sizeo缓冲的f长度是为上面的20吗？

user: user-0
content: 引用 2 楼 csucxy的回复:这个程序在运行时会报运行时错误，楼主的编译器是？ VS2012 这程序运行时没有报错，但就是没有输出字符串

user: user-2
content: scanf_s缺少一个参数，scanf_s比scanf安全，前提是第三个参数，可以确定%s字符串长度。

user: user-3
content: 这个程序在运行时会报运行时错误，楼主的编译器是？

user: user-4
content: 使用scanf_s需要设置缓冲区长度，而原来的scanf不安全就是因为很容易越界  	scanf_s("%s", name,sizeof(name));
user-0 提问: 数组问题

回复:
user: user-0
content: 引用 2 楼 英雄@末路的回复:你换个名字，放main前面就没事了 好的，十分感谢您的回复！

user: user-0
content: 引用 1 楼 Italink的回复:标准库中已经使用了begin，end，所以你再定义为数组就会报错，可以换个名字，加前后缀，换大小写 好的，谢谢您的用心回复，十分感谢！

user: user-1
content: 标准库中已经使用了begin，end，所以你再定义为数组就会报错，可以换个名字，加前后缀，换大小写

user: user-2
content: 你换个名字，放main前面就没事了
user-0 提问: 为什么：指针所指的字符串，不能赋值（改变）

回复:
user: user-1
content: 能不能修改要看编译器的行为，谁说不能改，只要你不加/GF编译选项就可以改，只是不建议这么做 如果加了/GF编译选项就不能改，否则运行出现异常

user: user-2
content: 因为p只是一个指针，占用4个字节，其存放的是字符串常量的地址，而p[1] = 'x';是对字符串常量赋值，所以会出错。 而a是数组可读可写

user: user-3
content: 定义指针指向字符串常量，只是把字符常量的地址给指针，指针是不会构造对象的，而使用字符数组定义，则是通过这个字符串常量进行构造自己的字符串前者使用指针指向常量，所以不能修改，后者字符数组是自己的字符串，可所以可以修改

user: user-4
content: char * p="“hello ..”；实际上是const char *p = "Hello ...";  常量无法修改；

user: user-4
content: 如果你用了new那就可以这么干

user: user-0
content: ：我是一只没得感情的程序猴子

user: user-0
content: 引用 5 楼 自信男孩 的回复：因为p只是一个指针，占用4个字节，其存放的是字符串常量的地址，而p[1] = 'x';是对字符串常量赋值，所以会出错。 而a是数组可读可写有收获，谢谢

user: user-5
content: 引用 11 楼 （.....） 的回复:[quote=引用 7 楼 赵4老师 的回复：]#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 不了不了，谢谢[/quote] 怕了吧。

user: user-0
content: 引用 7 楼 赵4老师 的回复：#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 不了不了，谢谢

user: user-0
content: 引用 8 楼 英雄@末路 的回复：指针，常量，地址空间这些概念要先搞清楚啊 那个字符串是常量。。。谢谢，会注意的

user: user-0
content: 引用 3 楼 Mr_sandman1994 的回复：char * p="“hello ..”；实际上是const char *p = "Hello ...";  常量无法修改；好的，谢谢

user: user-6
content: 指针，常量，地址空间这些概念要先搞清楚啊 那个字符串是常量。。。

user: user-5
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！
user-0 提问: 如何给子窗口设定编号？

回复:
user: user-1
content: SetWindowLong(hWnd, GWL_ID,  XXXX)

user: user-2
content: 这个字段本来就是添加一些附带信息用的，一般不会很大，实际上一般也用不上这个字段 如果你要附带比较大的数据，一般也不是这么使用的，应该先自行分配内存，再将内存存入wc.cbWndExtra即可 没必要一定要给wc.cbWndExtra分配很大的空间，使用也不方便，重在设计

user: user-0
content: 引用 5 楼 user-2 的回复:你可以指定从第几个字节开始呀 但是每次只能读取几个字节呀

user: user-2
content: 很简单，使用WNDCLASS结构中cbWndExtra参数保存即可  wc.cbWndExtra这个成员，这个成员指定了系统为每个窗口分配多少字节的额外空间。 创建窗口后，如果想要使用这段额外空间，可以使用以下六个函数之一： GetWindowWord(hWnd, n)  // 从第n个字节开始，读取两个字节 GetWindowLong(hWnd, n)  // 从第n个字节开始，读取四个字节 GetWindowLongPtr(hWnd, n) // 从第n个字节开始读取。如果系统是32位，则读取4个字节；如果系统是64位，则读取8个字节。（这个一般用来读取指针变量） SetWindowWord(hWnd, n, value) SetWindowLong(hWnd, n, value) SetWindowLongPtr(hWnd, n, value)

user: user-2
content: 你可以指定从第几个字节开始呀

user: user-0
content: 引用 3 楼 user-2 的回复:wc.cbWndExtra是为每个窗口预留的空间，每个窗口实例私有，如果这个成员值为1024，是为这个窗口实例分配了1KB空间，不是窗口类 wc.cbClsExtra是为每个窗口类预留的空间，所有以这个窗口类生成的窗口实例共享 可是如果用GetWindowLongPtr这些来读写，最多只能用其中的8个字节是吗？

user: user-2
content: wc.cbWndExtra是为每个窗口预留的空间，每个窗口实例私有，如果这个成员值为1024，是为这个窗口实例分配了1KB空间，不是窗口类 wc.cbClsExtra是为每个窗口类预留的空间，所有以这个窗口类生成的窗口实例共享

user: user-0
content: 引用 1 楼 user-2 的回复:很简单，使用WNDCLASS结构中cbWndExtra参数保存即可  wc.cbWndExtra这个成员，这个成员指定了系统为每个窗口分配多少字节的额外空间。 创建窗口后，如果想要使用这段额外空间，可以使用以下六个函数之一： GetWindowWord(hWnd, n)  // 从第n个字节开始，读取两个字节 GetWindowLong(hWnd, n)  // 从第n个字节开始，读取四个字节 GetWindowLongPtr(hWnd, n) // 从第n个字节开始读取。如果系统是32位，则读取4个字节；如果系统是64位，则读取8个字节。（这个一般用来读取指针变量） SetWindowWord(hWnd, n, value) SetWindowLong(hWnd, n, value) SetWindowLongPtr(hWnd, n, value) 额，，，可是这几个子窗口是用的同一个窗口类。。。。还有就是，cbWndExtra不是预留的成员吗？怎么成了指定分配一段空间了？如果这个成员值为1024，是不是为这个类分配了1KB空间？
user-0 提问: 求助！帮帮孩子吧

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 [code=c]//请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。 [/code]

user: user-0
content: 这是c primer plus第六版的194面的例子，是一个识别单词的程序 输出实例： reason is a powerful servant but an inadequate master. | character=55,word=9,lines=3,partial lines=0

user: user-0
content: #include<stdio.h> #include<ctype.h> int main(void) { 	char c;//字符 	char pre;//读入前一个字符 	long n_chars=0L;//读入字符数 	int p_lines=0;//不完整行数行数  	int n_words=0;//单词数 	int n_lines=0;//行数 	bool inword=false; 	printf("Enter text to be annalyzed(| to terminate):\n"); 	while((c=getchar())!='|') 	{ 		n_chars++; 		if(c=='\n') 			n_lines++; 		if(!isspace(c) && !inword) 		{ 			inword=true; 			n_words++; 		} 		if(isspace(c)&&inword) 			inword=false; 		pre='c'; 	} 	if(pre='\n') 		p_lines=0; 	printf("charecters=%ld,words=%d,lines=%d,partial lines=%d",n_chars,n_words,n_lines,p_lines); 	return 0; }

user: user-0
content: 好的，等我开个机…马上

user: user-2
content: scanf的%c能接收空格并识别空格 while外，判断pre='\n'有问题。  建议贴出你的代码，可以帮你试一下

user: user-0
content: 第十五行两个分号忽略一下

user: user-0
content: 按回车没有结果
user-0 提问: 为什么要求原码呢？

回复:
user: user-1
content: 因为结果是一样的，而补码乘法很费力

user: user-1
content: 因为结果是一样的，而补码乘法很费力

user: user-1
content: 但那不是原码的十进制数， -2的原码是-10或1000 0010，即82H
user-0 提问: 用主函数调用两个函数求最大公约数和最小公倍数

回复:
user: user-1
content: 楼主你想问什么

user: user-2
content: int yue(int m,int n) {     int a,b,c;     a=m;     b=n;     while (1) {         c=a>b?a-b:b-a;         if(c == 0 || (a%c==0 && b%c == 0))             break;         a=b;         b=c;         c=a>b?a-b:b-a;     }     if (c == 0)         c = b;      return c; } 需要用循环
user-0 提问: c语言计算最大公约数

回复:
user: user-1
content: #include<stdio.h>  int main() {     int a,b,c,m,n;     printf("pease input two numbers:\n");     scanf("%d%d",&m,&n);     a=m;     b=n;     while (1) {         c=a>b?a-b:b-a;         if(c == 0 || (a%c==0 && b%c == 0))             break;         a=b;         b=c;         c=a>b?a-b:b-a;     }     if (c == 0)         c = b;     printf("%d与%d的最大公约数是%d\n",m,n,c); } 供参考～

user: user-1
content: #include<stdio.h>  int main() {     int a,b,c,m,n;     printf("pease input two numbers:\n");     scanf("%d%d",&m,&n);     a=m;     b=n;     while (1) {         c=a>b?a-b:b-a;         if(c == 0 || (a%c==0 && b%c == 0))             break;         a=b;         b=c;         c=a>b?a-b:b-a;     }     printf("%d与%d的最大公约数是%d\n",m,n,c); }  楼主的基础做了微调，但是这种算法有一个bug，那就是当m和n相等时，最后的结果最大公约数是0；
user-0 提问: C语言Time Limit Exceeded问题

回复:
user: user-1
content: 嗯，我写一般会多加个括号，输入格式中％c会读取空格

user: user-2
content: 引用 3 楼 tb_youth 的回复:while((scanf("%d%c%d",&a,&c,&b))!=EOF) 不加也没有影响，加了反而会冗余。scanf的返回值和EOF比较。

user: user-1
content: while((scanf("%d%c%d",&a,&c,&b))!=EOF)

user: user-1
content: 输入scanf不等于eof再前加个括号

user: user-2
content: 应该是输入格式的问题，比如1+2这样是可以的，1 + 2这样的就不执行，因为c字符匹配的运算符是' '空格。所以不会出结果。 建议把需求贴出来吧，还有除法运算时，对于除数是否为0没有判断
user-0 提问: 求教c

回复:
user: user-0
content: 仿真calc为0x00，老师能具体解释下吗

user: user-1
content: 理解和讨论之前请先学会如何观察！  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
user-0 提问: 大神求救！

回复:
user: user-1
content: 去掉第一个scanf的%d后的空格；  测试过了，输入4之后加上空格也是不行的。所以，只能去掉scanf中的空格

user: user-2
content: 把你scanf中%d后的空格去掉 或者输入4的时候后面再输入一个空格