Question: 新手 望解答  （输入一个字符，判断是否为字母，如果是进行大小写转换, 否则直接输出此字符）

Ayanamilove你加减写反了

char judge(char c) {   if(c<='Z'&&c>='A')//大写与小写ANSII码差32     c-=32;   else if(c<='z'&&c>='a')     c+=32;   return c      }

https://blog.csdn.net/qq_38181865/article/details/95440624   这篇大佬的帖子应该能够满足你的需求

QChar::isLower()  判断是否为小写   然后转换

C语言有许多字符转换、判断的库函数， https://blog.csdn.net/BadAyase/article/details/102383630 具体参考08节

根据ASCII码来做


Question: 大神们，请教一下VS里面不加malloc.h的情况下，int malloc() 函数哪来的

你需要脱离IDE，学习手写makefile

不奇怪的，C没有强制要求必须声明的，调用参数入栈也没问题，但是返回参数都是int，只是你这里都做了转换指针，所以就可以用了。C++比较严格，这样写是编译不过的

引用 14 楼 SuperDay的回复:[quote=引用 11 楼 嘎油啊~ 的回复:] [quote=引用 8 楼 SuperDay的回复:]楼主到底想干嘛？？？ 我想知道这个int返回类型的malloc函数哪里来的[/quote]  对于C语言来说，所有没有声明过的函数，都默认原型int (*)()[/quote] 但是他没申明是没声明，但关键他还能用我就很奇怪

引用 11 楼 嘎油啊~ 的回复:[quote=引用 8 楼 SuperDay的回复:]楼主到底想干嘛？？？ 我想知道这个int返回类型的malloc函数哪里来的[/quote]  对于C语言来说，所有没有声明过的函数，都默认原型int (*)()

引用 6 楼 Eleven的回复:或许是其它头文件中#include了malloc.h了~ 没其他头文件了呀

楼主到底想干嘛？？？

那就去使用！！！！！

或许是其它头文件中#include了malloc.h了~

引用 3 楼 SuperDay的回复:malloc应该是是在stdlib.h里面，但是有些头文件应该也可以间接引用到它比如string.h memory.h什么的 但是我没有使用这些头文件呀

引用 2 楼 嘎油啊~ 的回复:[quote=引用 1 楼 赵4老师的回复:]VS IDE中，在不明白的符号malloc上点鼠标右键，选转到定义。 老师，就是转不进去呀[/quote] 你的库目录配置中Windows SDK没配置好。

引用 12 楼 自信男孩的回复:环境不一样头文件也不一样：Linux下是用stdlib.h声明malloc/windows下有些IDE应该是在malloc.h中声明的 首先，Windows下malloc.h和stdlib.h都可以声明malloc函数，而且使用了头文件的malloc函数对于这个程序来说是完全正确的(这个正确的malloc返回类型是void*)，现在就是我偶然发现我不加任何有关malloc函数的头文件，他冒出来一个int返回类型的malloc函数，而且恶心的是这个int返回类型的malloc函数申请内存失败了，但是我现在就是想搞清楚后面这个malloc是哪来的？

引用 8 楼 SuperDay的回复:楼主到底想干嘛？？？ 我想知道这个int返回类型的malloc函数哪里来的

引用 9 楼 嘎油啊~ 的回复:[quote=引用 6 楼 Eleven的回复:]或许是其它头文件中#include了malloc.h了~ 没其他头文件了呀[/quote] 有的IDE默认#include了一些常用头文件，就跟有的IDE默认link一些常用的库类似。

引用 1 楼 赵4老师的回复:VS IDE中，在不明白的符号malloc上点鼠标右键，选转到定义。 老师，就是转不进去呀

VS IDE中，在不明白的符号malloc上点鼠标右键，选转到定义。


Question: c语言求阶乘程序填空

第一个空 int n 第二个空 int product = 1 第三个空 i < = n 第四个空 product *= i;


Question: 纯小白，问问哪里出错了

第一个：第六行 if 后面不应该跟分号 第二个：printf 里的 a 前面不需要取地址符&.  建议：    注意下格式和代码习惯比较好。    比如注意缩进，和 if 后面必须跟上{}


Question: 在VS2019中if 语句的条件没用。求解答。

问题可能出现在你的 输入语句 scanf_s("%d,%d", &n, &m);   的两个分好之间的逗号，跟你在黑框框输入的时候的逗号不一致，逗号有两种，一种是英文下的逗号，一种是中文下的逗号。所以，要确保这两个逗号是同一种，最好都使用英文下的逗号。 所以，建议你把逗号都确保是英文下的逗号，在调试。 或者，把逗号去掉，改成空格，是最好的。 输入语句改成：scanf_s("%d %d", &n, &m); 然后黑框框，输入的时候输入：2 空格 3回车。试试！

scanf_s("%d，%d")两个%d之间的逗号如果用的是英文的话 在输入时 也要用英文逗号

引用 2 楼 自信男孩的回复:建议在scanf_s下加一条语句打印出n, m的值，然后根据结果看一下是否是你想要的输入或者和你的输入是否一致 还真不是我所输入的值。但这要怎样解决呢？

引用 1 楼 赵4老师的回复:全角逗号和半角逗号不是一回事。 那么程序也就运行不了。我的问题主要就是：在我键入2和3两个数之后，去判断if语句，n<m的它应该执行的是else，但它执行的却是n>m的。

引用 1 楼 赵4老师的回复:全角逗号和半角逗号不是一回事。 你没看清楚吧！全部都是半角逗号。如果出现全角逗号的话会报错的。

全角逗号和半角逗号不是一回事。


Question: 请问在vs2017中编写max和min函数为什么会提示应输入标识符？

"C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\stdlib.h"       28: // Minimum and maximum macros       29: #define __max(a,b) (((a) > (b)) ? (a) : (b))       30: #define __min(a,b) (((a) < (b)) ? (a) : (b))


Question: 请问在vs2017中编写max和min函数为什么会提示应输入标识符？

STL版本的位于头文件algorithm中，windows宏定义位于头文件windows.h中


Question: for(ptr=head;ptr;ptr=ptr->next)是什么意思呢？

这是一个单向链表的遍历操作；

ptr=head while(ptr!=null){  ptr=ptr->next; }

遍历链表 6字6字

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


Question: 大一c语言 repeat次数 输入四数求四数最小值

引用 2 楼 自信男孩 的回复：第一把scanf的'\n'去掉； 出现最小值还是第一次repeat的原因，e在第二次甚至是第三次没有再次初始化； 先把'\n'去掉再试试～把n去掉运行 只能在同一行输入多组数据 不能分行输入 怎么回事啊？

把第二个scanf()里的\n去掉


Question: 散列表，这种解法对吗？？？

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


Question: 二维数组的一个问题，一直没懂。

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

其实二维三维四维，对于计算机来说都是一维，只不过我们人为划定了界限，A[2][2]和A【4】一样，只不过我们认为的规定a【0】【0】=a【0】

就存在数组变量的内存里 a的内存保存的是a[0]的地址（a的内存保存的是一个指针，这个指针指向a[0]） a[0]的内存保存的是a[0][0]的地址（a[0]的内存保存的是一个指针，这个指针指向a[0][0]） a[1]的内存保存的是a[1][0]的地址（a[1]的内存保存的是一个指针，这个指针指向a[1][0]） a[2]的内存保存的是a[2][0]的地址（a[2]的内存保存的是一个指针，这个指针指向a[2][0]）

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

引用我们知道，a,  a[0], a[1], a[2]都是常量指针我们并不是这样知道的 我们知道的是 a a[0] a[1] a[2] 都是数组 数组都不是指针   引用指针都存放在哪儿指针不一定要存放 也有不需要存放的指针

这些所谓的“指针”并没有单独的空间存放，就像数组名是数组的首地址一样。  数组不能等价指针，指针有自己的变量空间，而数组没有。

内存里都是一维,不用想太复杂.


Question: c语言中基础

缺少库文件吧估计

link错喽。

路径不对？   问题图片什么的倒是放出来啊

没有代码往哪猜


Question: 新手求助 大佬留步

引用 8 楼 與蘤舊縐 的回复：今天犯蠢太多次了~~~不是a赋值给b，b自增~~~，没有初始化b，就这样嗯应该是初始化 我改出来了 谢谢

引用 6 楼 喜欢做我自己 的回复：给数组a[]赋值你从a[[1]开始到a[5]了，但实际上应该是a[0]到a[4];数组下标是从0开始的，你初始化赋值跳过了a[0]，导致赋值出错，系统不支持这样跳着初始娿，到导致数据异常的好的谢谢

b105=｛0｝这就赋了一个值b0，用循环赋值

今天犯蠢太多次了~~~不是a赋值给b，b自增~~~，没有初始化b，就这样

引用 4 楼 與蘤舊縐 的回复：刚才没仔细看，原来不是排序  你的b数组没有初始化，a赋值给b的时候需要条件，有些位置没有存进去很正常改成b105=｛0｝？

引用 3 楼 與蘤舊縐 的回复：好吧你从1开始存储  看你这种情况多半越界了，在哪里自己先找找吧，调试很容易找出来  另外不要这么写~~~从0开始存好的谢啦 看下私信

引用 1 楼 與蘤舊縐 的回复：for(int i=0;i<n;i++)数组下标越界emmmm？没太懂 哪里越界了

for(int i=0;i<n;i++)数组下标越界


Question: c语言字符串数组输出汉字出错

引用 6 楼 與蘤舊縐 的回复:[quote=引用 2 楼 qq_45684602 的回复:] [quote=引用 1 楼 喜欢做我自己的回复:]%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符[/quote]   一个字节，又不是java[/quote]你输出的是char的大小 和 内容无关 汉字编码不可能1字节

刚没看代码，你没想要空格，那就把数组c初始化一遍就行了

没有\0，一个汉字一个空格就已经占了3字节了，你的第二为应该申请长度为4，多的一个字节存储'\0'

把c的列数增大吧，比如用char c[100][16];再试试～ 另外，汉字不是ASCII那样一个字符对应一个字母（汉字），至少是2个字符对应一个汉字，所以不能直接赋值，而是建议 用memcpy，还要注意字符串的结束标记'\0'

c int or wint_t When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.  C int or wint_t When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.   译文： c与printf函数一起使用时，指定单字节字符；与wprintf函数一起使用时，指定宽字符。 C与printf函数一起使用时，指定宽字符；与wprintf函数一起使用时，指定单字节字符。

s String  When used with printf functions, specifies a single-byte–character string; when used with wprintf functions, specifies a wide-character string. Characters are printed up to the first null character or until the precision value is reached.   S String When used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte–character string. Characters are printed up to the first null character or until the precision value is reached.   经fanyi.baidu.com翻译：  s字符串与printf函数一起使用时，指定单字节字符串；与wprintf函数一起使用时，指定宽字符串。字符最多打印到第一个空字符或直到达到精度值。  S字符串与printf函数一起使用时，指定宽字符串；与wprintf函数一起使用时，指定单字节字符串。字符最多打印到第一个空字符或直到达到精度值。

setlocale(LC_ALL, "chs"); const wchar_t *hz = L"你好"; wprintf(L"%ls", hz);

是啊，%c%c才显示一个汉字啊， char a[16] = "你好"; printf("%c%c",a[0],a[1]); 只显示"你"

引用 10 楼 真相重于对错 的回复:你的赋值溢出的，char是一个字节，但汉字不是一个字节，当你把汉字赋予一个字节变量时，丢失了它高字节的部分。 因此你再次打印，就会是乱码  嗯，忘记打印出来看看了~~，char类型是一个字节

引用 5 楼 喜欢做我自己的回复:char a[16] = "你好"; printf("%c%c",a[0],a[1]); 应该是这样的，2个%c一个汉字

引用 6 楼 與蘤舊縐 的回复:[quote=引用 2 楼 qq_45684602 的回复:] [quote=引用 1 楼 喜欢做我自己的回复:]%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符[/quote]   一个字节，又不是java[/quote] 你的赋值溢出的，char是一个字节，但汉字不是一个字节，当你把汉字赋予一个字节变量时，丢失了它高字节的部分。 因此你再次打印，就会是乱码

引用：    首先你要明白a[0]不是“百”，只是“百”左边一半，一个汉字至少要两个字节（与编码方式有关，大多数情况下是两个字节），要输出“百”至少要： printf("%c%c",a[0],a[1]);

可网上都说一个汉字2个字节啊

引用 6 楼 與蘤舊縐的回复:[quote=引用 2 楼 qq_45684602 的回复:] [quote=引用 1 楼 喜欢做我自己的回复:]%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符[/quote]   一个字节，又不是java[/quote] 好吧，我可能傻了   nnn

引用 2 楼 qq_45684602 的回复:[quote=引用 1 楼 喜欢做我自己的回复:]%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符[/quote]   一个字节，又不是java

那就两个%c啊

漏了 字符串结尾的 '\0'

引用 1 楼 喜欢做我自己的回复:%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符


Question: 求大佬告知

scanf("%d", &n ); 另一点，你的程序的逻辑问题有点大

#include <stdio.h>  int fun(int n) {     int ge, shi, bai;     ge = n % 10;     shi = n / 10 % 10;     bai = n / 100;     if (n == ge * ge * ge + shi * shi * shi + bai * bai * bai)         return 1;     else         return 0; }  int main() {     int n, flag;     printf("输入一个三位整数");     scanf("%d", &n);      flag = fun(n);     if (flag)     {         printf("是");     }     else     {         printf("不是");     }      return 0; } 在你的原代码基础上略作了改动。

代码冗余 改成 int flag; flag=fun(flag);优化代码

除了输入语句错误其他都ok

int n是变量的声明，这一条语句使得n获得了一块存储空间，但是存的是什么就随缘了 int n=10;既完成了声明，又对n进行了初始化 如果是static int n，则n默认被初始化为0

引用 2 楼 csucxy的回复:你这个程序应该是编译通不过的。1、main函数第二行，使用了未初始化的变量n，编译应该会报错。2、fun函数第三行，scanf函数调用也是错的。 其它没细看。 对，我现在已经把scanf改对了，n变量没有初始化是什么意思？能否解释一下

加断点，F5调试。鼠标点击行号左边就可以加断点


Question: 求助大神


Question: 写一个通用显示函数

引用 1 楼 qq_33437675 的回复:现在只是想到了字符数组和整形数组，后面还有浮点型数组，感觉好难呀 那就用函数指针。  #include <stdio.h>  typedef void show_arr(void *arr, int len);  void visit(void *arr, int len, show_arr pfunc) {     pfunc(arr, len); }   void show_int(void *arr, int len) {     int i;      int *array = (int *)arr;      for (i = 0; i < len; i++)         printf("%d ", array[i]);     putchar(10); }  void show_char(void *arr, int len) {     int i;     char *array = (char *)arr;      for (i = 0; i < len; i++)         printf("%c ", array[i]);     putchar(10); }  void show_float(void *arr, int len) {     int i;     float *array = (float *)arr;      for (i = 0; i < len; i++)         printf("%f ", array[i]);     putchar(10); }  void show_double(double *arr, int len) {     int i;     double *array = (double *)arr;      for (i = 0; i < len; i++)         printf("%lf ", array[i]);     putchar(10); }  void show_string(void *arr, int len) {     int i;     char **str = (char **)arr;      for (i = 0; i < len; i++)         printf("%s ", str[i]);     putchar(10); }  int main(void) {     int arr[8] = { 1, 2, 3, 5 };     char *str[3] = {"hello", "world"};      visit(arr, 8, show_int);     visit(str, 3, show_string);      return 0; } 通用函数visit；

现在只是想到了字符数组和整形数组，后面还有浮点型数组，感觉好难呀

模板

C++的话可以用模版(这个估计才是完美的解决方案) 纯C的话，如2L所说用函数指针，或者也可以考虑用一个变量来判断类型（这些方法都有缺陷，不能覆盖所以类型） viod printAny(void* a, int len, int kind) {     switch (kind) {     case 0: //char*         char *c = (char*)a;         for (int i=0; i<len; i++) {             print("%c ", c[i]);         }         break;     case 1: //int*         //依此类推     case 2: //long*     ...     default:     } }


Question: 为什么运行之后是这个结果

建议查一下\r的原理～

引用 5 楼 與蘤舊縐的回复:不过是\r回到了行首，然后f替换了a，\t使得光标跳到了de前面，g替换了d，你手机上的其实是\t把前面的都覆盖掉了，而电脑上只是光标移动了 。。。。。。。明白了谢谢

引用 4 楼 zjq9931的回复:\r是回到这一行的开始。 区别在于\t这个制表符占几个字节。这个是可以设定的。 我明白了，感谢大佬们。

\r是回到这一行的开始。 区别在于\t这个制表符占几个字节。这个是可以设定的。

引用 1 楼 與蘤舊縐的回复:  自己分解试一下，手机上的编译器和电脑上的一般不一样 搞不懂电脑上的运行结果

引用 1 楼 與蘤舊縐的回复:  自己分解试一下，手机上的编译器和电脑上的一般不一样 第一种结果是电脑上的用的是vc和dev c++

自己分解试一下，手机上的编译器和电脑上的一般不一样


Question: 学好C语言的方法

Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817


Question: C语言输入输出求大神解答一下下

引用 3 楼 自信男孩 的回复：a3是接收到了'\n'，直接返回了。因为这个'\n'是scanf即输入a1, a2后的回车你好为什么gets接收/n就返回了

引用 1 楼 user-2 的回复：gets可以用来输入带空格的字符串，而scanf() 以 空格 或 回车符 结束读取，空格 或 回车符 会遗留在缓冲区。然后我还是不懂为啥选A


Question: 为什么？？

++a的结果返回给a，a还会跟着后面a变化，直到拿去算？+？的时候

同理（a++）+（a++）=3 （++a）+（++a）=6,3+3=6

a++看成tmp=a，a=a+1 ++a看成a=a+1 1+3=4 3+2=5

引用 楼主 ZG991205 的回复:a=1 (a++)+(++a)=4 (++a)+(a++)=5  莫中了老师的毒 不同编译器理解不同，完全脱离正常计算顺序 现在考试基本也没认出这种题了

未定义的行为！不要纠结这种写法了，虽然能编译运行，但是结果是没准的


Question: 编程小白求救

关闭vs的SDL检查，具体步骤百度


sum = 1；

你可以写一个递归函数计算x的阶乘，然后循环相加就好了

引用 7 楼 qybao的回复:因为sum的值可以继续使用 比如第一次 sum=1*1=1! 第二次 sum = sum*2 = 1!*2 = 2! 第三次 sum = sum*3 = 2!*3 = 3! 依次类推  其实第二个for实际上就是让j每次使用完以后j=i，所以第二个for可以不要，直接用第一个for的i就可以了 哦哦，懂了(￣∀￣) 谢谢(*°∀°)=3

引用 4 楼 qybao的回复:如LS说的sum在j循环前初始化一下，或者如下for循环改一下 for (i=1, j=1; i<=20; i++) {     for (; j<=i; j++) } 或者根本就不需要第二层for循环 for (i=1; i<=20; i++)  {     sum = sum*i;     total = total + sum; } 我有个问题，把j=1放到第一个for循环中为什么就不用重置sum=1了呢？

引用 4 楼 qybao的回复:如LS说的sum在j循环前初始化一下，或者如下for循环改一下 for (i=1, j=1; i<=20; i++) {     for (; j<=i; j++) } 或者根本就不需要第二层for循环 for (i=1; i<=20; i++)  {     sum = sum*i;     total = total + sum; } 谢谢(*°∀°)=3(抱大腿)

引用 2 楼 Eleven的回复:在第一个for语句中需要重置sum = 1; 非常感谢╰(*´︶`*)╯

在第一个for语句中需要重置sum = 1;

sum重置。。。。。。


Question: 请大家看看我这一元二次方程求根程序哪错了

#include<stdio.h> #include<math.h> /*     有两个不等的实根即d=b*b-4*a*c > 0     有两个相等的实根即d=b*b-4*a*c = 0  */  int main() {      float a,b,c,d,q,x1,x2;      scanf("%f %f %f", &a,&b,&c);      d = b*b-4*a*c;     //q = sqrt(d);      if(d>0)     {         q = sqrt(d);   //放在这里比较合适，不然d<=0时，调用sqrt不合适         x1 = ((-1)*b+q)/2*a;         x2 = ((-1)*b-q)/2*a;          printf("x1=%f,x2=%f",x1,x2);     //} else if(d = 0)     } else if(d == 0)     {         x1 = (-1)*b/2*a;         printf("x1=x2=%f",x1);     }else     {         printf("没有实数根！");     }      return 0;  }  供参考～

这一句应当在判断有实根后再执行。  q = sqrt(d);


Question: 请大家看看我这一元二次方程求根程序哪错了

#include<stdio.h> #include<math.h> /*      有两个不等的实根即d=b*b-4*a*c > 0      有两个相等的实根即d=b*b-4*a*c = 0   */   int main() {       float a,b,c,d,q,x1,x2;       scanf("%f %f %f", &a,&b,&c);       d = b*b-4*a*c;     //q = sqrt(d);       if(d>0)     {         q = sqrt(d);   //放在这里比较合适，不然d<=0时，调用sqrt不合适         x1 = ((-1)*b+q)/2*a;         x2 = ((-1)*b-q)/2*a;           printf("x1=%f,x2=%f",x1,x2);     //} else if(d = 0)     } else if(d == 0)     {         x1 = (-1)*b/2*a;         printf("x1=x2=%f",x1);     }else     {         printf("没有实数根！");     }       return 0;   } 供参考～  从代码角度分析道的问题，可以对比代码找一下自己的问题～

/2*a改为 /(2*a)


Question: 什么叫通用显示函数。通用函数是什么

通用就是后面说的，可以显示任何数组的元素的函数。通用，一般都能用的。  void show_array(int *arr, int len);//数组首地址和数组长度 如果是任何类型的，可以考虑使用void *arr；函数内处理是需要特殊一些

void show_array<T>(T *arr, size_t len);


Question: 求助大佬

把tax定义成double类型就可以了。  你定义的是int类型，但是却用%.2lf个数输出，这个%.2lf是输出double类型的变量的。


Question: 求助：c语言简单程序

引用 1 楼 赤马零伊 的回复:简单： 看代码~ # include <stdio.h> # include <string.h> # define N 11 char S[N]={"%A.Blf"},T[N]; char A[N],B[N]; double D=1.123456789; int BF(char *A,char *B,char *C,char *D) {//将A[]中的所有B[]换成C[] 所形成的新字符串存到D[]中     int i=0,j=0,k=0,m=0,n=0;//返回替换的个数     do{         if (B[j]&&A[i++]==B[j])j++;         else         {             if(!B[j]&&++n) while(C[m])D[k++]=C[m++];             else  (i-=j)&&(D[k++]=A[i-1]);             j=m=0;         }     }while(A[i-1]);     return n; } int main() {     char X[]={"A"},Y[]={"B"};     scanf("%s%s",A,B);     BF(S,X,A,T);//将S字符串当中的'A'用A替换  形成的新字符串存到T里     BF(T,Y,B,S);//将T字符串当中的'B'用B替换  形成的新字符串存到S里     printf(S,D);//以S的格式输出D }  这个代码，你输入的即使是3位数  也能运行    也可以输入 -8  10    让他靠左定格~  自己整理的BF函数，拿走给分不谢


Question: c语言求解!谢谢

从这几行代码分析不出你的需求是什么，但是这几行代码不难理解。加减乘除和强制类型转换的知识 不难理解吧～


Question: c语言

（int）就是取浮点数的整数部分，自己计算一下就明白了了

引用 2 楼 starytx的回复:这个函数大概作用就是把传入的参数小数点后第三位进行四舍五入处理 为什么要这么写啊。。

引用 1 楼 自信男孩的回复:这几句那句你不明白，可以直接指出来。代码不复杂的～ 主要不明白为什么四舍五入处理要这么写。。

这个函数大概作用就是把传入的参数小数点后第三位进行四舍五入处理

这几句那句你不明白，可以直接指出来。代码不复杂的～

float fun(float h) { int tmp=(int)(h*1000+5）/10; return （(float)tmp）/100.0; }  这样写可能更明确一些。当float强制转换成int时，会丢弃小数后的数据，注意是直接丢弃，不会进行四舍五入。为了保小数点后3位小数。并且第小数点后3位是四舍五入得到的。

引用 6 楼 自信男孩 的回复:[quote=引用 2 楼 starytx 的回复:] 这个函数大概作用就是把传入的参数小数点后第三位进行四舍五入处理 不是四舍五入吧，int是取整的吧[/quote]我说的是整个函数的作用

引用 2 楼 starytx 的回复:这个函数大概作用就是把传入的参数小数点后第三位进行四舍五入处理 不是四舍五入吧，int是取整的吧


Question: c语言

函数fun接受一个float类型的参数，并返回一个float类型的返回值 定义一个int类型的变量tmp，用强制类型转换把float类型的变量h转换为int类型，然后与1000相乘再加5的和除以10 用强制类型转换把int类型的变量tmp转换成float类型的变量然后再与100相除，最后把值返回给主调函数  才学c语言1个多月，如果解释错了勿怪 还有发帖子要把主要问题写清楚，就写个“c语言”谁没事会进来看

就是数学运算吧，没啥不好理解的

这几句那句你不明白，可以直接指出来。代码不复杂的～


Question: C语言 求大佬救一救新手小白！！

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { 	FILE* file; 	file = fopen("test.txt", "r"); 	if (file == NULL) { 		printf("the file : test.txt not found!\n"); 		exit(-1);// stdlib.h 	} 	int length[26]; 	memset(length, 0, sizeof(length)); 	while (!feof(file)) { 		char str[26]; 		memset(str, 0 , sizeof(str)); 		int tmp = fscanf(file, "%s", str); 		++length[strlen(str)];// string.h 	} 	for (int i = 1; i < 26; ++i) { 		if (length[i] > 0) { 			printf("length %d : %d\n", i, length[i]); 		} 	} 	fclose(file); 	return 0; } /**************************************************** 编译环境：Visual Studio 2019 测试样例： test.txt文件 a ab afe fsge eogej iohger fwjie jwei fhw fe e e wtkengwo wtkengwo wtkengwo 你好  输出： length 1 : 3 length 2 : 2 length 3 : 2 length 4 : 3 length 5 : 2 length 6 : 1 length 8 : 3 请按任意键继续. . . ****************************************************/


Question: c语言问题

懂了，谢谢，一直都以为子函数的返回值可以一直返回到main函数输出

不是吧，你的f()的返回值没有变量接受，显示不出来的。 可以的话，发个截图看看。 你把程序这样写试试，a输出的就是返回值。 #include<stdio.h> int f(){return 1;} int main(){ int a; a=f(); printf("%d",a); return 0; }

子函数里应该是写的return -1,然后运行一下看到的返回值

你是用什么方法知道返回值的，说说看看

就你写的这一行看，不存在这种情况，莫不是你的编译器炸了


Question: 怎么写出第一个程序

不过就逻辑稍微比1/2两个水题复杂了点，你可以把题目分步，慢慢实现每一步，比如你先实现一下起步里程之内怎么回事，然后在慢慢往后做，不论多么复杂的程序都是这么搞出来的，等你熟悉了就可以一把写完了

引用 8 楼 與蘤舊縐的回复:明显让你自己输进去一个限速，再输进去一个时速，然后比较一下输出一个结果（一句话）  爱怎么写怎么写，题目没的要求，自己发挥 第3个是真的不会啊。。。

多个几个if而已，整理一下思路，理清因果关系，然后写呗 师傅领进门，修行靠个人

引用 5 楼 與蘤舊縐的回复:[quote=引用 4 楼 qq_45689538 的回复:] [quote=引用 2 楼 與蘤舊縐的回复:]1、用三个变量，存储输入的三个整数，比较大小，从小到大输出（感觉你还没学到数组） 2、写不下去了~~~太水了 ？？？啥。。。。。。。。。[/quote]  前面总有例题吧，模仿一下，不至于几个if   else的问题自己还解决不了吧[/quote] 不对不对，是第3个怎么写！？？

引用 5 楼 與蘤舊縐的回复:[quote=引用 4 楼 qq_45689538 的回复:] [quote=引用 2 楼 與蘤舊縐的回复:]1、用三个变量，存储输入的三个整数，比较大小，从小到大输出（感觉你还没学到数组） 2、写不下去了~~~太水了 ？？？啥。。。。。。。。。[/quote]  前面总有例题吧，模仿一下，不至于几个if   else的问题自己还解决不了吧[/quote] 那第二个呢怎么写？。。。。。

引用 4 楼 qq_45689538 的回复:[quote=引用 2 楼 與蘤舊縐的回复:]1、用三个变量，存储输入的三个整数，比较大小，从小到大输出（感觉你还没学到数组） 2、写不下去了~~~太水了 ？？？啥。。。。。。。。。[/quote]  前面总有例题吧，模仿一下，不至于几个if   else的问题自己还解决不了吧

引用 2 楼 與蘤舊縐的回复:1、用三个变量，存储输入的三个整数，比较大小，从小到大输出（感觉你还没学到数组） 2、写不下去了~~~太水了 ？？？啥。。。。。。。。。

手敲键盘，眼看屏幕，保存文件，编译运行

还有第二个程序怎么写。。。。


Question: 希望各位大神指导技术小白

不说别的了，继续去敲代码了。

嗯，确实，我自己也会去尝试用不同的方法敲出来的，敲出来也会发出来的。

引用 3 楼 qq_45719513 的回复:[quote=引用 2 楼 tb_youth的回复:]#include <stdio.h> #include <math.h> int main() {    double a,b,c,p,S;    scanf("%lf%lf%lf",&a,&b,&c);    p = (a+ b + c) / 2;    S = sqrt(p*(p-a)*(p-b)*(p-c));    printf("%lf\n",S);    return 0; } 谢谢，虽然是在你的指导下完成的作业，但我还是重新对编程充满了信心。[/quote]  这是指导吗？这是赤裸裸的抄袭！

引用 2 楼 tb_youth的回复:#include <stdio.h> #include <math.h> int main() {    double a,b,c,p,S;    scanf("%lf%lf%lf",&a,&b,&c);    p = (a+ b + c) / 2;    S = sqrt(p*(p-a)*(p-b)*(p-c));    printf("%lf\n",S);    return 0; } 谢谢，虽然是在你的指导下完成的作业，但我还是重新对编程充满了信心。

开始写吧


Question: 我又来求助了

谢谢大哥！！！！！！！

if(a<=0){ a=-a; printf..... }else{ a=a; printf }


Question:
3.已知三角形的三边 a=3,b=4,c=5,求其面积s

提示:假设有一个三角形,边长分别为a、b、c,三角形的面积s
=

使用三角形面积公式s=根号下（p(p-a)(p-b)(p-c)），p为半周长


Question:
3.已知三角形的三边 a=3,b=4,c=5,求其面积s

提示:假设有一个三角形,边长分别为a、b、c,三角形的面积s
=

百度百科：海伦公式。

因为a^2 +b^2 = c^2 所以是直角三角形 double  s = 0.5*3*4 = 6; cout<<s;


Question: 麻烦看一下这是什么问题

引用 6 楼 自信男孩 的回复:[quote=引用 4 楼 Ls970711 的回复:] scanf()函数是不可以对float类型的变量进行操作的，建议去看下scanf()函数原型~ 你的描述有问题吧，怎么不能对float类型的变量操作呢？%f不就是针对float的吗？[/quote] 确实描述的有问题，我重新看了下，scanf是不能对%4.2f这种带精度的进行操作

楼主的代码没发现什么问题，建议楼主贴出错误信息～

楼主的代码没发现什么问题，建议楼主贴出错误信息～

引用 4 楼 Ls970711 的回复:scanf()函数是不可以对float类型的变量进行操作的，建议去看下scanf()函数原型~ 你的描述有问题吧，怎么不能对float类型的变量操作呢？%f不就是针对float的吗？

float x,y;     scanf("%f",&x);     if(x < 1)     {     	y = x; 	} 	else if(x < 10) 	{ 		y = 2*x -1; 	} 	else 	{ 		y = 3*x - 11; 	} 	printf("%f\n",y);    执行没问题，估计是你哪里用来中文字符

是不是if（）和else if（）这里的括号是中文字符

有error,执行不出来

问题是什么？？？


Question: gdb调试--求助

使用depends或ldd命令查看exe依赖的其他dll


Question: 不知道是哪里出了问题，输出字符的时候输出个问好出来？

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h>  #define MAXSIZE 100  //顺序栈存储空间的初始分配量  typedef struct       //顺序栈的存储结构 {     char *base;     char *top;     int stacksize; }SqStack;  void task_1(void); /*void task_2(void);   void task_3(void);*/ SqStack* InitStack(SqStack *S); SqStack* Push(SqStack *S,char *ch); char Pop(SqStack *S); char GetTop(SqStack *S); bool StackEmpty(SqStack *S); void Matching_1(SqStack *S);  int main() {     int flag = 1;     while(flag)     {         printf("实验四一共有三个任务，请输入对应数字打开任务，输入0结束任务：\n");         scanf("%d",&flag);         switch(flag)         {             case 1:                 printf("您选择了任务一\n");                 task_1();                 break;                 /*case 2:                   printf("您选择了任务二\n");                   task_2();                   break;                   case 3:                   printf("您选择了任务三\n");                   task_3();                   break;*/             default:                 printf("请输入0、1、2或3\n");                 break;         }     }     return 0; }  void task_1(void) {     SqStack *S = NULL;      S = (SqStack *)malloc(sizeof(SqStack));     if (!S)         exit(0);      //S = InitStack(&S);     S = InitStack(S);     printf("1p %d\n",S->stacksize);     printf("该算法意在判断判断字符串中是否有中心对称关系。\n");     Matching_1(S); } void Matching_1(SqStack *S) {     char ch;     int i,n;     int flag = 1;     printf("有多少个字符：");     scanf("%d",&n);     printf("请输入%d个字符：",n);     for(i = 0;i < n/2;i++)     {         scanf(" %c",&ch);         printf("2p %c\n",ch);         S = Push(S,&ch);         printf("5p %c\n", *(S->top));     }     if(n%2 == 1)         scanf(" %c",&ch);     n = n/2;     while(n--)     {         scanf(" %c",&ch);         if(ch != Pop(S))             flag = 0;     }     printf("\n%d\n",flag); }  SqStack* InitStack(SqStack *S) {     S->base =(char*)malloc(sizeof(char) * MAXSIZE);     S->top=S->base;     S->stacksize = MAXSIZE;      return S; }  bool StackEmpty(SqStack *S) {     if(S->top == S->base)         return 0;     else         return 1; }  SqStack* Push(SqStack *S,char *ch) {     printf("3p %c\n",*ch);     if(S->top - S->base == S->stacksize)     {         printf("栈满/n");         return S;     }     *S->top = *ch;     printf("4p %c %c\n",*S->top,*S->base);     S->top++;     return S; }  char Pop(SqStack *S) {     int ch;     if(S->top == S->base)     {         printf("栈空");         return 0;     }     ch = *S->top;     S->top--;     printf("666\n%c\n666",ch);     return ch; } char GetTop(SqStack *S) {     char ch;     if(S->top!=S->base)     {         ch = *(S->top-1);         return ch;     }     return 0; } 供参考～


Question: 运算

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

无满意结贴了吧，免得留在这儿挡着别人

实践是检验真理的唯一标准。  几行代码敲一遍远远比问要体会深刻。

引用 1 楼 lin5161678的回复:能上网为什么不能自己打开编译器写代码运行呢 下次会注意的，不好意思啦

引用 2 楼 user-4的回复:为什么这样的题目都不会做？到底有没上过课？有没看过书？有没写过程序？ 实在不好意思，我不是这个意思，下次会改的

实在不好意思，我不是这个意思，下次会改的

能上网为什么不能自己打开编译器写代码运行呢

为什么这样的题目都不会做？到底有没上过课？有没看过书？有没写过程序？


Question: 求助，这玩意搞了我一个国庆了……

不要依赖调试器输出复杂数据结构！而要将复杂数据结构的整个内容在处理它的每一步使用一小段代码按自己很容易理解的格式输出，非常有助于调试！或者可以说是“基础设施” 参考下面： //不带表头结点的单向链表 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <time.h> #include <locale.h> struct NODE {     int          data;     struct NODE *next; } *head,*p,*q,*s,*p1,*p2,*q1,**ta; int i,k,n,t,m,v,N=10; int main() {     setlocale(LC_ALL,"chs");     srand(time(NULL));      head=NULL;      printf("创建%d个节点的单链表:",N);//创建N个节点的单链表     p=head;     for (i=0;i<N;i++) {         q=(struct NODE *)malloc(sizeof(struct NODE));         if (NULL==q) exit(1);         q->data=rand()%100;//填写0..99的随机值         q->next=NULL;         if (NULL==p) {             head=q;             p=head;         } else {             p->next=q;             p=q;         }     }      //输出整个单链表     s=head;     while (1) {         if (NULL==s) {             printf("\n");             break;         }         printf("%02d->",s->data);         s=s->next;     }      k=3;     v=5;     printf("将值为%d的结点插入到单链表的第%d个结点前:",v,k);//将值为v的结点插入到单链表的第k个结点前     n=0;     p=head;     while (1) {         if (NULL==p) {             break;         }         n++;         if (k==1) {             q=(struct NODE *)malloc(sizeof(struct NODE));             if (NULL==q) exit(1);             q->data=v;             q->next=head;             head=q;             break;         } else {             if (k-1==n) {                 q=(struct NODE *)malloc(sizeof(struct NODE));                 if (NULL==q) exit(1);                 q->data=v;                 q->next=p->next;                 p->next=q;                 break;             }         }         p=p->next;     }      //输出整个单链表     s=head;     while (1) {         if (NULL==s) {             printf("\n");             break;         }         printf("%02d->",s->data);         s=s->next;     }      k=5;     printf("删除第%d个节点:",k);//删除第k个节点     n=0;     p=head;     while (1) {         if (NULL==p) {             break;         }         n++;         if (k==1) {             q=head;             head=head->next;             free(q);             break;         } else {             if (k-1==n) {                 q=p->next;                 if (q) {                     p->next=q->next;                     free(q);                 }                 break;             }         }         p=p->next;     }      //输出整个单链表     s=head;     while (1) {         if (NULL==s) {             printf("\n");             break;         }         printf("%02d->",s->data);         s=s->next;     }      printf("从小到大排序:");//从小到大排序     for (p=head,p1=NULL;p!=NULL;p1=p,p=p->next) {         for (q=p->next,q1=p;q!=NULL;q1=q,q=q->next) {             if (p->data > q->data) {                  //交换data //              printf("swap %02d %02d\n",p->data,q->data); //              t=p->data;p->data=q->data;q->data=t;                  //或者                  //交换next //              printf("swap %02d %02d\n",p->data,q->data);                 if (p==head) {//p是头                     if (p->next==q) {//pq挨着                         head=q;                         p->next=q->next;                         q->next=p;                         q=p;                         p=head;                     } else {//pq不挨着                         head=q;                         p2=p->next;                         p->next=q->next;                         q->next=p2;                         q1->next=p;                         q=p;                         p=head;                     }                 } else {//p不是头                     if (p->next==q) {//pq挨着                         p1->next=q;                         p->next=q->next;                         q->next=p;                         q=p;                         p=p1->next;                     } else {//pq不挨着                         p1->next=q;                         p2=p->next;                         p->next=q->next;                         q->next=p2;                         q1->next=p;                         q=p;                         p=p1->next;                     }                 }                  //输出整个单链表 //              s=head; //              while (1) { //                  if (NULL==s) { //                      printf("\n"); //                      break; //                  } //                  printf("%02d->",s->data); //                  s=s->next; //              } //              getchar();             }         }     }      //输出整个单链表并计算链表长度n     n=0;     s=head;     while (1) {         if (NULL==s) {             printf("\n");             break;         }         printf("%02d->",s->data);         n++;         s=s->next;     }      printf("将整个链表逆序:");//将整个链表逆序     if (n>=2) {         p=head;         q=p->next;         p->next=NULL;         while (1) {             q1=q->next;             q->next=p;             p=q;             q=q1;             if (NULL==q) break;         }         head=p;     }      //输出整个单链表     s=head;     while (1) {         if (NULL==s) {             printf("\n");             break;         }         printf("%02d->",s->data);         s=s->next;     }      m=4;     n=6;     printf("将单链表中前%d个结点和后%d个结点进行互换:",m,n);//将单链表中前m个结点和后n个结点进行互换,m+n为链表总长     k=0;     p=head;     while (1) {         if (NULL==p) {             break;         }         k++;         if (m==k) {             q=p;         }         s=p;         p=p->next;     }     q1=head;     head=q->next;     s->next=q1;     q->next=NULL;      //输出整个单链表     s=head;     while (1) {         if (NULL==s) {             printf("\n");             break;         }         printf("%02d->",s->data);         s=s->next;     }      //释放所有节点     p=head;     while (1) {         if (NULL==p) {             break;         }         q=p->next;         free(p);         p=q;     }      return 0; } //创建10个节点的单链表:08->74->07->23->03->99->31->56->88->16-> //将值为5的结点插入到单链表的第3个结点前:08->74->05->07->23->03->99->31->56->88->16-> //删除第5个节点:08->74->05->07->03->99->31->56->88->16-> //从小到大排序:03->05->07->08->16->31->56->74->88->99-> //将整个链表逆序:99->88->74->56->31->16->08->07->05->03-> //将单链表中前4个结点和后6个结点进行互换:31->16->08->07->05->03->99->88->74->56-> //

引用 11 楼 听我的苹果包 的回复:[quote=引用 10 楼 YGLeeeon的回复:]虽然直接贴的你的代码，但是你给的源码其实还是有点问题的。具体修改了两个地方如下#include<stdio.h> void fun1(int a[],int p,int r); int fun2(int a[],int p,int r); void main(void) { int i,a[10]={3,6,1,0,9,4,8,5,2,7,};  //这个地方多了一个逗号，应该是{3,6,1,0,9,4,8,5,2,7} fun1(a,0,9);   for(i=0;i<=10;i++)   //这个地方数组访问越界，因为你打印了11个数，应该是for(i=0;i<10;i++) printf("%3d",a[i]);   printf("\n");} void fun1(int a[],int p,int r); { if(p<r){  int q=fun2(a,p,r);    fun1(a,p,q-1);    fun1(a,q+1,r);}} int fun2(int a[],int p,int r) { int i=p,j=r+1,x=a[p],t;   while(1)   { while(a[++i]<x);     while(a[--j]>x); if(i>=j)  break; t=a[i]; a[i]=a[j]; a[j]=t;  }   a[p]=a[j];   a[j]=x;   return(j);} 谢谢指出我的错误，下次我一定会注意的，我在好好拍拍第一次快速排序[/quote]对，确实靠第一次归位就能看懂整个过程。你用的这个无序数组还是有点代表性的，比如说，虽然把第一个元素‘3’归位了，但是‘6’和‘2’的位置也变了。你可以根据func2的作用来自己推演一下为什么‘6’和‘2’也交换了位置。

引用 10 楼 YGLeeeon的回复:虽然直接贴的你的代码，但是你给的源码其实还是有点问题的。具体修改了两个地方如下#include<stdio.h> void fun1(int a[],int p,int r); int fun2(int a[],int p,int r); void main(void) { int i,a[10]={3,6,1,0,9,4,8,5,2,7,};  //这个地方多了一个逗号，应该是{3,6,1,0,9,4,8,5,2,7} fun1(a,0,9);   for(i=0;i<=10;i++)   //这个地方数组访问越界，因为你打印了11个数，应该是for(i=0;i<10;i++) printf("%3d",a[i]);   printf("\n");} void fun1(int a[],int p,int r); { if(p<r){  int q=fun2(a,p,r);    fun1(a,p,q-1);    fun1(a,q+1,r);}} int fun2(int a[],int p,int r) { int i=p,j=r+1,x=a[p],t;   while(1)   { while(a[++i]<x);     while(a[--j]>x); if(i>=j)  break; t=a[i]; a[i]=a[j]; a[j]=t;  }   a[p]=a[j];   a[j]=x;   return(j);} 谢谢指出我的错误，下次我一定会注意的，我在好好拍拍第一次快速排序

引用 7 楼 YGLeeeon的回复: 完全粘贴你的代码，然后把递归注释掉，只保留第一次func2的调用，直接就让func1返回，显然是对第一个元素归位，然后输出的结果就是3左边的都比他小右边的都比他大 这应该是以3为中心的吧

引用 7 楼 YGLeeeon的回复: 完全粘贴你的代码，然后把递归注释掉，只保留第一次func2的调用，直接就让func1返回，显然是对第一个元素归位，然后输出的结果就是3左边的都比他小右边的都比他大 这就是第一次的快速排序么……看来我果然排错了

第一次快速排序好像拍错了……

调试程序要有足够的耐心

引用 3 楼 SuperDay的回复:又见楼主 emmmmm我自学c语言所以有些地方搞不明白很难受啊

又见楼主

引用 1 楼 听我的苹果包 的回复:没人么……希望有大佬能解决我的疑惑 那你在调用之后加个输出的看下不就清楚了

没人么……希望有大佬能解决我的疑惑


Question: 求指点

首先你的for循环一个都没得大括号，其次双重for循环的时候i--和j--变成了i-和j-


Question: 求助

for循环中每条语句之间用分号;

for循环中也要用;而不是,

谢谢谢谢

好的，谢谢了！！！！！

光标都在那了，不加个分号么？？？

So, what happened?


Question: c语言

1：没直接关系 2：要转化，可以查表，也可以用类型转换 3：类型转换， char c='1'; int i=c;

引用 楼主 weixin_45706940 的回复:ascll码值与一般数值有关系吗，比如说1的值与他的ascll码值有关系吗，如果将字符1转化为整数怎么写  一般数值在ascll表中存在的只有0~9，这十个数从小到大排在一起，0和'0'对应的ASCII值没有直接关系，'0'的值只是ASCII字符排列的结果，要从'7'得到7，使用强制类型转换是不行的，这样会将'7'变成其ASCII值，需要用'7'-'0'得到7


Question: c语言

图片中   中间     的    ”例如  “  的    上一行     写的      清清楚楚

这不都写了吗，逗号表达式


Question: C语言初学者在线请教大佬

随机数+输入输出


Question: 这个咋回事啊？来个人帮我解决解决一下呗！

不对呀，dev c++ 就是一个 ide啊，编译器还是 gcc，难道dev c++ 的默认编译选项 有 -m16 ？？

重新安装dev c++64位的版本，居然还有默认设置16位的~换个安装包吧

噗，编译内容发一下（软件下面的小窗口

引用 1 楼 提及的回复:什么编译器？ 编译选项？  怎么生成 16位程序了 dev-c++ 我也不知道，咋搞呀

什么编译器？ 编译选项？  怎么生成 16位程序了


Question: 一小段代码

感谢各位大佬指点，我有点粗心了，感谢😂😂😂。

当然实际不能这样写，太麻烦了。

代码应该是sum=sum+(-1)^i，思路是 i 从1循环到n，逐项计算项的值并累加到sum中。

这个数列共n项，从1开始编号的话最后一项的编号也是n。 某个数的n次方就是有n个该数自乘，比如最后一项表示有n个-1相乘，如果n是偶数这项就等于1，n是奇数这项就等于-1。

那这个题目的意思是负一，一，一直这样循环，最后那个负一的n次方就是总共出现了多少个负一吗？

伪代码不像伪代码，代码不像代码，异或也不是这么用的 sum+=pow(-1,i);

明显代码敲错了，sum 那一句应该是  sum=sum+(-1)^i;


Question: c语言题目

用一个char型变量存储一个字符，可以根据ascii码表查找出这个字符存储在这个变量里的值是多少，所以同面值转换就是把数组字符转换为该字符对应的数值存储起来。来一张码表：  比如说字符char a =‘3’；那么a的值就是51，那么a='3'-'0';就是a=51-48;不能再解释了就这么明白

ASCII码表中，数字字符从'0'到'9'是连续的，数字字符的ASCII码值减去字符'0'的ASCII码值等于该字符对应的整型值。


Question: 求大佬指导一下

引用 1 楼 user-1 的回复:1. city 输出错误，是因为打印语句错了，应该是： printf("%s %s\n",list[i].name,list[i].city); 你写成了： printf("%s &s\n",list[i].name,list[i].city);  2. 单条搜索找不到，是因为 select() 函数里面，没有给变量 i 赋初值：int i;  感谢大佬，都怪我写代码不认真


Question: C语言程序设计

#include<stdio.h>  int main() {     char i;     scanf("%c",&i);     printf("\'%c\'\n",i);     printf("\"%c\"\n",i);     return 0; }


Question: vs code用疯了，编写c语言的时候运用scanf函数闪退

引用 10 楼 qqdreamypp 的回复:不是这个问题，所有东西都已就绪，没有任何错误  所以，说了半天，你还是没有将代码放上来

引用 2 楼 提及的回复:那是因为缓存问题，输入的时候会带上你按的回车键，就是 `\n`  而你的getchar() 就读取了 \n， 就不会等待了 那有什么解决方案吗?

Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

引用 9 楼 自信男孩的回复:[quote=引用 5 楼 提及 的回复:] 比如  int x = 0; scanf("%d", x); 需要这样吧： scanf("%d", &x);[/quote] 不是这个问题，所有东西都已就绪，没有任何错误

新手老老实实用vs不好吗?

引用 5 楼 提及 的回复:比如  int x = 0; scanf("%d", x); 需要这样吧： scanf("%d", &x);

比如  int x = 0; scanf("%d", x);

还有可能程序出错了，导致直接退出

可是pause也没用诶😩😩

vs code~搞死新手型


Question: c语言文件的输入输出---乱码

引用 16 楼 赵4老师 的回复:以为用VS2019，MSDN98就没用的人，充分暴露了自己是Windows软件开发门外汉。 大哥我才刚刚自学完c，现在还只是在复习阶段

引用 14 楼 赵4老师的回复:[quote=引用 13 楼 Gnglas 的回复:] [quote=引用 11 楼 赵4老师的回复:]MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 这个是什么啊000000000[/quote] 大名鼎鼎的和VC6配套的离线MSDN[/quote] 我用的vs2019。。。。。

引用 9 楼 赵4老师 的回复:你不会全选，复制，粘贴到百度翻译（fanyi.baidu.com）翻译一下啊？ 字符串模式指定为文件请求的访问类型，如下所示：    “R”    打开阅读。如果文件不存在或找不到，则FPEN调用失败。    “W”    打开一个空文件进行写入。如果给定文件存在，则其内容被销毁。    “一”    在文件结束之前打开文件（追加），而不必在写入新数据之前删除EOF标记；如果文件不存在，则首先创建文件。    “R+”    为阅读和写作打开。（文件必须存在。）    “W+”    打开一个空文件进行读写。如果给定文件存在，则其内容被销毁。    “A+”    打开读取和追加；追加操作包括在新数据写入文件之前移除EOF标记，在写入完成后恢复EOF标记；如果不存在，则首先创建文件。    当使用“A”或“A+”访问类型打开文件时，所有写操作都会在文件末尾进行。可以使用fseek或rewind重新定位文件指针，但在执行任何写操作之前，总是将其移回文件末尾。因此，无法重写现有数据。    “A”模式在附加到文件之前不会删除EOF标记。追加后，ms-dos type命令只显示原始eof标记之前的数据，而不显示追加到文件的任何数据。“A+”模式在附加到文件之前会删除EOF标记。追加后，ms-dos type命令显示文件中的所有数据。附加到用ctrl+z eof标记终止的流文件时需要使用“a+”模式。    如果指定了“r+”、“w+”或“a+”访问类型，则允许读取和写入（文件被称为打开以进行“更新”）。但是，当您在读和写之间切换时，必须有一个中间的fflush、fsetpos、fseek或rewind操作。如果需要，可以为fsetpos或fseek操作指定当前位置。    除上述值外，模式中还可以包含以下字符，以指定换行字符的转换模式：    T    以文本（翻译）模式打开。在这种模式下，ctrl+z在输入时被解释为文件结束字符。在用“a+”打开进行读/写的文件中，fopen会检查文件末尾是否有ctrl+z，并在可能的情况下将其删除。之所以这样做，是因为使用fseek和ftell在以ctrl+z结尾的文件中移动，可能会导致fseek在文件结尾附近的行为不正常。    此外，在文本模式下，回车换行组合在输入时转换为单行换行，换行字符在输出时转换为回车换行组合。当unicode stream-i/o函数以文本模式（默认）运行时，源或目标流被假定为多字节字符序列。因此，unicode流输入函数将多字节字符转换为宽字符（就像通过调用mbtowc函数一样）。出于同样的原因，unicode流输出函数将宽字符转换为多字节字符（就像通过调用wctomb函数一样）。    乙    以二进制（未翻译）模式打开；涉及回车和换行字符的翻译被禁止。    如果T或B未在模式中给定，则默认转换模式由全局变量_fmode定义。如果参数的前缀是t或b，则函数将失败并返回null。    有关在Unicode和多字节流I/O中使用文本和二进制模式的详细信息，请参阅文本和二进制模式下的文本和二进制模式文件I/O和Unicode流I/O。    C类    为关联的文件名启用commit标志，以便在调用fflush或flushall时将文件缓冲区的内容直接写入磁盘。    n个    将关联文件名的提交标志重置为“无提交”。这是默认值。如果您将程序链接到commode.obj，它还会覆盖全局提交标志。除非您显式地将程序与commode.obj链接，否则全局提交标志默认为“no commit”。真不知道大佬从哪扒出来的，不过还是谢谢了

引用 7 楼 赵4老师的回复:The character string mode specifies the type of access requested for the file, as follows:  "r"  Opens for reading. If the file does not exist or cannot be found, the fopen call fails.  "w"  Opens an empty file for writing. If the given file exists, its contents are destroyed.  "a"  Opens for writing at the end of the file (appending) without removing the EOF marker before writing new data to the file; creates the file first if it doesn’t exist.  "r+"  Opens for both reading and writing. (The file must exist.)  "w+"  Opens an empty file for both reading and writing. If the given file exists, its contents are destroyed.  "a+"  Opens for reading and appending; the appending operation includes the removal of the EOF marker before new data is written to the file and the EOF marker is restored after writing is complete; creates the file first if it doesn’t exist.  When a file is opened with the "a" or "a+" access type, all write operations occur at the end of the file. The file pointer can be repositioned using fseek or rewind, but is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten.  The "a" mode does not remove the EOF marker before appending to the file. After appending has occurred, the MS-DOS TYPE command only shows data up to the original EOF marker and not any data appended to the file. The "a+" mode does remove the EOF marker before appending to the file. After appending, the MS-DOS TYPE command shows all data in the file. The "a+" mode is required for appending to a stream file that is terminated with the CTRL+Z EOF marker.  When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for “update”). However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. The current position can be specified for the fsetpos or fseek operation, if desired.  In addition to the above values, the following characters can be included in mode to specify the translation mode for newline characters:  t  Open in text (translated) mode. In this mode, CTRL+Z is interpreted as an end-of-file character on input. In files opened for reading/writing with "a+", fopen checks for a CTRL+Z at the end of the file and removes it, if possible. This is done because using fseek and ftell to move within a file that ends with a CTRL+Z, may cause fseek to behave improperly near the end of the file.   Also, in text mode, carriage return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed combinations on output. When a Unicode stream-I/O function operates in text mode (the default), the source or destination stream is assumed to be a sequence of multibyte characters. Therefore, the Unicode stream-input functions convert multibyte characters to wide characters (as if by a call to the mbtowc function). For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters (as if by a call to the wctomb function).  b  Open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed.   If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. If t or b is prefixed to the argument, the function fails and returns NULL.   For more information about using text and binary modes in Unicode and multibyte stream-I/O, see Text and Binary Mode File I/O and Unicode Stream I/O in Text and Binary Modes.  c  Enable the commit flag for the associated filename so that the contents of the file buffer are written directly to disk if either fflush or _flushall is called.  n  Reset the commit flag for the associated filename to “no-commit.” This is the default. It also overrides the global commit flag if you link your program with COMMODE.OBJ. The global commit flag default is “no-commit” unless you explicitly link your program with COMMODE.OBJ. 完全看不懂啊            。

引用 13 楼 Gnglas 的回复:[quote=引用 11 楼 赵4老师的回复:]MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 这个是什么啊000000000[/quote] 大名鼎鼎的和VC6配套的离线MSDN

引用 11 楼 赵4老师的回复:MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 这个是什么啊000000000

你不会全选，复制，粘贴到百度翻译（fanyi.baidu.com）翻译一下啊？

我也不记得了，今天刚学

引用 4 楼 Gnglas 的回复：[quote=引用 1 楼 SuperDay的回复:]打开读写文件应该是rw wt+                                     ，[/quote]哦，忘记了

引用 1 楼 SuperDay的回复:打开读写文件应该是rw wt+                                     ，

引用 2 楼 自信男孩的回复:在读文件之前，先把fp更新一下，因为上面的写文件已经把fp指向了文件末尾，所以，你读取的时候要从文件开头读取。rewind(fp);加一下这句，在读取之前。  另外，EOF是-1是int类型，因此ch，定义为int类型。  把这两个地方改一下试试～ 大佬好久不见了，感谢

打开读写文件应该是rw


Question: 【求问】C语言printf对整数带符号位+输出？

Flag Directives The first optional field of the format specification is flags. A flag directive is a character that justifies output and prints signs, blanks, decimal points, and octal and hexadecimal prefixes. More than one flag directive may appear in a format specification.   Table R.4   Flag Characters  Flag Meaning Default  – Left align the result within the given field width.  Right align.  + Prefix the output value with a sign (+ or –) if the output value is of a signed type. Sign appears only for negative signed values (–).  0 If width is prefixed with 0, zeros are added until the minimum width is reached. If 0 and – appear, the 0 is ignored. If 0 is specified with an integer format (i, u, x, X, o, d) the 0 is ignored.  No padding.  blank (' ') Prefix the output value with a blank if the output value is signed and positive; the blank is ignored if both the blank and + flags appear. No blank appears.  # When used with the o, x, or X format, the # flag prefixes any nonzero output value with 0, 0x, or 0X, respectively. No blank appears.    When used with the e, E, or f format, the # flag forces the output value to contain a decimal point in all cases.  Decimal point appears only if digits follow it.    When used with the g or G format, the # flag forces the output value to contain a decimal point in all cases and prevents the truncation of trailing zeros.  Ignored when used with c, d, i, u, or s.  Decimal point appears only if digits follow it. Trailing zeros are truncated.

引用 2 楼 user-3 的回复：%+d 的确是一个比较少用的格式谢谢🙏太感谢了

嗯，这个没办法都记住，要查手册

%+d 的确是一个比较少用的格式

格式控制里面查一下，可能会有的


Question: c语言菜鸡可学

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

哇塞，感谢大佬

印象笔记or有道笔记

总结得不错，楼主可以试着写博客或者blink


Question: 求助数据结构单链表查找报错c2676

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

建议贴出源码，尤其是一些变量的定义，声明；从错误内容可知是类型未定义～

引用 3 楼 user-4 的回复：C语言的话可以用内存比较函数memcmp，用法请自行百度谢谢

引用 2 楼 qq_45424859 的回复:引用 1 楼 gouyanfen 的回复：出错提示写的很清楚，ElementType这个结构没有定义!=操作符的意义，结构体断定是不是不相等，需要自己重载操作符，或者你直接对比不相等的条件我直接对比的。 你需要对比结构中的元素是否不相等，链表里面有指向下个的指针，这个值一般是不会相等的

C语言的话可以用内存比较函数memcmp，用法请自行百度


Question: 题目：求0—7所能组成的奇数个数。

错了错了，刚才运行了一下所有的结果，发现重复了

首位不为0，个位不为偶数，中间位不重复的所有排列，总共17280种 通过排列组合公式也可以验证个位为奇数的全排列有7的阶乘*4=20160 //个位是4种选择（1357） 除去首位为0的情况 1*6的阶乘*4 //首位为0（1种选择），个位为奇数4种选择=2880 所以一共有20160-2880=17280种组合 void main() {     int[] num = {0, 1, 2, 3, 4, 5, 6, 7};     int[] idx = {0, 0, 0, 0, 0, 0, 0, 0};     int count = 0, exist = 0;     for (idx[0]=1; idx[0]<8; idx[0]++) { //首位不为0         for (idx[7] = 1; idx[7]<8; idx[7]+=2) { //个位不为偶数             if (idx[7] == idx[0]) continue;             while (true) { //中间位不重复                 for (int i=6; i>1; i--) {                     if (idx[i] >= 8) {                         idx[i] = 0;                         idx[i-1]++;                     }                 }                 if (idx[1] >= 8) {                     for (int i=1; i<7; i++) {                         idx[i] = 0;                     }                     break;                 }                 exist = 0;                 for (int i=1; i<7; i++) {                     if (idx[i] == idx[0] || idx[i] == idx[7]) {                         exist = 1;                         break;                     }                     for (int j=i+1; j<7; j++) {                         if (idx[i] == idx[j]) {                             exist = 1;                             break;                         }                     }                     if (exist == 1) break;                 }                 if (exist == 0) {                     int n = idx[0];                     for (int i=1; i<7; i++) {                         n = 10*n + num[idx[i]];                     }                     n = 10*n + num[idx[7]];                     printf("%d\n", n);                     count++;                 }                 idx[6]++;             }         }     }     printf("%d\n", count); // }

引用 4 楼 qybao 的回复:用排列组合公式可以吗？ 0-7一共8个数字做全排列=8的阶乘=40320 减去 数字0排在第一位的情况（出去0的7个数字做全排列）=7的阶乘=5040  然后总的排列情况分布是，奇数偶数各一半（因为个位数1357，0246各占一半） 所以结果是 （40320-5040）/ 2 = 17640

引用 7 楼 qq_33437675的回复:[quote=引用 4 楼 qybao的回复:]用排列组合公式可以吗？ 0-7一共8个数字做全排列=8的阶乘=40320 减去 数字0排在第一位的情况（出去0的7个数字做全排列）=7的阶乘=5040  然后总的排列情况分布是，奇数偶数各一半（因为个位数1357，0246各占一半） 所以结果是 （40320-5040）/ 2 = 17640 我靠，还有这种方法，可以可以。[/quote] 不过用这种方法这道题就没有一点乐趣了

引用 4 楼 qybao的回复:用排列组合公式可以吗？ 0-7一共8个数字做全排列=8的阶乘=40320 减去 数字0排在第一位的情况（出去0的7个数字做全排列）=7的阶乘=5040  然后总的排列情况分布是，奇数偶数各一半（因为个位数1357，0246各占一半） 所以结果是 （40320-5040）/ 2 = 17640 我靠，还有这种方法，可以可以。

引用 5 楼 qq_33437675 的回复:0--7组成的8位数，每个数只能有一个。然后求奇数按照 #4的说法做就可以了

0--7组成的8位数，每个数只能有一个。然后求奇数

无限个 哪怕不停1重复 都能构造无限个奇数  把你的题目描述完整

这个应该对了吧 谁帮我看看


Question: 在线等 急

什么意思啊？ for包括下面那个 if 和 break

缩进的那一部分


Question: 浮点数

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

讲一下第一题： float在计算机中通常占32位：1位符号位，23位尾数部分，8位阶码。  b = 2.0e20+1.0 = 0.200000000000000000001e21  尾数部分是 0.200000000000000000001 转成二进制后远不止23位（小数转二进制乘2取整数部分就行），于是多余的丢弃了。而这里很显然丢弃的是那0.000000....1。 因此存储的数和 2.0e20 是一样的。他们相减也就是0了。


Question: 如何判断一个C函数支持多线程

判断是否可重入，两个线程同时调用会不会对对方造成影响

一般用到静态变量的都是不支持多线程的

百度搜相关关键字。


Question: 求大佬帮助写个简单的C语言程序

必有重谢，有大佬帮助么


Question: 兼容DC的问题

引用 6 楼 Intel0011 的回复:这个是Windows管理资源的方式，避免资源泄漏 经过测试和推测，我觉得之前之所以不行的原因是因为一个位图不能同时加入两个DC，之前的DC没删，使得下一次创建DC后，那个位图句柄依然加入的是上个DC，使得加入当前DC失效。我将位图放到WM_PAINT中产生，依然不删除DC，这次可行了。把原DC还原可行的原因应该也是释放了hbitmap。

这个是Windows管理资源的方式，避免资源泄漏

引用 4 楼 Intel0011 的回复:是不同的DC  case WM_PAINT: {         HBITMAP hOldBitmap;     ValidateRect( h , NULL );     hdc = GetDC( h );     hmdc= CreateCompatibleDC( hdc );      //printf("%d\n", hmdc );     hOldBitmap = SelectObject( hmdc , hbitmap ); //加了接收返回值     BitBlt( hdc , 0 , 0 , cx , cy , hmdc , 0, 0 , SRCCOPY );     SelectObject( hmdc , hOldBitmap); //将hbitmap2改为hOldBitmap     //DeleteDC( hmdc );     ReleaseDC( h , hdc );     return 0;  }  竟然真的成功了，可是为什么会这样呢？创建的是不同的DC，为什么需要在删除前把原位图加进去？ 我测试了下，之后图片加入新DC得到的返回值确实是0，也就是加入失败，也就是说这些DC共用的同一个位图吗？不应该吧

引用 1 楼 Intel0011 的回复: hOldBitmap = SelectObject(hmdc, hbitmap); BitBlt(hdc, 0, 0, cx, cy, hmdc, 0, 0, SRCCOPY); SelectObject(hmdc, hOldBitmap); //将原来的放回去  老哥，你的回答没有对应我的问题呀，你的是对于同一个DC的加入和释放，我的是对于不同的DC的处理，我的问题也是为什么新创建的DC无法显示


Question: C语言自增自减的运用

++在前 先加后用 ++在后 先用后加

不要在一条表达式里对一个变量自增两次就对了，不同编译器可能结果不同

首先弄清楚x是变量，x++和++x是表达式 表达式首先有自己的功能，比如x++和++x的功能都是使x+1 然后表达式有自己的值，x++的值是未进行运算之前的x的值，而++x的值是运算之后x的值（这是定义下来的，不需要讲什么道理） 最后像(x++)+(++x)+(x++)+(++x)...的操作也就出卷子的老师喜欢玩了


Question: C语言自增自减的运用

就这么一二个知识点，折腾出一堆的题目，学院派的作风


Question: c语言相关问题

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

i--不是返回i原先的值么？所以就是一样的


Question: 猴子分桃   谁能用逆向分析给写一下这题，设第五只猴拿走了n个桃

各位路过大佬，有关必回，感谢！

支持，期待回访

#include <stdio.h>  int main(void) {         int i = 0, n = 1, t = n;         for(i = 0; i < 4; i++){                 if(n%5 == 1 && n%4 == 0)                         n = n/4*5 + 1;                 else                         i = -1, n = ++t;         }         printf("%d\n", n);          return 0; }

#include<stdio.h> #include<stdlib.h>  int main()  { 	int n,i,t;  	for (n = 6; ; n++) 	{ 		t = n; 		 		 		for (i = 1; i <= 5; i++) 		{ 			{ 				if ((t - 1) % 5 != 0)  				break;   			    t = 4 * (t - 1) / 5;  				  				 			}  		}  		  		 		if (i >5)  		{ 			printf("%6d", n);  			break; 		}

每次 ans*5）+1

学这个好难吧

引用 2 楼 qybao的回复:说错了，不是那么简单，第四只拿走后剩5*n+1，所以拿走前应该是(5*n+1)除以5分之4加1，所以还要考虑整除4，所以不能单纯以最后一只猴子拿走为输入，应该是循环判断 他说了最少有几个那就是相当于最后一只猴子拿了一个鸭

最少嘛最后一只猴子只拿了1个也就是第4只拿了（1*5＋1）6个以此类推喽，最后的结果挺大的

不知道，不明白

这是什么东西啊，挺深啊的

假设一开始桃子数为X，存在一个数Y。使得X+Y=Sum。Sum能够被5整除且减去Sum/5后，仍旧能被5整除，如此能被整除5次，也就是说Sum最小为5的5次方（3125）。我们把五个桃子作为一个整体，总数除以5总是余1。所以我们可以想一开始就缺少4个桃子，即Y为4。所以X为3125-4=3121。

好难啊，没看懂。。。。

你的代码运行结果是对的，但不是逆向分析，也就是不是从后往前推（你的代码是从前往后推，也就是先第一只猴子判断，符合后再第二只猴子判断，等等），逆向分析的代码在4楼有，你可以看看区别（先从第五只猴子判断，符合后再判断第四只，等等）。

同意11楼，这个问题比较简单

感谢楼主无私分享，希望能早日学会

引用 16 楼 wowpH 的回复：[quote=引用 4 楼 qybao的回复:]void main() {     int total = 0;     for (int n=1, i=0; ; n++) {         total = 5 * n + 1;         for (i=0; i<4; i++) {             if (total % 4 != 0) break;             total = total * 5 / 4 + 1;         }         if (i==4) break;     }     print("total=%d", total); } 说实话我也没看懂。 n = 1 第5只猴子拿了 1 个桃子。 运行结果 3121，顺着推的话， (3121 - 1) / 5 * 4 = 2496 (2496 - 1) / 5 * 4 = 1996 (1996 - 1) / 5 * 4 = 1596 (1596 - 1) / 5 * 4 = 1276 (1276 - 1) / 5 = 255 第5只拿的是255个桃子。这不矛盾了啊。[/quote]一只猴子能拿这么多吗  他开车来的吗

引用 36 楼 coder_wangp 的回复:6*5+1=31 31*5+1=156 156*5+1=781 781*5+1=3906再认真想一下

我太难了。。。。

写的非常好！


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

while判断时a++和b--都是后增和后减，因此先判断表达式的值在计算。所以结果是0,1


Question: C语言新手求救

引用 3 楼 user-1的回复:[quote=引用 2 楼 xghrdvhh的回复:][quote=引用 1 楼 user-1的回复:]之前好像给你写过。不过现在看不到那个帖子了。大概是你删了或者管理员删了。 内什么，之前的应该不是我，新人第一次发求助帖[/quote] 哦哦，我看到题目一样。以为是一个人。。。。。[/quote] 找到了，谢谢大佬啦，谢谢谢谢

引用 3 楼 user-1的回复:[quote=引用 2 楼 xghrdvhh的回复:][quote=引用 1 楼 user-1的回复:]之前好像给你写过。不过现在看不到那个帖子了。大概是你删了或者管理员删了。 内什么，之前的应该不是我，新人第一次发求助帖[/quote] 哦哦，我看到题目一样。以为是一个人。。。。。[/quote] 求问怎么改 谢谢大佬_(:з」∠)_

引用 4 楼 user-1的回复:我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《c语言求解答》, 一起来围观吧 https://bbs.csdn.net/topics/394670751 一模一样的题目。。。。

引用 2 楼 xghrdvhh的回复:[quote=引用 1 楼 user-1的回复:]之前好像给你写过。不过现在看不到那个帖子了。大概是你删了或者管理员删了。 内什么，之前的应该不是我，新人第一次发求助帖[/quote] 哦哦，我看到题目一样。以为是一个人。。。。。

引用 1 楼 user-1的回复:之前好像给你写过。不过现在看不到那个帖子了。大概是你删了或者管理员删了。 内什么，之前的应该不是我，新人第一次发求助帖

之前好像给你写过。不过现在看不到那个帖子了。大概是你删了或者管理员删了。


Question: 用C#编写程序，键盘输入整数数组元素，然后将数组元素倒置（即前后对应元素互换），并输出数组元素值。

有问题的地方很多 1、n实始化为数组的个数，最好在循环中使用了，虽然你的程序逻辑没有问题。 2、没有数据的输入 3、数组没有倒置


Question: 请教问题谢谢大佬

7的二进制为0000 0111 3的二进制为0000 0011 ^异或符号，相同为0，不同为1 4的二进制为0000 0100 把1、2、4行对比一下

引用 1 楼 user-3 的回复：4就是0000 0100，取反就是1111 1011 题二明显是转化成二进制 好好去做作业吧这个a=7^3运行下来是4，怎么理解


Question: 求助

如果在循环里，那么每次循环t=1;都会被赋值1，和你的需求应该是不匹配的

t = i*2 -1

在循环体里面赋值t=1，这样的话t递增2变成无效操作


Question: c语言动态链表输出乱码

引用 2 楼 Gnglas 的回复：引用 1 楼 user-2 的回复:printf("%d %c\n",asd->fen,asd->name);改成%s改成%s他会警告说printf引用字符形式什么意思？

引用 1 楼 user-2 的回复:printf("%d %c\n",asd->fen,asd->name);改成%s那愉快的结贴了

引用 1 楼 user-2 的回复:printf("%d %c\n",asd->fen,asd->name);改成%s好吧你是对的


Question: 初学c语言 求助！！

解决了可以选择无满意结帖

已经解决了。


Question: c语言链表，程序出问题，求助

引用 9 楼 與蘤舊縐 的回复: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node { 	int num = NULL; 	struct Node* next;  }Node; int main() { 	Node* head=(Node*)malloc(sizeof(Node)); 	Node* newNode = NULL; 	Node* temp = head; 	int isContinue = 1; 	while (isContinue == 1) { 		Node* newNode = (Node*)malloc(sizeof(Node)); 		scanf_s("%d", &newNode->num); 		newNode->next = NULL; 		temp->next = newNode; 		temp = newNode; 		printf("to choose if continue\n"); 		scanf_s("%d", &isContinue); 	} 	temp = head->next;//注意在头指针中不存储数据 	while (temp != NULL) { 		printf("%d\n", temp->num); 		temp = temp->next; 	} 	return  } 我感觉26行可以省略

引用 9 楼 與蘤舊縐的回复: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node { 	int num = NULL; 	struct Node* next;  }Node; int main() { 	Node* head=(Node*)malloc(sizeof(Node)); 	Node* newNode = NULL; 	Node* temp = head; 	int isContinue = 1; 	while (isContinue == 1) { 		Node* newNode = (Node*)malloc(sizeof(Node)); 		scanf_s("%d", &newNode->num); 		newNode->next = NULL; 		temp->next = newNode; 		temp = newNode; 		printf("to choose if continue\n"); 		scanf_s("%d", &isContinue); 	} 	temp = head->next;//注意在头指针中不存储数据 	while (temp != NULL) { 		printf("%d\n", temp->num); 		temp = temp->next; 	} 	return 0; }  谢谢。。。。。。。。

vs里面用的_getch()，但是vs2019似乎不认，我感觉它抽风了，，问题不大，我给你重写个参考一下

引用 5 楼 與蘤舊縐的回复:你把while里的改过来了吗，我的vs不认你的_getch()，我也很无奈啊 我好像记得有getch这函数

引用 3 楼 與蘤舊縐的回复:哦，不好意思，p1才是头指针 改了多少遍，都快烦死了

引用 3 楼 與蘤舊縐的回复:哦，不好意思，p1才是头指针 大哥，现在怎么办。。。。。

哦，不好意思，p1才是头指针

我想你的hard应该是head吧，另外拿头指针去遍历的话下次要用头指针可没有了哦


Question: 这个错误百分之七十

引用 2 楼 與蘤舊縐的回复:a+b>c足以，不知道你加这么多干嘛，如果你是想增强判断效率的话也不是这么写的，而且这么简单的判断大可不必 嗯，谢谢，好像可以了

你的判断有问题


Question: 讨论一下链表和数组的好与坏？

引用 3 楼 htoom 的回复:[quote=引用 1 楼 轻箬笠 的回复：]链表删除节点，内存依然被占用？难道楼主删除节点的时候，不释放内存的？ 链表和数组的差别就在于查询和插入操作的快慢吧。删除节点不只是把指针指向改变了吗？[/quote]  指针设置为null之前先释放内存

引用 3 楼 htoom 的回复:[quote=引用 1 楼 轻箬笠 的回复：]链表删除节点，内存依然被占用？难道楼主删除节点的时候，不释放内存的？ 链表和数组的差别就在于查询和插入操作的快慢吧。删除节点不只是把指针指向改变了吗？[/quote] 删除节点，需要改变指针指向，并且free被删除的节点。

引用 1 楼 轻箬笠 的回复：链表删除节点，内存依然被占用？难道楼主删除节点的时候，不释放内存的？ 链表和数组的差别就在于查询和插入操作的快慢吧。删除节点不只是把指针指向改变了吗？

链表不能随机访问啊，二者差别太大，比较没有意义


Question: C语言基础刚看完，请问接下来可以做些什么呢？

引用 20 楼 qq_39082825的回复:[quote=引用 18 楼 與蘤舊縐的回复:]引用可是不知道接触哪几类，其实都不太了解，以前学过一小段php，现在都忘了，就记得each，所以也不知道学啥，家里也在催出去找工作，头大  那就先找份和编程无关的工作，慢慢提升编程能力，然后跳槽呗 web前端html+css+js是入门标配，后端php开发可以小型网站，大的就用java了，当然还可以用别的，移动端开发差不多 这几个入门应该比较容易，不需要太高深的数理知识的支撑，但是想成大佬一样很难 其他的像做游戏等等都是可行的方向 当然像人工智能这种就省省吧，没得学历估计都没得展现实力的机会 打算去尝试一下java，大佬有视频之类的吗？[/quote] Java学习视频我有，私聊

学学物联网嵌入式挺好(计算机专业与电信类专业均可选择)

看完基础就多刷刷题，学点数据结构和算法，巩固基础后以后学啥都是几天的事情

继续看基础，看到随心所欲，把指针数组搞得服服帖帖的，

去bilibili知乎刷刷，还早，想学啥学啥

引用 7 楼 qq_39082825 的回复：[quote=引用 3 楼 不知道用什么名字。 的回复:] 自己搞个完整的项目试试 项目？  入门应该做不出来，  还需要进阶，但不知道以后做哪方面 听同学说只学C不太容易找工作[/quote]我觉得你可以去网上找找题做做，（推荐蓝桥杯题目，不是特别简单，只要去做，能做出来的。）或者去买本书看看。

刷题的话 洛谷 力扣 都可以

去看看Java，以后去工作了基本上都会用Java的

引用 20 楼 qq_39082825的回复:[quote=引用 18 楼 與蘤舊縐的回复:]引用可是不知道接触哪几类，其实都不太了解，以前学过一小段php，现在都忘了，就记得each，所以也不知道学啥，家里也在催出去找工作，头大  那就先找份和编程无关的工作，慢慢提升编程能力，然后跳槽呗 web前端html+css+js是入门标配，后端php开发可以小型网站，大的就用java了，当然还可以用别的，移动端开发差不多 这几个入门应该比较容易，不需要太高深的数理知识的支撑，但是想成大佬一样很难 其他的像做游戏等等都是可行的方向 当然像人工智能这种就省省吧，没得学历估计都没得展现实力的机会 打算去尝试一下java，大佬有视频之类的吗？[/quote] c和c++都要学会，然后再去学Java，不然你干4到5年还是个码农，工作中也要学习，数据结构，算法导论，离散数学，

引用 楼主 qq_39082825的回复:做什么比较好就业，求大佬指点迷津 c学完了，还有c+，c#啊！你还要学java啊！

可以多多刷题 然后做一些项目

系统的看书，整体把握，对于知识点的讲解和实践可以看CSDN博客文章，人家有讲解并且有实例代码，自己多调试代码就可以学的差不多。

引用 楼主 qq_39082825的回复:做什么比较好就业，求大佬指点迷津 算法和编程，大数据和逆向分析

引用 楼主 qq_39082825的回复:做什么比较好就业，求大佬指点迷津 可以做做基础练习  看看掌握度

基础不牢地动山摇，自己做做项目

数据结构化设计方法记得吗走吧走吧

还需要继续努力学习呗

试着自己做做题，数据结构和算法也最好懂一些

写代码，做项目不香吗？这个贪吃蛇试试


确实不兼容，但是可以不理它，仍然可以基本正常使用。另外，VC6在64位Windows7下调试的时候，再结束调试，程序无法退出，这是有一个补丁可以解决的，建议下载使用。

引用 楼主 Hero2902 的回复:我的电脑Windows7与vc6.0不兼容 跪求大佬教一教怎么弄 亲测可以解决兼容问题的： 1.打上VC6.0 sp6补丁 2.下载vc6.0 filetools工具并安装，解决打开项目工程文件崩溃的问题。https://download.csdn.net/download/zyf1109/4074133  以上均为微软官方提供的补丁，可以安全放心使用。

百度上方法很多 https://jingyan.baidu.com/article/3a2f7c2e637f5f26aed61155.html 实在不行的话换系统成本有点高，要不换个编辑器吧


"D:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE"

引用 13 楼 Hero2902 的回复:[quote=引用 11 楼 赵4老师的回复:][quote=引用 10 楼 Hero2902 的回复:] [quote=引用 9 楼 赵4老师的回复:]VC6EN https://pan.baidu.com/s/1_t4HPLJZCdiIaJKecguK_A 你好 这中文版需要怎么弄[/quote] 据说微软从来就没有出过VC6的中文版。 英文版凑合用吧。[/quote] 打开没问题 运行时 又是不兼容[/quote] 你不会在资源管理器中在exe文件上点鼠标右键，属性，兼容性里面设置以WindowsXP兼容模式运行吗？

引用 11 楼 赵4老师的回复:[quote=引用 10 楼 Hero2902 的回复:] [quote=引用 9 楼 赵4老师的回复:]VC6EN https://pan.baidu.com/s/1_t4HPLJZCdiIaJKecguK_A 你好 这中文版需要怎么弄[/quote] 据说微软从来就没有出过VC6的中文版。 英文版凑合用吧。[/quote] 打开没问题 运行时 又是不兼容

找一个绿色版即可，没必要再安装上找麻烦 如果不需要IDE，直接用命令行也行，也就不存在兼容的问题

都什么年代了，考试还用VC6啊。。。。。。中国这教育真是。。。。啧啧

引用 10 楼 Hero2902 的回复:[quote=引用 9 楼 赵4老师的回复:]VC6EN https://pan.baidu.com/s/1_t4HPLJZCdiIaJKecguK_A 你好 这中文版需要怎么弄[/quote] 据说微软从来就没有出过VC6的中文版。 英文版凑合用吧。

引用 9 楼 赵4老师的回复:VC6EN https://pan.baidu.com/s/1_t4HPLJZCdiIaJKecguK_A 你好 这中文版需要怎么弄

引用 6 楼 csucxy的回复:现在考试还用VC6？ 全国计算等级考试，二级C、C++： 考试环境 操作系统：中文版 Ｗｉｎｄｏｗｓ ７。 开发环境：Ｍｉｃｒｏｓｏｆｔ Ｖｉｓｕａｌ Ｃ＋＋ ２０１０ 学习版。 我见过的一些高校自己的考试系统也基本如此，不知道你参加的是什么类型的考试？ 我还没考试过 刚来大学一个月

为什么非得用二十多年前的VC6？

鞋子不合适，你可以有两个办法彻底解决。  1）更换一双合适的鞋子。  2）更换一双合适的足。  你选那个

去搜索一下vc的兼容补丁包下载下来安装

引用 3 楼 csucxy的回复:为什么非得用二十多年前的VC6？ 新入门小白， 老师推荐，而且说考试时也是那个软件


Question: 新人求教

引用 7 楼 SuperDay的回复:break提前退出内层循环，循环控制条件j <= (i/ j)还是满足，到了外层的if，就不满足j > (i / j)，也就不会printf出质数提示 j<=(i/j)不是会判断为假的吗，i=2、j=2、2/2怎么>=2

break是跳出当前这个循环 上一条语句是判断i能否被j整除

这个我知道，把整个程序运行过程说详细点

引用 2 楼 與蘤舊縐的回复:if(i%j)表示如果i%j==0就不运行 这句解释一下 i%j如果等于0，那么就相当于if(0) 大神说一下运行过程呗

这个我知道，我问的是第二条for语句，还有break是跳出去哪里

if(!(i%j))相当于if(i%j==0)，首先搞清楚c语言中if(0)不运行，if(i%j)表示如果i%j==0就不运行，那么if(!i%j)就表示如果i%j!=0就不运行，也就是if(i%j==0)就运行


Question: C语言求助，急！！

那么盈数是什么？ 楼主是不是准备写程序的时候脑子一片空白？大多数人包括我自己都是这样过来的，但越是这样子就越是要亲自写，想依靠csdn来解决你的问题只能是一时的，除非你不想迈过这个坎，就此放弃，否则终究是要去面对的。 与楼主共勉！

不明白第二点 看着现在的90后和00后坐在教室里学编程，心里很是羡慕。 想想自己当年的摸黑自学路，太酸了

引用 1 楼 张科技 的回复:求助！！别沉 所以你卡在哪了呢

求助！！别沉


Question: 大佬们我是萌新，现在我有一个问题想寻求帮助。

方案三，由于随机数随机范围是2字节，因此2个或4个随机数相乘混合，得到4字节随机数或8字节随机数，然后指针转为float或double long long a = (long long) rand() * rand() * rand() * rand() * rand();  //4个可能乘不满，乘5个溢出 double b = *(double*)&a;

方案一：两个或多个随机数相乘后得到大随机数，然后除以1000或10000之类的以得到小数。 方案二：两个随机数以转double型相除，得到更随机的小数。 上述结果乘以pow(-1, rand()%2)可以随机正负

这种需求，问题浮点数范围那么大，你如何限定？实现起来并不难，关键是要先把需求捋顺了

额不好意思这是c语言如果要返回的话~~不知道auto可行不，塞进容器到是可以

我觉得你可以自己封装一个函数，根本上用的rand()，但是可以实现随机出来的数运算得到你想要的数，为了同时有整数和浮点数可以设置几种计算方法，比如a+b、a/b等，然后给每一种算法都设置几率，最后如果是直接输出随机数的话就没什么难度，如果要返回的话~~不知道auto可行不，塞进容器到是可以


Question: c语言大括号怎么使用

你把三个语句写一行里面，它还是三个语句，加不加括号差别大着呢。除非你把中间的分号改成逗号，就成了一个语句

引用 2 楼 hhtttz 的回复:[quote=引用 1 楼 與蘤舊縐的回复:]if语句执行出了问题，它找不到正确的要执行的语句了，可能它只执行了max=a[i][j];，而row=i;colum=j;就到了if外面，每次for循环都会被执行 但是为什么会为3,4呢，不应该是2,3吗[/quote]  你的for循环也没有大括号，你的结果只能说明执行row=i;colum=j语句之前for循环已经全部执行完了 类似这样  for{      for{} } row=i;colum=j

引用 1 楼 與蘤舊縐的回复:if语句执行出了问题，它找不到正确的要执行的语句了，可能它只执行了max=a[i][j];，而row=i;colum=j;就到了if外面，每次for循环都会被执行 但是为什么会为3,4呢，不应该是2,3吗


Question: C语言编程习题推荐

嗯，我会试着编下，谢谢建议

引用 4 楼 weixin_45589388 的回复:那怎么提高编程能力呢，还有什么其他方法吗  对什么感兴趣就去做什么呗，比如做简单的小游戏也可以锻炼编程思路和技巧，偶尔也能锻炼一把算法和数据结构~~（仅供参考，兴趣万岁）

那怎么提高编程能力呢，还有什么其他方法吗

大概是应试尚未结束，同志还需努力吧

应试教育体制留下来的后遗症，学编程居然也是通过刷题来提高编程能力的


Question: C语言

引用 楼主 qq_45714244 的回复:Devc++在win10系统下运行很慢是什么回事呢！?  你莫不是装了32位的？？ 如果程序不复杂的话32位也不会很慢，另外可能是你另外的进程占用电脑资源太多了


Question: 如何让数组输出直接有空格

解决了  是最后空格问题，谢谢两位大哥

引用 10 楼 user-2的回复:引用 9 楼 user-2 的回复:PE是格式错误的意思。最后一个空格不要。online judge的老套路了。 好的  我再去试试。

引用 9 楼 user-2 的回复:PE是格式错误的意思。最后一个空格不要。 可能就是这个毛病吧 你把最后一个独立出来，不要输出空格

引用 8 楼 與蘤舊縐的回复:我的图上用的就是你的代码，题目还有别的要求么？ 题目没有其他要求了，

PE是格式错误的意思。最后一个空格不要。

我的图上用的就是你的代码，题目还有别的要求么？

引用 6 楼 與蘤舊縐的回复:[quote=引用 4 楼 weixin_45715083 的回复:] [quote=引用 2 楼 與蘤舊縐的回复:]另外你的循环语句没有大括号，很容易出问题 现在我加了大括号也是presentation error[/quote]  我想你们的检测系统还测不出来有没有给数组逆序排列[/quote] 那我的代码是可以的吗，针对这个题目来说

引用 4 楼 weixin_45715083 的回复:[quote=引用 2 楼 與蘤舊縐的回复:]另外你的循环语句没有大括号，很容易出问题 现在我加了大括号也是presentation error[/quote]  我想你们的检测系统还测不出来有没有给数组逆序排列

你加了大括号没

引用 2 楼 與蘤舊縐的回复:另外你的循环语句没有大括号，很容易出问题 现在我加了大括号也是presentation error

谢谢，现在输出有空格了，能帮我看看我我这个代码有什么问题吗，题目是 输入10个整数存入一维数组，再按逆序重新存放后再输出。 输入包括一行。  10个以空格格开的整数 输出 逆序的10个整数，整数以空格格开  我提交后还是显示presentation error

另外你的循环语句没有大括号，很容易出问题

引用 楼主 weixin_45715083 的回复:请教一下，如何让下面这个程序输出的数组中间有空格 #include<stdio.h> int main(){ 	int i,a[10]; 	for(i=0;i<10;i++) 	scanf("%d",&a[i]); 	for(i=9;i>=0;i--) 	printf("%d",a[i]); 	return 0;  	  } printf("%d打个空格",a[i])


Question: c语言入门

很漂亮,建楼

get it,，谢谢

我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《1205: 求一元二次方程的实数根（C）》, 一起来围观吧 https://blog.csdn.net/pfdvnah/article/details/87460351?utm_source=app

#include<stdio.h> int main() { 	double a, b, c; 	double result1, result2; 	while (true) { 		scanf_s("%lf %lf %lf", &a, &b, &c); 		if ((b * b - 4 * a * c) >= 0) { 			break; 		} 		else { 			printf("输入数字有误，方程无解，请重新输入"); 		} 	} 	//然后自己求解吧 }

题目： description： 从键盘读入三个数a,b,c,输出方程ax2+bx+c=0的两个实根。 input： 三个数a,b,c,保证方程为一元二次方程，且一定有两个实根。 output： 方程的两个实根，小跟在前，大根在后，结果保留小数点后三位。 完整题目就这样，话说发帖子不能上传图片吗

当然你要加什么提示语句的话就随意吧

如果是让你自己输入a、b、c的话，你可以在输入语句的外面加个循环，直到满足Delta>=0且a!=0才退出循环，否则循环继续

求根的话引用math.h头文件，使用sqrt函数表示求根公式，判断△的三种情况，分别运算并输出

什么意思？这种题不大多都是让你求根么？

引用 3 楼 weixin_45712421 的回复:[quote=引用 2 楼 與蘤舊縐的回复:]实根可以相同的话，Delta>=0 我就那样子弄辽，但问题是这个前面要调用什么函数吗，或者语句，我试了while，if，for，都不行[/quote]  完整题目发上来看看

引用 2 楼 與蘤舊縐的回复:实根可以相同的话，Delta>=0 我就那样子弄辽，但问题是这个前面要调用什么函数吗，或者语句，我试了while，if，for，都不行

实根可以相同的话，Delta>=0

Delta>0，a！=0，没有具体题目只能这样了


Question: 不能将 "struct edge" 类型的值分配到 "struct edge" 类型的实体

问题解决了吗？

这个问题，我也没搞清楚

懂了吗

结构=号没有重载,还有你编译器报错，怎么实现运行的，编译通不过也能运行？

这个方法可以？？

我是最近才开始用visual studio的新手，第一次遇到两个错误还能build成功的，有点懵

引用 2 楼 user-4 的回复:这是C语言，不存在什么操作符重载，也不能对结构实体进行赋值，需要用memcpy函数：memcpy(&a, &e[j], sizeof(struct edge)); 其它几个楼主照着写。 另外，就像楼上所说，楼主要搞清楚整个C语言程序编译运行的流程。首先是预编译，主要做两件事情，一个是递归所有的头文件，把它们合并到单元文件里面，组成一个大的C文件；同时将宏定义进行替换。第二步就是编译，可能需要编译多个文件，生成对应的目标文件。第三步是链接，如果有多个目标文件，它们之间有相互引用的各种符号，都在这个阶段对号入座；即便是只有一个目标文件的，也有依赖的静态动态库，引用的变量或函数经过这种链接确立调用入口。最后，经过之前的几个步骤之后，如果生成的是可执行文件的话，就可以开始运行了。就像楼上所说的，如果你前面几步失败了，就不能运行这个程序。当然还有一种可能，就是你之前可以编译生成可执行文件，但后来修改之后没法编译了，但之前的可执行文件还在，所以你运行的是旧版本的文件，那也是不对的。关于这个问题我建议楼主描述问题的时候，准确使用词语，帖子里面问题的提法让人疑惑、感觉混乱，我认为凡是给人造成干扰的文本，都不是好文采，希望下次改进  抱歉给大佬们造成困扰了，但这个程序的确报了两个错误，也的确能生成成功下面我传两张截图

楼主，现在懂了吗？我也有这个问题，


Question: c语言cgi程序如何调用dll

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

如果是linux的话，你需要设置个环境变了，百度有的

引用 12 楼 Zer0_Wu 的回复:请问楼主解决了吗？ 解决了，像exe一样正常调用就可以了，是我自己代码写错了

我啥时候说过我是“真正牛逼的人”了？

引用 9 楼 赵4老师 的回复:https://cn.bing.com/search?q="cgi调用dll"&qs=n&form=QBLHCN&sp=-1&pq="cgi调用dll"  这个更搞笑！ 不搞笑不当程序员。  你觉得别人在提前问之前不搜索的吗，你要是真会就写个调用的例子不就行了吗？ 何必装的跟大师一样，说些圣经一样的让人猜不透的话，显的你高深？ 我记得以前chinaunix有个大牛说话一句话：真正牛逼的人，不会这么闲来看帖和回帖。

引用 7 楼 赵4老师 的回复:[quote=引用 6 楼 iTom 的回复:] [quote=引用 5 楼 赵4老师 的回复:] 项目、属性、C/C++、附加包含目录：填写附加头文件所在目录 分号间隔多项 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项 https://docs.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-search-order  我说的是cgi，不是exe[/quote] 你要是觉得CGI和我上面说的没关系，当我没说好了。[/quote]  你真搞笑，回答别人问题，又让别人去猜？？？ 麻烦你自己写个简单的cgi调用dll试试再说好吗？

引用 6 楼 iTom 的回复:[quote=引用 5 楼 赵4老师 的回复:] 项目、属性、C/C++、附加包含目录：填写附加头文件所在目录 分号间隔多项 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项 https://docs.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-search-order  我说的是cgi，不是exe[/quote] 你要是觉得CGI和我上面说的没关系，当我没说好了。

引用 5 楼 赵4老师 的回复:项目、属性、C/C++、附加包含目录：填写附加头文件所在目录 分号间隔多项 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项 https://docs.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-search-order  我说的是cgi，不是exe

高手呢高手呢高手呢高手呢

应该是环境变量的问题，如果是Windows，就是PATH；Linux下请搜索一下

高手哪里去了

搞定了吗？请在方便的时候结帖


Question: 关于二分搜索两个程序的不同点讨论

引用 2 楼 與蘤舊縐的回复:前面写的有点问题，这个二分法找x的时候把两端也考虑进去了（也就是闭区间），所以在mid与mid-1之间不可能存在x，即使mid-1等于x，在下一次还是被考虑在内的，所以大可以缩小范围 嗯，第二个程序确实是闭区间，我拿数据试了，我的那个程序的范围是left到right-1，right是不包括的，从这点上来说我的确实显得更为不足

有的时候你比较快主要是mid=(left+right)/2直接删去了小数位，有可能是你算出来的mid其实离x更远，比如x是1，mid实际是1.9，变成了1就找到了x，但是下面的程序算出来的mid实际是0.9，但是变成了0


Question: 广义表的存储

不少。。。。。。。。


Question: 求大佬解决

哦，好的，谢谢 我下去就去解决试试看

这与你的权限有关， 由于你的权限不够，不是root，无法在/挂载点这个目录上面创建这么多的目录。以root权限打开codeblock。  或者 搞清楚你自己的用户名：e.g: Potter 然后把工作目录设为: /home/Potter/MyProject/即可解决

不行的我重新安装了一下也不行

考虑下权限问题，你是在linux下吧

引用 楼主 qq_45714808 的回复:codeblock中显示error:couldn't creat the project directory  重启电脑试试？？


Question: 这个题的函数问题

引用 4 楼 YGLeeeon的回复:[quote=引用 3 楼 听我的苹果包 的回复:] 能具体说一下fun2函数每一步的具体步骤么虽然希望你直接去百度什么是快速排序，但是还是稍微给你说一下吧，快速排序的步骤可以分解成多个完全一样的操作，也就是func2的操作，所以func1也是用递归来进行重复调用。那么func2的做法就是，找到一个基准值，然后把它归位，归位的要求是，它左边的值全都比他小（大）右边的值都比他大（小）。用代码中的两个while来找到不符合左小右大的元素，然后交换这两个元素，直到指针对撞。完成归位的条件就是代码中体现为if（i>=j）break;，即左右指针对撞了。，用一个图来解释一下： 。 另外提一个建议，你想让别人帮到你，就把代码文本贴出来，别整图片。比如说你要我给你一行一行的说明，我怎么拿着图片给你说？难道我要自己对着写下来说明吗。（语气有点不耐烦，但是都是大实话）[/quote] 好的谢谢了！，我会去百度快速排序的

好的谢谢了！我会去百度快速排序的

好的谢谢啦！我会去百度的

整体上来看是一个快速排序，func2的工作是将a[p]这个元素归位（归位即，让它处于有序数组的应该在的位置上）。func2完成对a[p]元素的归位之后，返回这个元素的正确位置，即j。

引用 3 楼 听我的苹果包 的回复:能具体说一下fun2函数每一步的具体步骤么虽然希望你直接去百度什么是快速排序，但是还是稍微给你说一下吧，快速排序的步骤可以分解成多个完全一样的操作，也就是func2的操作，所以func1也是用递归来进行重复调用。那么func2的做法就是，找到一个基准值，然后把它归位，归位的要求是，它左边的值全都比他小（大）右边的值都比他大（小）。用代码中的两个while来找到不符合左小右大的元素，然后交换这两个元素，直到指针对撞。完成归位的条件就是代码中体现为if（i>=j）break;，即左右指针对撞了。，用一个图来解释一下： 。 另外提一个建议，你想让别人帮到你，就把代码文本贴出来，别整图片。比如说你要我给你一行一行的说明，我怎么拿着图片给你说？难道我要自己对着写下来说明吗。（语气有点不耐烦，但是都是大实话）

能具体说一下fun2函数每一步的具体步骤么

单步调试，观察数组a做了哪些改变


Question: 新人求赞

手动给你点个赞~

#include<stdio.h> #include <math.h> int main() { 	printf("printf('hello c')\n"); 	printf("cout<<'hello c++'\n"); 	printf("echo 'hello php'\n"); 	printf("console.log('hello javaScript')\n"); 	printf("print('hello python')\n"); 	printf("System.out.println('hello java')\n"); 	printf("hello 靓仔····"); 	return 0; }

引用 2 楼 轻箬笠 的回复：[quote=引用 1 楼 SuperDay 的回复:] 我很丑 但是你很温柔[/quote]我是丑人多做怪

引用 1 楼 SuperDay 的回复:我很丑 但是你很温柔

我很丑


Question: c语言求解答

#include<stdio.h> #include<math.h> int main() { 	float x; 	scanf("%f", &x); 	float item = x; 	float sum = x; 	int count; 	for (count = 2; fabs(item) > 0.00001; count += 2) { 		item = item * (-1) * x * x / (count * (count + 1)); 		sum += item; 	} 	printf("sin(x)=%.6f,count=%d", sum, count >> 1); 	return 0; }

也是哦，失误失误，忘记判断退出前多执行了一次i = i+2了。汗哒哒 printf("sin(x)=%.5f,count=%d",l,i/2);  引用 15 楼 CCCCcainiao 的回复:引用 14 楼 轻箬笠 的回复:printf("sin(x)=%.5f,count=%d",l,i/2 + 1);放在外面   你的是对的   除啦count那里多加了一次 目前我水平也学不来不过还是得谢谢你

#include<stdio.h> #include <math.h>  long fac(unsigned n) { 	if (n == 0 || n == 1) { 		return 1; 	} 	else { 		return (n * fac(n - 1)); 	} }  int main() { 	double a = 1.0, x, l=0.0; 	long i; 	scanf("%lf", &x); 	for (i = 1; fabs(a) > 0.00001; i=i+2) 	{ 		a = (((i/2) % 2 == 1) ? -1 : 1)* pow(x, i)/fac(i); 		l = l + a; 		printf("sin(x)=%.5f,count=%d",l,i/2 + 1); 	} } 这样试试，我这边没环境。楼主测试看看

懂了 我那个阶乘好像差一点只乘了 奇数 尴尬

引用 10 楼 CCCCcainiao 的回复:就是随便给他定义一个数都行？ count是对的但是为什么结果不对  结果差点，count人家是4你是5了

就是随便给他定义一个数都行？ count是对的但是为什么结果不对

怎么改。。哎 提前预习写的 好难

引用 4 楼 轻箬笠 的回复:[quote=引用 3 楼 與蘤舊縐 的回复:] [quote=引用 2 楼 轻箬笠 的回复:] 楼主这个for判断条件的a永远不会变的。又没对a进行初始化，要么死循环，要么直接跳过for。  没有初始化a，变到是会变[/quote] 那你就没注意到，楼主在for循环里面又声明了一个double a;所以外层的a是不会变的。[/quote]  这操作的确很骚气

#include<stdio.h> #include <math.h> int main () { float a,x,i,j=1.0,l=0,m=-1.0; int c=0; scanf("%f",&x); for (i=1;a>0.00001;i=i+2); {j=j*i,c=c+1,a = pow(x, i)/j,m=-1*m*a,l=l+m; } printf("sin(x)=%.5f,count=%d",l,c); return 0;      }  引用 1 楼 wowpH 的回复:麻烦复制粘贴源代码并且附上运行截图。

#include<stdio.h> #include <math.h> int main () { float a,x,i,j=1.0,l=0,m=-1.0; int c=0; scanf("%f",&x); for (i=1;a>0.00001;i=i+2); {j=j*i,c=c+1,a = pow(x, i)/j,m=-1*m*a,l=l+m; } printf("sin(x)=%.5f,count=%d",l,c); return 0;      } 运行结果就是输入多少还是多少 count一直是1

引用 3 楼 與蘤舊縐 的回复:[quote=引用 2 楼 轻箬笠 的回复:] 楼主这个for判断条件的a永远不会变的。又没对a进行初始化，要么死循环，要么直接跳过for。  没有初始化a，变到是会变[/quote] 那你就没注意到，楼主在for循环里面又声明了一个double a;所以外层的a是不会变的。

引用 2 楼 轻箬笠 的回复:楼主这个for判断条件的a永远不会变的。又没对a进行初始化，要么死循环，要么直接跳过for。  没有初始化a，变到是会变

麻烦复制粘贴源代码并且附上运行截图。


Question: 大佬帮忙看看哪里不对，怎么无论输入什么数字输出都为0

好的，记得要结帖哦

引用 3 楼 SuperDay的回复:total是0，a没初始化，这里也是0，循环里面一直累加，但结果一直都是0。另外，power没用上，而且是个递归死循环 ok，改过来了，谢谢

引用 1 楼 與蘤舊縐的回复:首先你没有初始化a，然后double power(x,i);不知道是什么东西，我看你下面已经声明了double power(int x,int i); 是把主函数的total改为power（x，i）

我猜你应该是想用pow

a += power(x, i);


Question: 新手菜鸟，数据结构，单链表的实现（c语言）,求教大佬

方便的话麻烦结帖一下

好的，都是细活，需要有足够的耐心

找到错误了，for(;a<i;i++)p=p->next;仔细和别的代码对比了一下，没有与用法错误，a++写成i++了， 刚开始一直以为是逻辑错误

算法数据结构是要去耐心调试的，每个人都要走这样的过程

引用 1 楼 user-1 的回复:C语言没有string，第二个问题要慢慢调试 感谢大佬，明白了一个

C语言没有string，第二个问题要慢慢调试


Question: 去除噪点，请大佬赐教

没必要吧，C语言用int就好了，一直都这么用的，也都好好的，非要用bool有什么特别的好处吗？

引用 7 楼 wowpH 的回复：[quote=引用 6 楼 蜜蜂卡卡的回复:][quote=引用 4 楼 與蘤舊縐 的回复：]int main return 0 bool func  C语言似乎不用bool，返回0或者1吧返回零，我不知道该怎么判断 c语言返回值是没有返回布尔值是吗？[/quote] 有，但是要加头文件stdbool.h[/quote]好的，谢谢

引用 6 楼 蜜蜂卡卡的回复:[quote=引用 4 楼 與蘤舊縐 的回复：]int main return 0 bool func  C语言似乎不用bool，返回0或者1吧返回零，我不知道该怎么判断 c语言返回值是没有返回布尔值是吗？[/quote] 有，但是要加头文件stdbool.h

引用 4 楼 與蘤舊縐 的回复：int main return 0 bool func  C语言似乎不用bool，返回0或者1吧返回零，我不知道该怎么判断 c语言返回值是没有返回布尔值是吗？

引用 3 楼 wowpH 的回复：if里面判断两个=  建议：iszd如果“是”噪点返回true比较好，便于理解。好的，明白 其他的部分还有什么问题吗？

if里面判断两个=  建议：iszd如果“是”噪点返回true比较好，便于理解。

引用 1 楼 wowpH 的回复：函数声明要放在main前面（除非你是后加的）。行，好的，那里面的内容有问题吗？

函数声明要放在main前面（除非你是后加的）。


Question: 有大佬知道为什么下面代码第一行没法赋值？？？

楼主解决了记得及时结帖啊

可以先去收一个回车再去读入数组

引用 2 楼 user-1 的回复:回车键有可能会漏下来的 还真是。。。我把num直接定义一个数字后，就正常了。。。大佬，那我这代码就是要输入num,怎么改才能防止回车漏下来

回车键有可能会漏下来的

会不会是回漏了下来呢？跟踪检测一下下


Question: 求大佬解答！！！

引用 2 楼 與蘤舊縐 的回复:[quote=引用 1 楼 你媽的，為甚麽 的回复:] 求大佬解答  第一次是右转把[/quote] 搞错了没问题·····

引用 1 楼 你媽的，為甚麽 的回复:求大佬解答  第一次是右转把

求大佬解答

以上只是一个比较能看的懂的方法，或者说比较简单的方法（可能有点问题，没有试过较大的数据），只是给出一个思路 另外你的问题我无法调试（太长了），而且说不定你的100*100就是错的（可能你没有完全检查清楚，错误比较不明显），到了150*150错误就开始变得明显了 这几个for循环可太秀了，无语

引用 4 楼 與蘤舊縐的回复: #include<stdio.h> #include<stdlib.h> struct Number { 	int num; 	int flag = 1;//标记（尚未取走） }; int main() { 	Number map[201][201];//矩阵 	int row, line;//列、行 	printf("请输入行列数，数字必须少于200\n"); 	//保证输入少于200*200 	while (true) { 		scanf_s("%d %d", &line, & row); 		if (row > 200 || line > 200) { 			printf("输入行列数过大\n"); 		} 		else { 			break; 		} 	} 	int flag = row * line;//标记（尚未取走的数） 	for (int i = 0; i < line; i++) { 		for (int j = 0; j < row; j++) { 			map[i][j].num = rand(); 			printf("%d ", map[i][j].num); 		} 		printf("\n"); 	} 	 	int cr = 0, cl = 0;//当前列、行 	int direction[4][2] = { {1,0},{0,1},{-1,0},{0,-1} };//方向 	int control = 0;//方向控制 	while (flag > 0) { 			printf("%d ", map[cl][cr].num); 			map[cl][cr].flag = 0; 			flag--; 			int isGo = 0; 			while (isGo == 0) { 				//前进之后的行列 				int fl = cl + direction[control][0]; 				int fr = cr + direction[control][1]; 				if (fl >= 0 && fl < line && fr >= 0 && fr < row && map[fl][fr].flag != 0) { 					cl += direction[control][0]; 					cr += direction[control][1]; 					isGo = 1; 				} 				else { 					control++; 					if (control > 3) { 						control = 0; 					} 				} 			} 	} 	return 0; }  你可以试试  引用 1 楼 你媽的，為甚麽 的回复:求大佬解答 不是哇大佬，我想知道我哪里错了呀


Question: 大佬求帮忙我真的不行

引用 2 楼 小原木 的回复:#include <stdio.h> void main() { 	int h=0,d=0,H; //H 为井深，h 为青蛙现在的高度       //这里的d是白天加黑夜的数量和，后面会有用 	printf("请输入井深："); 	scanf("%d",&H); 	for(int Time=1;h<H;d++) // Time ==1时是白天，Time==0时是黑夜 	{ 		if(Time==1) {h=h+2;Time--;} 		else {h=h-1;++Time;} 	}  	 if(d%2) printf("第%d天的白天爬出去的\n",d/2);      else printf("第%d天爬出去的\n",d/2);	  } 不瞒你说，刚开始我还以为答案是10........(不相当于一天一米吗）

用一个变量表示所在的高度。超过10就退出，否则循环。用一个变量模拟白天夜晚，用if判断是＋2还是－1。


Question: 大佬求帮忙我真的不行

这下楼主有作业可以抄了

书本教你用break去终止循环

int x=0 , i=0; while(1){     x+=2;     i++;     if(x >= 10)break;     x-=1; } printf("%d天爬到%d米",i,x);

引用 楼主 qq_45714099 的回复:我做了几次都不行  蜗牛那个？？？


Question: 二分法猜100以内随机数产生的疑问

引用 1 楼 user-1的回复:假设 mid是22 right是23 随机数是 23 你的做法 (22+23)/2 mid不变 right不变 死循环了 right我刚开始是赋值了一百的啊，第一个程序里right的值并不会改变的吧？

图歪了 看不了

引用 3 楼 sako.c 的回复:[quote=引用 1 楼 user-1的回复:]假设 mid是22 right是23 随机数是 23 你的做法 (22+23)/2 mid不变 right不变 死循环了 right我刚开始是赋值了一百的啊，第一个程序里right的值并不会改变的吧？[/quote]哦哦 不会改变  假设 随机数是 49  左右不变 最后会在 66 33 里面不停循环 所以错了


Question: 出现未处理的win32位异常

可以定位到对应的代码行吗？


Question: 一道填空题和一道选择题

几乎所有的双目运算符都有对应的运算之后直接赋值的组合运算符，比如按位与&就有一个&=，楼主所列出来的%也是一样的。或许你们会奇怪，为什么这么搞，变复杂了。这其实是C语言的一大特色，大家都知道它是介于低级语言和高级语言之间的一种语言，很接近于机器语言。在机器语言中，几乎所有的操作符都是直接作用于操作数的，比方：a += b;这样的语句基本就对应到一条机器指令；而a = a + b;这样的语句，在编译器不做优化的情况下，应该是有一个临时变量来存储a + b，然后再用另一条指令来把这个临时变量传递给a。也就是说，C语言是一种比较低级的语言，但是它效率更高，设计者就是出于这样的考虑引入这种操作符的。所以，我们可以尽量选择这样的操作符来提高效率，虽然效果不是那么明显，但是C语言可以作为底层开发库的基础，频繁被调用的时候，这种效率上的优势一旦累积起来就会相当可观。如果只是作为一个普通的应用就没有那么大的差别了

引用 4 楼 李三思666 的回复:[quote=引用 3 楼 李三思666 的回复:] 1）k %= 5  等价于   k = k % 5，所以7 %=5 结果是2。 2）我试试吧，记不太清了，先算m*=y，得出m = 10，再算y-=m，得出y = -8，再计算y+=y，得出y = -16。注意最后算y+=y的时候，y已经不是定义中的2了，通过y-=m那一步，y的值已经改变了。   sb了，7%5不能算的好像，你如果是int a = 7 ，a%5，那结果就是2。抱歉抱歉= =[/quote]非常感谢！！！

引用 2 楼 與蘤舊縐 的回复: 少了个等号看的出来吧非常感谢！！！

引用 3 楼 李三思666 的回复:1）k %= 5  等价于   k = k % 5，所以7 %=5 结果是2。 2）我试试吧，记不太清了，先算m*=y，得出m = 10，再算y-=m，得出y = -8，再计算y+=y，得出y = -16。注意最后算y+=y的时候，y已经不是定义中的2了，通过y-=m那一步，y的值已经改变了。   sb了，7%5不能算的好像，你如果是int a = 7 ，a%5，那结果就是2。抱歉抱歉= =

少了个等号看的出来吧


Question: 比两个数大小，输出大的那一个

引用 7 楼 與蘤舊縐的回复:[quote=引用 5 楼 weixin_45672284 的回复:] [quote=引用 4 楼 user-2的回复:][quote=引用 2 楼 weixin_45672284 的回复：][quote=引用 1 楼 user-2的回复:]编译错误提示和运行结果发出来一下 sorry , not available (RE:,OJ_SHOW_DIFF:,TR:,valid:1)[/quote]你这个我怎么完全看不懂啊？我们用的是同一种语言吗？[/quote] 我用的c，大一新人[/quote] 改过之后 试过没问题[/quote] 嗯，我试试，谢谢啦！

引用 5 楼 weixin_45672284 的回复:[quote=引用 4 楼 user-2的回复:][quote=引用 2 楼 weixin_45672284 的回复：][quote=引用 1 楼 user-2的回复:]编译错误提示和运行结果发出来一下 sorry , not available (RE:,OJ_SHOW_DIFF:,TR:,valid:1)[/quote]你这个我怎么完全看不懂啊？我们用的是同一种语言吗？[/quote] 我用的c，大一新人[/quote] 改过之后 试过没问题

你要用的visual studio的话把scanf改成scanf_s

引用 4 楼 user-2的回复:[quote=引用 2 楼 weixin_45672284 的回复：][quote=引用 1 楼 user-2的回复:]编译错误提示和运行结果发出来一下 sorry , not available (RE:,OJ_SHOW_DIFF:,TR:,valid:1)[/quote]你这个我怎么完全看不懂啊？我们用的是同一种语言吗？[/quote] 我用的c，大一新人

引用 2 楼 weixin_45672284 的回复：[quote=引用 1 楼 user-2的回复:]编译错误提示和运行结果发出来一下 sorry , not available (RE:,OJ_SHOW_DIFF:,TR:,valid:1)[/quote]你这个我怎么完全看不懂啊？我们用的是同一种语言吗？

引用 1 楼 user-2的回复:编译错误提示和运行结果发出来一下 如果是打印出较大的那个整数怎么改？

引用 1 楼 user-2的回复:编译错误提示和运行结果发出来一下 sorry , not available (RE:,OJ_SHOW_DIFF:,TR:,valid:1)

编译错误提示和运行结果发出来一下


Question: 求助！编程思想不好，想请教高手是如何实现这个问题！

引用 2 楼 SuperDay 的回复：你这个提法有点问题，如果收到连续5个0，那你在收到第一个0的时候不是就要上报0吗？还有，就像楼上所说的，可以设计一种超时机制，比方超过5秒钟没收到数据就直接上报数据发送给我的频率是100ms，我上报服务器的频率也是100ms发1次，服务器端不作处理，必须我上报时处理，默认发给我的就是0，应该是变成1后的上报得延时确认是否5个1.

引用 楼主 yaya237 的回复:，要实现的是，接收数据，采集后上报服务器，接收到数据如果是0.当然报0.如果接收到的是变换的，比如收到连续5个1然后5个0.这样交替变化，就要上报1.如何实现？假设是1秒采1次，是要把10秒的值都记录下来再判断吗？谢谢高手指点！ 其实你这个问题没有描述清楚，比如服务器接收有没有频率要求，上报数据最低频率是什么，可不可以放在服务器判断之类的。就你所说的交替变换，10秒并不能实现描述:0 1 1 1 1 1 0 0 0 0 0这样11个数，你十秒判断的应该是不准确的


Question: Windows下用gcc环境编译输出中文字符时出现乱码怎么解决？

记得结帖啊

引用 2 楼 SNOY文 的回复:你是不是没有中文包啊￼已经解决了，设置一下文件编码就好了，感谢

你是不是没有中文包啊￼

https://segmentfault.com/a/1190000014392665?utm_source=tag-newest  试试这个，不知道版本对不对的上


Question: 指针排序的江湖写法。

原来是你，多次谋面，未曾相识

初入江湖，多多指教，这是新接触的一种写法，没考虑优缺点。

引用 5 楼 SuperDay 的回复:好的设计想处处通用并不是那么容易，也许换一种平台会有更多的奇思妙想，优越感也只是另一种形式的夜郎自大 不知道你在说什么 我写的接口其实是参考标准库的qsort 我只是没把名字写出来而已 然后呢

引用 5 楼 SuperDay 的回复:估计初学时间不太长，也要适当鼓励，沉淀需要时间经历各种磨练。好的设计想处处通用并不是那么容易，也许换一种平台会有更多的奇思妙想，优越感也只是另一种形式的夜郎自大这段代码不值得鼓励

引用 3 楼 SuperDay 的回复:话虽如此，还是鼓励楼主的分享精神啊，论坛不就是各种想法碰撞的地方吗？再说，你用C语言能写出泛型设计的算法吗？即使写出来，也是各种迷乱，毕竟不是一个时代的产品更想看到一些复合代码审美的分享 而不是这种多余的奇技淫巧 泛型的确做不到 不限制只能给int用倒是可以 void sort(void* pBuffer, size_t size, size_t count, int (*cmp)(void*, void*));

函数内部的 内层for 写的太蠢了 循环体摆在这个位置 毫无价值

不知道你的江湖算法是什么意思  不过缺点实在太多了 简单说 这个函数固定了 只能给3个数据排序  作为一个排序算法 这个限制实在是愚蠢 然后 只能降序 无法升序  作为一个排序算法 这个限制属于自废武功 只能给 int排序 传入 其他类型数据就GG  作为排序算法是不合格的 排序和数据类型无关


Question: 大哥们帮忙看一下这个输出格式哪里出问题了

方便的话麻烦结帖一下吧

引用 3 楼 SuperDay的回复:会不会是s1, 19, s2, 19？ 对的没错，谢谢啦！！

可以了吗？

会不会是s1, 19, s2, 19？

scanf_s换成scanf。然后在第一行加上#define _CRT_SECURE_NO_WARNINGS

Visual Studio 2017


Question: 求助

你是分配了的，要return回来

引用 2 楼 SuperDay的回复:L1、L2都没有分配空间，虽然GetList_L里面分配了，但是并没有传递出来 那请问这个要怎么分配呀

格式有点乱。。。。。。。。


Question: strcmp能比较中文字符吗

可以比较，就是不正常unicode，需要的时候要转换。例子就跟英文字母标点符号一样使用


Question: C语言共用体问题

引用 3 楼 user-2的回复:test.i=0x1234;  假设 int 4个字节 并且是小端模式  内存中的数据是 0x34 0x12 0x00 0x00 'A'的数值是 0x41  test.c='A'; 作用是 最低字节替换为 0x41 最低字节原先的数据是 0x34 换成 0x41 最后数据是 0x41 0x12 0x00 0x00 用%x 输出就是 1241 请问这算数据上溢码，上溢的话是不是看做取余

楼上正解，刚才突然懵了

错了错了，是0x1241

0x1234，在内存里面是低位在前，所以覆盖之后就变成0xA234


Question: 之前的代码已经改完，麻烦大神看看怎么简化代码

注意浮点数不要直接比较  要用 fabs(a - b) < 精度 这样的模式处理

引用 10 楼 vv1025 的回复：刷分来了！！！！！！！！！！！！！！！！！！！！！！！！！！！？？？

刷分来了！！！！！！！！！！！！！！！！！！！！！！！！！！！

楼主又开一帖，之前那个先结掉吧

#include <stdio.h> int main() { 	float a; 	float b = 50.00; 	printf("please input A"); 	scanf("%f", a); 	if (a >= b) { 		printf("A=%.lf > or = 50", a); 		if (a >= 80) { 			printf("A >= 80 YES"); 		} 		else{ 			printf("A < 80 No"); 		} 	} 	else { 		printf("A=%.lf<50", a); 	} 	return 0; } 我猜·········，b就用了一次，其实不必整个变量出来，直接用值就可以了

好吧我感觉我看错了，我写的上面if（a=80）是错的，搞不懂你了

#include <stdio.h> int main() { 	float a; 	float b = 50.00; 	float c; 	printf("please input A"); 	scanf("%f", a); 	if (a >= b) { 		printf("A=%.lf > or = 50", a); 		if (a = 80) { 			c = (a >= 80); 		} 		if(c == 1){ 			printf("A >= 80 YES"); 		} 		else{ 			printf("A < 80 No"); 		} 	} 	else { 		printf("A=%.lf<50", a); 	} 	return 0; } 你是不是这个意思，你的代码写的让我头疼······ 我觉得c就是个多余的

引用 8 楼 SNOY_WEN 的回复：[quote=引用 7 楼 user-3 的回复：]c = a >= 80; 这样写就好了，前面那个if是多余的为啥，我是判断这个数大于等于50后在判断是否大于等于八十，如果大于就吧关系运算表达式结果赋值给c[/quote]怎么说呢？你知不知道这个表达式的意义？

引用 7 楼 user-3 的回复：c = a >= 80; 这样写就好了，前面那个if是多余的为啥，我是判断这个数大于等于50后在判断是否大于等于八十，如果大于就吧关系运算表达式结果赋值给c

c = a >= 80; 这样写就好了，前面那个if是多余的

引用 4 楼 user-3 的回复：楼主又开一帖，之前那个先结掉吧iPad版好像不能结帖

我才学 ，else还不认识


Question: 变量

你change后面多了个引号


Question: 大一新生，计算机方面渣的不行

引用 9 楼 weixin_45706374 的回复：引用 6 楼 SuperDay的回复:[quote=引用 4 楼 與蘤舊縐 的回复：]还是dev c++对新手友好些，尤其vs用的不是标准gcc编译器，学校一般都要求用gcc吧这个无所谓，用习惯就好了，gcc也不是标准。一般语法能支持就可以了，进阶的时候再说了 好的，谢谢，那我还是继续用Dev c++吧[/quote]可以的，主要精力放在语言上面，工具到时候根据需要，说不定做苹果应用呢，所以这些还不如Xcode，不可能一辈子就用一个工具

你可以用mysy2配，这个在清华开源镜像站可以找到，怎么用就查一下网上吧，需要修改一下配置文件，不然容易安装失败

你是学生的话其实可以用CLion，在JetBrains官网可以申请免费使用，比VS容易用，而且代码提示比VS强得多，调试比不上vs，但对初学者很友好了，够你用很久的了，不过要配置环境，mingw官网被墙堵死了，基本上不去

引用 6 楼 SuperDay的回复:引用 4 楼 與蘤舊縐 的回复：还是dev c++对新手友好些，尤其vs用的不是标准gcc编译器，学校一般都要求用gcc吧这个无所谓，用习惯就好了，gcc也不是标准。一般语法能支持就可以了，进阶的时候再说了 好的，谢谢，那我还是继续用Dev c++吧

引用 5 楼 weixin_45706374 的回复：[quote=引用 3 楼 SuperDay的回复:]不好意思，打错了，是VS，手机麻烦 是visual studio吗，安装了，网上的回答很杂，，我就在这里问一问[/quote]是的，工具熟悉一下，用别的也可以，习惯就好

引用 4 楼 與蘤舊縐的回复:还是dev c++对新手友好些，尤其vs用的不是标准gcc编译器，学校一般都要求用gcc吧 DEVC++操作确实很方便，可是老师说这个太简单了，建议我们最好用这两个，我在网上查教程，有的写的不详细，看不懂，就在这里问一问

引用 3 楼 SuperDay的回复:不好意思，打错了，是VS，手机麻烦 是visual studio吗，安装了，网上的回答很杂，，我就在这里问一问

不好意思，打错了，是VS，手机麻烦

引用 1 楼 SuperDay的回复:不是有很多教程和博客可以参考吗？楼主CS装了吗？ cs是什么，APP吗？还是软件

不是有很多教程和博客可以参考吗？楼主CS装了吗？


Question: 求助

下次我截图。。。忘了忘了各位

嗯，这样写的好处就是，如果初始化列表需要调整，就不需要每次都去修改数组长度了。对于编译器来说，它知道该怎么做就足够了，这也算是一种改进吧。

引用 6 楼 SuperDay的回复:不不不，如果初始化了就可以的，你没有初始化就不行。你还没适应这样的，它也是有好处的 哦，神奇，受教了（10个字，凑字数）

引用 4 楼 SuperDay 的回复:[quote=引用 3 楼 與蘤舊縐 的回复：][quote=引用 楼主 qq_45711793 的回复:] 看不出来哪里有错误 char* name[]是什么骚操作，又不是指针，又不是字符数组[/quote]这样写可以的，而且也很常见，你还没适应[/quote]   显然不是谁都容许这种骚操作，刚开始学能标准就标准点吧

引用 3 楼 與蘤舊縐 的回复：[quote=引用 楼主 qq_45711793 的回复:] 看不出来哪里有错误 char* name[]是什么骚操作，又不是指针，又不是字符数组[/quote]这样写可以的，而且也很常见，你还没适应

引用 楼主 qq_45711793 的回复:看不出来哪里有错误 char* name[]是什么骚操作，又不是指针，又不是字符数组

楼主，编译错误提示，运行结果什么一次性发出来，这样省时间

为啥都这么喜欢用手机拍呢，拍也就算了，拍完自己都不看的吗？


Question: 大佬帮看，为啥错误

引用 3 楼 與蘤舊縐 的回复：C++里面是要声明的，只是他原型不对的

原型，就是跟函数的定义形式最接近的

引用 1 楼 SuperDay的回复:C++是支持重载的，所以函数声明一定要用原型！ 我听不懂大佬，那怎么改呢

C++是支持重载的，所以函数声明一定要用原型！


Question: C语言中break与continue的区别

please do stay in touch

你说说看，砧板和刀的区别有哪些？

至少标题改一下，这东西还找区别

😂给那些初学者准备的，大佬自动忽略哈

这个也需要发吗？


Question: 关于VS使用问题 求助！

谢什么啊？赶紧结帖吧

谢谢你啊(最少10个字 括号里充个数)

引用 2 楼 weixin_45710212 的回复:那就是说一个项目里只能运行一个源文件吗 没错，一个源文件。一个main函数

那就是说一个项目里只能运行一个源文件吗

vs运行的是项目，也就是项目中的源文件，你把两个程序放一个项目里，只有源文件可以运行


Question: 一道双人博弈问题算法编程求解！

引用 2 楼 qq_34786074 的回复：引用 1 楼 user-1 的回复：感觉很难，头大谢谢大佬回复！大佬有没有大概的思路呀。比如不断那种总结对方的下注规律 然后今儿确定自己的下注机器学习吗？

感觉很难，头大


Question: 初学fflush（stdin）

《C++中fflush()函数与rewind()函数》 希望能够帮到你！


Question: 这个为什么int的不能运行，void的却可以。

别用VC6了

在C语音是可以这样的，但是C++不允许返回值为void

入口函数参数返回值类型是固定的

C++后缀才是cpp吧

引用 48 楼 qqdreamypp的回复:你是不是那个运行页面运行之后没有关掉 没关掉也会出现这种状况，或者是你这个软件出现问题，我以前和你一样的状况,重装一下软件试试

你是不是那个运行页面运行之后没有关掉

编译器比较老了，之前编译器（VC6.0）确实是void main();的

mark down

Int型要有返回值，return

#include <stdio.h> char a; int main(){ scanf("请输入一个字符：%c",&a); printf("%c\n",c); system("pause"); }

没有语法错误，应该是其他的问题

引用 3 楼 qq_45406434的回复:[quote=引用 1 楼 SuperDay的回复:]不能运行？什么提示？ --------------------Configuration: 去 - Win32 Debug-------------------- Compiling... 去.cpp D:\TDDownload\Microsoft Visual Studio\MyProjects\1\去\去.cpp(10) : error C2143: syntax error : missing ';' before '}' 执行 cl.exe 时出错.  去.exe - 1 error(s), 0 warning(s)[/quote] 靠，文件格式.c而不是. cpp。大哥你在写c语言不是c++

因为你传的是一个空值return 0了写个int有必要吗

有时候分号容易打成中文还不好看见

你的C是char类型怎么输出是整形呢，应该增加一个变量 int d=0：

有返回值了  肯定不能说void类型啊

不能运行？什么提示？

你的主函数怎么没有返回值

标准不同了，必须要有一个返回值


Question: 为什么C语言中的printf打印地址对变量初始化值有影响

垃圾值而已  至于垃圾值怎么变都无所谓  不值得探究

楼主想明白了吗？

第一个没有取a的地址

十万个为什么

引用 6 楼 I will,的回复:那为什么不打印地址，每次a的值都是0呢 这就和编译器有关系了，不同编译器不一样，不同模式(debug/release)也不一样。我想是这个编译器的这个模式下编译器做了一些特殊处理。

那为什么不打印地址，每次a的值都是0呢

引用 4 楼 I will,的回复:但是打印出来的值不一样啊 对啊，因为取的内存是随机的，所以事先从哪个地址取内存以及这块内存中事先有什么值都是不确定的，一样是巧合，不一样是常态。

但是打印出来的值不一样啊

理论上没有影响，a的地址和值是随机的，只是从内存中随机取了一块可以使用的内存。

嗯？什么意思，没听懂

你这个不严谨。我问你第一个程序a的地址是多少，如果你知道怎么证明。


Question: 到底哪里错了啊

引用 5 楼 SNOY_WEN 的回复：[quote=引用 2 楼 SuperDay 的回复：]这个是C语言吗？ a >= 80后面那个是什么符号？ 而且条件运算后面还跟个东西干嘛？我已经搞好了，想赋值来着[/quote]赋值给c吗？c要放在前面，而且赋值是等号=

引用 2 楼 SuperDay 的回复：这个是C语言吗？ a >= 80后面那个是什么符号？ 而且条件运算后面还跟个东西干嘛？我已经搞好了，想赋值来着

引用 3 楼 堕落年代 的回复：求软件，真的。好难过。QQ：2642514204什么软件？

求软件，真的。好难过。QQ：2642514204

l打成了1。。。。。。。


Question: 为什么ungetc函数接受整型变量做参数?

引用 4 楼 光球层上的黑子 的回复：[quote=引用 3 楼 user-1的回复:]问题解决了欢迎结帖啊 刚用csdn不懂，现在应该结了吧[/quote]可以了，大家都要向你学习

引用 3 楼 user-1的回复:问题解决了欢迎结帖啊 刚用csdn不懂，现在应该结了吧

问题解决了欢迎结帖啊

引用 1 楼 user-1的回复:所以的流操作统一用int，因为int除了可以涵盖char以后，还可以赋予很多状态。对于栈结构来说，int是最小单位，即使是char，也是占用一样的空间。所以char并不会省内存，只有在数组空间里面才能省空间 感谢！大概明白点了，我再慢慢体会吧


Question: 请教各位大佬一个c语言初级问题

这不就是输入吗。跟计算方法有什么关系呢。计算方法只是个表达式，运算过程。

楼主的意思会不会是，比如像行列式甚至矩阵这样的数据，就说行列式吧，我们先定义一个参数n，然后输入这个n，紧接着输入n*n的行列式，可以这样输入：每行输入n个数值，连续输入n行，然后调用某个函数来计算这个行列式的值。 当我们又想计算m*m的行列式时候，也是一样先输入m，再逐行输入数值，同样调用函数计算出结果。 像这样的过程是不是还有什么细节你们想要理解的呢？

你们是学生？感觉很不专业，难道是自学的吗？

算法一样的变量？这个不像个术语，很不专业，一般我们设计一个算法都有相应的数据结构作为支撑，二者是有机结合。这里面涉及到很多技巧，三言两语说不清楚的

能举个例子不，所谓算法一样的变量

那你要定义什么样的数据结构，再决定如何输入它们。

引用 2 楼 SuperDay的回复:什么叫做算法一样的变量呢？ 就是说计算过程一样但初始值不一样

什么叫做算法一样的变量呢？

没人吗？这个分数怎么得我也不知道我就这点分了


Question: 这个程序怎么都排不出来啊

好的，多谢支持！

引用 13 楼 user-1的回复:方便的话请记得及时结帖 结了啊，我电脑显示已经结贴了啊

方便的话请记得及时结帖

引用 11 楼 听我的苹果包 的回复：嗯嗯我已经搞定了。。这么厉害啊！

嗯嗯我已经搞定了。。

楼主搞定了吗？

嗯嗯好的，谢谢帮助，

就是嘛，粗心！

嗯嗯，循环出了大问题啊

看出来了吗？

emmmmmm我的错，那我再看看

你拍的，看得我晕啊。 那段循环，你没看仔细了

看着好累

我运算错了么?上机的话运行出来和答案一样，但我手写写不出来

这是什么？你是按照上面的思路来运算吗？


Question: vs2015小白问题求解

去找一下安装程序，修改一下

装错了，安装的时候需要勾选C++桌面开发

你这个没安装全吧，漏了不少东西


Question: 大神，我需要帮忙

引用 20 楼 user-2 的回复：帖子好像可以发代码。。。我怀疑你是来要大佬联系方式的。。。我想了一下，确实应该发到这里来让大家一起参照参照，可能她觉得写的不足之处，有点不好意思发吧。回头她稍微整明白一点可以发上来

引用 22 楼 SuperDay 的回复：你可以找他，他才是真正的大佬谁？

你可以找他，他才是真正的大佬

引用 20 楼 user-2 的回复：帖子好像可以发代码。。。我怀疑你是来要大佬联系方式的。。。我是抱着学习的态度来的

帖子好像可以发代码。。。我怀疑你是来要大佬联系方式的。。。

可以私信发给我

引用 16 楼 SuperDay 的回复：引用 14 楼 SuperDay 的回复：假设N-1个队，比赛S场，这时候增加一个队，会怎样？明白吗？大佬，可以留个联系方式吗，我把我写的，给您拍照发过去，您帮我看看对不对，行吗？

引用 12 楼 qq_45401622 的回复：引用 11 楼 SuperDay 的回复：引用 10 楼 qq_45401622 的回复：引用 9 楼 SuperDay 的回复：搞得定吗？我想了一下，还是搞不定找个男朋友帮你弄男朋友也找不到呀难道是传说中的恐龙

假设N-1个队，比赛S场，这时候增加一个队，会怎样？

大佬，能不能留个联系方式，我把我写的拍个照，给您发过去，您帮我看看，对不对，行吗

引用 9 楼 SuperDay 的回复：搞得定吗？我想了一下，还是搞不定

搞得定吗？

这个思路是不是N-1的时候，增加1，要比赛多少场，能不能按照这个思路走下去

那你不应该了，至少要想想

引用 5 楼 SuperDay 的回复：你是想不出来还是写不出来？想不出来也写不出来


Question: C语言 定义的2维字符数组，scanf输入赋值，watches显示数组有3行，莫名其妙插入了一行

那你可以去修改编译器代码

不是这个原因，数组首地址可以直接写名称的。照楼上说的改了结果不变，老实说我怀疑是编译器出毛病了

scanf("%s", str[0]); scanf("%s", str[1]); 这样写就好了呀 scanf("%s", str);  // 这个不对的 scanf("%s", &str[1][0]);  // 这样可以，但不如scanf("%s", str[1]);简单


Question: vs2012必须安装在c盘吗

引用 1 楼 user-1 的回复：不会，爱装哪个盘装哪个盘，只要磁盘空间够就OK好的谢谢了🙏

不会，爱装哪个盘装哪个盘，只要磁盘空间够就OK


Question: IDECode：：Blocks如何编译多源代码文件

加到项目里面啊，请看教程


Question: windows日志删除。真心求助啊，国庆不回家就为做题

查手册看一下

有个OpenEventLog接口，资料好少，你试着找找看，有点麻烦

引用 1 楼 user-1的回复:查手册看一下 需要用c语言自己编写，具体细节不太懂

需要用c语言自己编写，具体细节不太懂


Question: 有关c语言

#include<stdio.h> #include<stdlib.h> #include <ctype.h>  int main() {     int i;     char str[16];      scanf("%s", str);      for (i = 0; str[i]; i++)         if (isupper(str[i]))             str[i] = 'A' + (str[i] - 'A' + 4) % 26;         else if (islower(str[i]))             str[i] = 'a' + (str[i] - 'a' + 4) % 26;       puts(str);      return 0; } 供参考～

引用 10 楼 陌上_桑 的回复：不想写等代码呗...

这是要等代码还是接下来要分享代码？

伸手不是好习惯哦😯

好好看看ASCII码

#include <stdio.h> int main() { 	char a; 	scanf("%c",&a); 	if(a<='z'&&a>='A')//限定范围 	{ 	if(a<='z' && a>='w')//处理a的特殊情况 	printf("1:%c",a-22); 	else if(a<='Z'&& a>='W')//处理A的特殊情况 	printf("2:%c",a-22); 	 	else 		printf("3:%c",a+4);}//正常输出情况 	 	}

引用 4 楼 mgmws 的回复：初学者，不会把w,x,转换，难道要列举吗先写出来，哪怕列出来，看起来很笨，也是个办法，总比啥办法都没有强

初学者，不会把w,x,转换，难道要列举吗

引用 1 楼 SuperDay的回复:我在等你的源代码呢 这个是让自己写编程的

输入的字母ch，得到的字母方法： ch = (ch + 4) % 26;试一下～

这个不难呀，自己先动手弄，有啥问题再来问

我在等你的源代码呢


Question: 三个数比较求最大数

如楼上所诉，是接收格式和输入格式不匹配的问题 只需要调整接收格式和输入格式的任意一个格式，另它们一致即可解决。  扩展：如果你学了？：表达式，可以尝试用这个表达式写出求三数的最大值问题。

输入时得用逗号分开，因为格式串里面是逗号分开的，得对应

输入 5,4,3 或者改那个scanf("%d %d %d",&a,&b,,&c);

scanf，输入，格式串，两个逗号

引用 4 楼 user-4 的回复：引用 3 楼 qq_45704918 的回复：引用 1 楼 liups 的回复：输入时得用逗号分开，因为格式串里面是逗号分开的，得对应具体怎么改输入的时候要按照格式来输，格式里面要求三个数字是用两个逗号隔开的，你就要按照要求输入逗号，而不是用空格来分隔是哪个printf那步弄错了吗


Question: 不兼容

与10无关，64位的win不能运行16位程序，所以要么项目没对（可以搞成32位的），要么开发环境得换一个

这得是多古老的应用呢。楼主不能找一个稍微新一点的版本吗？


Question: C语言字符数组赋值时如果加双引号赋值为什么会只会输出p

引用 4 楼 ~稻草人~的回复:兄弟，你这个小问题关联了很多知识点，给你拆分一下 1：数组，定义时就确定存储地址，在内存中开辟一段存储空间。使用时地地址是不可变的，和指针最大的区别所在。所以字符数组定义时要么明确数组下标，要么用双引号赋字符串。其它类型数组定义时，原则一样。 2：字符数组赋值，你要理解为只有两种方法，一，定义时，直接赋字符串，如 char str[20]=“hello！”，二，定义过后，只能单个字符赋值，如 str[0]='f'。 3：单引号和双引号。单引号就是字符，双引号是字符串，但有更多意思：把双引号内的字符数据，按顺序并尾部加'\0'，存放在内存中，并返回存储位置的首地址。 4：结尾符号，'\0'，其实就是数值0，在字符数组中，你加不加结尾符，没规定，看你怎么处理其中数据而已，很灵活的。如，使用printf函数，必须加，如果你没0结尾，它从数组首地开始读取并输出，可能一个也不输出，也可能输出十万个，直到遇到第一个0，和数组多大没关系。  所以，你代码中有个明显错误， 1：第五行，str[0]赋值只能用单引号，单个字符赋值。如果用双引号，不是赋值，是赋字符串地址，数据定义过后，是不能改地址的。 2：第五行中，你想把双引号中的数据赋给[0]，但双引号其实是提取字符串地址的，地址是32位，而你str是8位的，所以，这一句是把“F”的内存地址的低8位值赋给[0] 3：然后，当你puts(str)，是把“F”字符串地址的低8位，以字符形式输出了 谢谢你，不过，执行第五行，计算机做了哪些事？

啊，字那么小，居然没看清楚是双引号呀。 这个用strcpy(str, “f”);就可以了呀 另外@楼上，char p[3]=“123”;不能通过编译，但是char p[4]=“123”;却可以通过编译的。因为这不是赋值，这是初始化

不支持字符串直接赋值  字符串是有多个字符组成的，就算可视化是一个字符，那它也是由两个字符组成的   `""` 这种写法会隐含一个 '\0' ，'\0' 就是 数值 0  你可自己验证一下，这种概念一定要知道   ``` char p[3] = "123"; // 能通过吗？ ```

因为你str[1]没设置为字符串结束标志啊，知道是什么字符吗？对，就是’\0’ 应该是：str[1] = ‘\0’;


Question: c语言

而且，只需要验证不超过一半的数值就可以了，因为两部分可以对调，加法交换律

因为需要验证的只要奇的素数就足够了，所以在所有范围内遍历素数就可以了


Question: 求助一下

1. int fun(int x) {     if (x == 0)     {         return 0;     }      if(x%10 == 7)     {         return 1;     }     else     {         return fun(x/10);     } }  函数结果是1就包含7，是0不包含7  2. 也可以用c的库函数实现， 先用itoa将该数转化为字符串str， 再用strchr(str, '7')查找字符串中是否包含字符7

对于这个数，对10取余得到余数，然后除以10，直到这个数被除为0，期间看余数有没有等于7的情况


Question: 萌新  想做个输个a*b矩阵的函数 但不知道哪儿出错

矩阵m行n列a,b矩阵n行k列相乘得m行k列c矩阵。行乘列很简单： 	for(int i=0;i<m;++i){ 		for(int j=0;j<k;++j){ 			for(int l=0;l<n;++l){ 				c[i][j]+=a[i][l]*b[l][i]; 			} 		} 	}

引用 8 楼 真相重于对错 的回复：[quote=引用 7 楼 OmniJax 的回复:] [quote=引用 6 楼 真相重于对错 的回复：]元素位置计算错误   scanf("%d",((array+i)+j)); ----->   scanf("%d",((array+i*y)+j));能讲一下原理吗[/quote] 你的a是连续存储的，假设你要存储一个3×3的矩阵。 需要有9个存储单元， 第一行是 0，1，2 ， 第二行是3，4，5， 第三行是6，7，8。 不知你看出规律了吗？  [/quote]噢噢    那有没有更简便或者易懂的方法呢

引用 7 楼 OmniJax 的回复:[quote=引用 6 楼 真相重于对错 的回复：]元素位置计算错误   scanf("%d",((array+i)+j)); ----->   scanf("%d",((array+i*y)+j));能讲一下原理吗[/quote] 你的a是连续存储的，假设你要存储一个3×3的矩阵。 需要有9个存储单元， 第一行是 0，1，2 ， 第二行是3，4，5， 第三行是6，7，8。 不知你看出规律了吗？

引用 6 楼 真相重于对错 的回复：元素位置计算错误   scanf("%d",((array+i)+j)); ----->   scanf("%d",((array+i*y)+j));能讲一下原理吗🙏

而且你这个输入的时候地址也没写对

为什么要用calloc呢？这样用是有问题的，栈在函数返回的时候要被释放的

#include <stdio.h> int i,j,a,b,n; int main() {     printf("输入第1个矩阵的行与列\n");     scanf("%d%d",&a,&b);     int array1[a][b];     int* ptr_array1;     ptr_array1=*array1;     ptr_array1= InputMatrix(a,b);     for(i=0;i<a;i++)     {         for(j=0;j<b;j++)         {             printf("%d\t",*((ptr_array1+i)+j));         }         printf("\n");     }     return 0; } ///////////////////////////////////////////////////////////////////////////////////////////// int InputMatrix(int x, int y) {     n = x*y;     printf("输入矩阵的%d个元素\n",n);     int * array;     array = calloc(n,sizeof(int));     for(i=0;i<x;i++)     {         for(j=0;j<y;j++)         {             scanf("%d",((array+i)+j));         }     }     return (array); }

运行结果什么样了？


Question: 关于if else语句的报错

else if (i>=60);

else if (i>=60);   //去掉～

楼上正解，顶

因为你(i >= 60)右边多了一个分号“;”呀

因为只有一个语句的情况下，可以不用括号。所以他认为没错。但是这样的话，后面的括号无法和else if匹配，他就会认为前面少了个if。如果你在你加的分号后面写个if就不会报错了。


Question: 一道编程题

输入scanf("%d",&h); 输出printf("%d",h); 循环输入所有人。

么么哒  谢谢哈

C风格的，新鲜出炉啦， gcc编译过，请参考： /*20190930*/ #include <stdio.h> #define M 20 #define N 5  int main() {   float run[M][N];   float height_max[M];   int i, j;    for(i = 0; i < M; i++)   {     printf("Input the height of each team:\n");     for(j = 0; j < N; j++)     {       scanf("%f", &run[i][j]);       printf(" ");     }   }    for(i = 0; i < M; i++)   {     height_max[i] = run[i][0];   }    for(i = 0; i < M; i++)   {     for(j = 0; j < (N-1); j++)     {       if(run[i][j] < run[i][j+1])         height_max[i] = run[i][j+1];     }     printf("Output the heightest of each team: %f\n", height_max[i]);   }    return 0; }

我再试试，看看c能不能写出来

引用 2 楼 Most_retarded的回复:#include <iostream>  const int M = 20; const int N = 5; int main() {   using namespace std;   float run[M][N];   float height_max[M];   int i, j;    for(i = 0; i < M; i++)   {     cout << "Input the height of each team:\n";     for(j = 0; j < N; j++)     {       cin >> run[i][j];       cout <<" ";     }   }    for(i = 0; i < M; i++)   {     height_max[i] = run[i][0];   }    for(i = 0; i < M; i++)   {     for(j = 0; j < (N-1); j++)     {       if(run[i][j] < run[i][j+1])         height_max[i] = run[i][j+1];     }     cout << "Output the heightest of each team: " << height_max[i] << endl;   }    return 0; } 我用C++写的，并用g++编译过，没有问题， c语言方式没写出来，你参考一下 我不会c++，我勉强看得懂c语言


Question: 用vc6写了个代码但显示的结果不对

这个结果跟你写的代码的结果一样，你的题目是什么要求

我是新手，就找了个代码照着打了

看着好像没问题。。。。。

你这变量名还不如a,b,c,d来的方便。看的我眼花。另外100000*0.007这种你就不能提前算出来吗。。。。。。最后没有return 0;至于结果不对我再看看。。。眼睛有点放花。


Question: 用vc6写了个代码但显示的结果不对

程序执行完全没有问题，如果结果不是预期，说明你的分红定义有问题。 程序首先进入else if(i<=200000) {         bonus=bonus1+(i-100000)*0.075;然后计算100000*0.1-（120000-100000）*0.075 = 11500

怎么个不对了？你又没给个计算公式，谁知道你的代码是不是对的呢？我发现这上面提问题的人，沟通方式多少有点没效率。你提一个问题得把前因后果说清楚呀，然后让我们去猜，这既浪费你的时间，也浪费我们的时间。希望改进一下


Question: c++矩形类

3、这个定义方式也是不合理的 void Rectangle::setRectangle(){ float length,width; len=length; wid=width; }  修改如下： void Rectangle::setRectangle(float length, float width){ len=length; wid=width; }

我看到两个地方，仅供参考： 1、第七行，构造函数内联定义的右花括号右边的分号  }; 2、成员函数这样定义不是很好 void Rectangle::print(){ cout<<"Rectangle Area is :"<<Rectangle::ComputerArea()<<endl; cout<<"Rectanhle C is :"<<Rectangle::CoumpterC()<<endl; } 建议修改为： void Rectangle::print(const Rectangle &r) { cout<<"Rectangle Area is :"<<r.ComputerArea()<<endl; cout<<"Rectanhle C is :"<<r.CoumpterC()<<endl; }

在mainhans中你是怎么调用的？

你的main函数在哪里？

Rectangle r1; r1. 然后它不会显示自己定义的那几个对象


管它安不安全，把那个选项关掉

scanf会有不同吗？

引用 3 楼 SuperDay 的回复：一开始就EOF试试看也是要输入3次scanf_s才能返回-1

引用 2 楼 user-2 的回复：⊙∀⊙！Ctrl+z是EOF吗win的一行开头输入ctrl+z是eof呢

引用 6 楼 SuperDay 的回复：scanf会有不同吗？提示scanf不安全…

一开始就EOF试试看

⊙∀⊙！Ctrl+z是EOF吗

这是代码.


Question: c语言

你这个题目是字符串还是数值？ 这个是数值的： int num,i=1； scanf("%d",&num); while（num）{ i*=num%10; num/=10;}

int num = 123456; int NUM[10] = {0}; int i = 0,j; for(i = 0;i < 10;i++) {      NUM[i] = num %10;      num /=10;     if(num == 0)   break;      } for(j=i-1;j>0;j--) {     printf("%d *",NUM[j]); } printf("%d\n",NUM[0]);   大概是这样，我没有上机跑，具体你可以调试下

__int64 Translate(int nCurrent) { 	__int64 nTotal = 1; 	while (nCurrent > 0) 	{ 		int nValue = nCurrent % 10; 		nCurrent = nCurrent / 10; 		nTotal *= nValue; 	} 	return nTotal; }

这个更适合用递归吧


Question: c/c++ 不重复走格子求方法总数

仅供参考  #include <iostream> using namespace std; #define MAX 100 int n, visited[2][MAX]; int way[8][2] = { {1,0},{0,1},{1,1},{-1,-1},{-1,0},{0,-1},{1,-1},{-1,1} }; int k; int dfs(int x,int y) { 	if (visited[x][y])		//访问过 		return 0; 	if (k == 1&&visited[x][y]==0)				//访问到最后的方格 		return 1; 	--k; 	visited[x][y] = 1;		 	int result = 0;								 	for (int i = 0; i < 8; ++i) {				//8个方向搜索 		int a = x + way[i][0], b = y + way[i][1];	 		if (a >= 0 && a < 2 && b >= 0 && b < n) {	//边缘检测 			result+=dfs(a, b); 		} 	} 	visited[x][y] = 0; 	++k; 	return result; } int main() { 	cin >> n; 	k = 2 * n;								//方格数 	int count = 0; 	for (int j = 0; j < n/2; ++j)			//根据对称性，取方格的四分之一即可，这里取左上角（n为奇数时中间部分单独计算） 		count += dfs(0, j); 	cout << (count * 2 + (n % 2 ? dfs(0, n / 2) : 0)) * 2; 	return 0; }

引用 3 楼 SALLY๑ 的回复：引用 2 楼 user-2 的回复：可以分析思路，不要动不动求程序。想要程序可以想百度一下看看那求一下思路可以嘛应该是N*N吧？这个估计要用到递归，弄一个二维数组，初始0，然后先朝一个方向走，走到没路就到上一层，换一个方向。就这样，每次换一个方向直到走完为止。说起来很复杂，但要实际去做就不一定了，看你的思路有没有理清楚

可以分析思路，不要动不动求程序。想要程序可以想百度一下看看

使用dfs搜索一下就可以了


Question: 求问！用c或者c++求矩阵中n个数的乘积最大值！

仅供参考：//将一个nxn的矩阵每行每列仅取一个数值使得乘积最大。假设没有值为0的元素。 #include <stdio.h> const int n=4; double mat[n][n]={     {1.0, 2.0, 4.0, 3.0},     {4.0, 3.0, 2.0, 3.0},     {5.0, 2.0, 1.0, 3.0},     {8.0, 2.0, 4.0, 0.5}, }; double p,pmax; int f[n][n]; void list(int m) {     for (int i=0;i<n;i++) {         if (f[m][i]==0) {             f[m][i]=1;             p*=mat[m][i];             if (m>=n-1) {                 if (p==pmax) {                     for (int j=0;j<n;j++) {                         for (int k=0;k<n;k++) {                             if (f[j][k]==1) printf("%d %lg\n",k,mat[j][k]);                         }                     }                 }             } else list(m+1);             p/=mat[m][i];             f[m][i]=0;         }     } } void calc(int m) {     for (int i=0;i<n;i++) {         if (f[m][i]==0) {             f[m][i]=1;             p*=mat[m][i];             if (m>=n-1) {                 if (p>pmax) pmax=p;             } else calc(m+1);             p/=mat[m][i];             f[m][i]=0;         }     } } int main() {     pmax=0.0;     p=1.0;     for (int j=0;j<n;j++) for (int k=0;k<n;k++) f[j][k]=0;     calc(0);     printf("pmax:%lg\n",pmax);     list(0);     return 0; } //pmax:640 //2 4 //0 4 //0 5 //0 8 //

这个比那个更简单多了

同上一个问题，可以用搜索算法


Question: 这个程序哪里有问题啊

引用 7 楼 weixin_45631665 的回复:[quote=引用 6 楼 csucxy的回复:]#include <stdio.h>  int main() {     int num1 = 3, num2 = 5, result;     int max(int n1, int n2);     result = max(num1, num2);     printf("max=%d\n", result);      return 0; }  int max(int n1, int n2) {     if (n1 > n2)         return n1;     else         return n2; } 应该将后面自定义函数放在int main()前面[/quote] 两种解决方法：第一种，就是函数定义写在main函数之前，就是把main函数写到max函数之后； 第二种方法，即把函数声明放到main函数之前。  第一种方法叫做定义式声明，后一种方法只是声明（在前）

引用 6 楼 csucxy的回复:#include <stdio.h>  int main() {     int num1 = 3, num2 = 5, result;     int max(int n1, int n2);     result = max(num1, num2);     printf("max=%d\n", result);      return 0; }  int max(int n1, int n2) {     if (n1 > n2)         return n1;     else         return n2; } 应该将后面自定义函数放在int main()前面

#include <stdio.h>  int main() {     int num1 = 3, num2 = 5, result;     result = max(num1, num2);     printf("max=%d\n", result);      return 0; }  int max(int n1, int n2) {     if (n1 > n2)         return n1;     else         return n2; }

只看出了两个：1、不能void；2、max函数定义在后，应该在调用前声明一下。 这两个都是标准的C的要求，VC或低版本的VC也许能过。  其他请高手补充

能仔细说一下怎么做吗，刚刚开始学编程语言，谢谢

函数需要前置声明~

函数调用前做函数原型声明。


Question: C语言随机数只生成的问题

又建一楼

a0==0这是比较，不是赋值 a=1这是赋值，不是比较 你把二者搞混了

if括号里的内容，你把赋值号当成了等号了


Question: 算法问题

引用 7 楼 赵4老师 的回复：仅供参考： //将一个nxn的矩阵每行每列仅取一个数值使得乘积最大。假设没有值为0的元素。 #include <stdio.h> const int n=4; double mat[n][n]={     {1.0, 2.0, 4.0, 3.0},     {4.0, 3.0, 2.0, 3.0},     {5.0, 2.0, 1.0, 3.0},     {8.0, 2.0, 4.0, 0.5}, }; double p,pmax; int f[n][n]; void list(int m) {     for (int i=0;i<n;i++) {         if (f[m][i]==0) {             f[m][i]=1;             p*=mat[m][i];             if (m>=n-1) {                 if (p==pmax) {                     for (int j=0;j<n;j++) {                         for (int k=0;k<n;k++) {                             if (f[j][k]==1) printf("%d %lg\n",k,mat[j][k]);                         }                     }                 }             } else list(m+1);             p/=mat[m][i];             f[m][i]=0;         }     } } void calc(int m) {     for (int i=0;i<n;i++) {         if (f[m][i]==0) {             f[m][i]=1;             p*=mat[m][i];             if (m>=n-1) {                 if (p>pmax) pmax=p;             } else calc(m+1);             p/=mat[m][i];             f[m][i]=0;         }     } } int main() {     pmax=0.0;     p=1.0;     for (int j=0;j<n;j++) for (int k=0;k<n;k++) f[j][k]=0;     calc(0);     printf("pmax:%lg\n",pmax);     list(0);     return 0; } //pmax:640 //2 4 //0 4 //0 5 //0 8 // 你这个列重复了啊 第一列取了三个元素

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

引用 4 楼 wowpH 的回复：这不是类似皇后问题吗。比较类似但也不一样

引用 3 楼 SuperDay 的回复：四层循环嵌套就可以了呀算法怎么实现？

这不是类似皇后问题吗。

四层循环嵌套就可以了呀

引用 1 楼 Most_retarded 的回复：这个用matlab来写更合适吧规定要用c或者c++写

这个用matlab来写更合适吧


Question: 求100之内的质数，为什么第二个for循环没有运行，求大佬帮帮忙

当i=4时，就会执行了，并且直接跳出第二层的循环，感觉第二层循环没啥用呢， 你跳出第二层换循环，还是要执行后面的，第二层循环没做啥呢

跳出之后还不是无条件赋值吗？这样不是所有都是素数吗？

for(j=2;j<i;j++)    {    if(i%j==0)    break; 写了这个for语判断是不是素数，不是素数就跳出循环，但不知道为什么不执行

这个数组赋值之前并没有判断是否素数

看红色部分，要判断j 和i是否相等， 只有相等的时候，才表示它为素数。但是你的代码中并没有判断，因为没有判断，所以将所的有i复制到数组中了，给你的感觉是二重循环没有执行，其实是执行了，是你的逻辑不正确，你在二重循环中打印一些信息，就可以知道二重循环执行没有。

arr[q++]=i放的位置不对，第二个for循环 结束后，i的值依旧会赋给数组

引用 6 楼 SuperDay 的回复:引用 5 楼 dajkhsdawe 的回复：#3  break 只能跳出第一个for语句吗，我还以为能跳出所有嵌套的循环.....break只跳一层，并且跳二层也不符合这个逻辑  哦哦   明白了   感谢感谢


Question: 这个程序怎么写啊～c语言

不提供程序，看看其他人吧，这里面很多雷锋

直接打印没啥意思啊～可以发个程序吗，我慢慢琢磨～谢谢

要不就写死常量直接打印出来

问题这样的话，结构体不是也没学到吗？

循环还没学弄这作业，老师会布置作业吗？

引用 5 楼 SuperDay的回复:这个很简单啊，弄一个结构数组，然后循环打出来就好了 刚学c，循环结构还没学，自己看的，不太能理解透彻，能发个程序吗，有关键部分就行，谢谢啦～

治好了我的颈椎病

这个很简单啊，弄一个结构数组，然后循环打出来就好了

引用 2 楼 SuperDay的回复:弄个结构数组输出吗？ 嗯嗯      是的

弄个结构数组输出吗？

头已歪     题目是什么都不清楚，问什么啊


Question: C语言：有序链表La 12345 Lb 2468 10按非减顺序放入链表Lc中，结果出来却是12234468 10 0 没有5，请各位大佬帮忙看看

引用 4 楼 自信男孩的回复:#include<stdio.h> #include<stdlib.h>  /*define La*/ typedef struct node {     int data;     struct node *next; }NODE, *LIST;   LIST create_list(int *arr, int len) {     LIST phead = NULL, p, r;     int i;      for (i = 0; i < len; i++) {         p = (LIST)malloc(sizeof(NODE));         if (!p)             exit(0);         p->data = arr[i];         if (!phead) {             phead = p;             r = phead;         } else {             r->next = p;             r = p;         }     }     p->next = NULL;      return phead; }  void show_list(LIST phead) {     LIST p = phead;      while (p) {         printf("%d\t", p->data);         p = p->next;     }     putchar(10); }  LIST merge_list(LIST la, LIST lb) {     LIST lc = NULL;     LIST p, q, r;      p = la;     q = lb;     r = lc;      while (p && q) {         if (p->data < q->data) {             if (!lc) {                 lc = p;                 r = p;             } else {                 r->next = p;                 r = p;             }             p = p->next;         } else if (p->data > q->data) {             if (!lc) {                 lc = q;                 r =q;             } else {                 r->next = q;                 r = q;             }             q = q->next;         } else {             if (!lc) {                 lc = p;                 r = p;             } else {                 r->next = p;                 r = p;             }             p = p->next;         }     }      while (p) {         if (!lc) {             lc = p;             r = p;         } else {             r->next = p;             r = p;         }         p  = p->next;     }      while (q) {         if (!lc) {             lc = q;             r =q;         } else {             r->next = q;             r = q;         }         q = q->next;     }     r->next = NULL;      return lc; }  int main() {     int i;     LIST la, lb, lc;     int a[5] = { 1,2,3,4,5 };     int b[5] = { 2,4,6,8,10 };      /*build linked-list La*/     la = create_list(a, 5);      /*build linked-list Lb*/     lb = create_list(b, 5);      /*print linked-list La and Lb*/     show_list(la);     show_list(lb);      lc = merge_list(la, lb);     /*print Lc*/     show_list(lc);      return 0; }  供参考～ 谢谢大佬跪谢了。万分感谢

引用 2 楼 自信男孩的回复:只用一个函数来实现，不看着费劲吗？ 学C语言时老师没讲链表。这学期学数据结构要用链表。然后我懵了

只用一个函数来实现，不看着费劲吗？

救救孩子吧，求求各位大佬


Question: 一个填空题

引用 楼主 IT.阿冷maya的回复: #include <stdio.h> #include<math.h> void main() {int fen1,fen2,fen5,n=0; for(fen1=0;fen1<=100;fen1++) 	for(fen2=0;fen2<=50;fen2++) 	{fen5=(100-fen1-2*fen2)/5	    ; if(fen5>=0) if(fen1+(2*fen2)+(5*fen5)==100) {printf("%-4d%-4d%-4d\n",fen1,fen2,fen5); 	   n++; 	} } printf("Total of Exchange Method is %d",n); }


Question: c指针加减发疑问！

我的并不会都是10，所以确实是和编译时有关的 就不久前在书上看到的没想到这几次经常在论坛见到类似的问题 在一个表达式中，若一个变量出现多次，不要使用++ -- 这样的操作，因为你不知道编译器是先用还是先

*p++是后增，不是*(**p);因此输出10是正常。*p++由于++优先级比*高，因此p++现结合，作为一个整体*p++就是先算 *(p++)得到的是10，然后p再向后偏移sizeof(int)个字节

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

什么编译器，把打印结果贴出来

与平台/编译器有关，可能先计算p，然后再计算p++

你把第一个printf中的两个分开打印，看看结果怎样？

书上有没有 `++i` `i++`