Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请教C中文件的写入

回复:
user: user-0
content: 引用 7 楼 lin5161678 的回复:默认行缓冲 遇到\n 缓冲区满 关闭文件  才会自动触发写入文件  这里一次循环不会触发写入文件 等到第二次循环 追加模式打开文件的时候 文件还是空的 所以 内容顺序乱了 好的 谢谢啦 我再思考思考

user: user-1
content: 默认行缓冲 遇到\n 缓冲区满 关闭文件  才会自动触发写入文件  这里一次循环不会触发写入文件 等到第二次循环 追加模式打开文件的时候 文件还是空的 所以 内容顺序乱了

user: user-0
content: 引用 5 楼 自信男孩 的回复:把fopen放到循环外，你要打开三次文件吗？如果打开文件三次，那么每次写入都是从文件头开始的。 我用的是追加

user: user-2
content: 把fopen放到循环外，你要打开三次文件吗？如果打开文件三次，那么每次写入都是从文件头开始的。

user: user-0
content: 引用 1 楼 lin5161678 的回复:加 fflush(fp); 就没这个问题了 另外 循环fopen 没fclose 是错的  请替我解惑一下上面两条疑问，麻烦了

user: user-0
content: 就单论正确的方式，是要在循环中有fopen的同时有fclose，但不在循环中这种错误导致的特殊情况是什么原理造成的方便解释一下吗？唯独最后一个结果到了最前面蛮有趣的，想深入了解

user: user-0
content: 我好奇的是，为什么会出现这样子的情况呢？ 能解释一下 原理吗

user: user-1
content: 加 fflush(fp); 就没这个问题了 另外 循环fopen 没fclose 是错的
user-0 提问: c语言，急求大神

回复:
user: user-1
content: scanf("%d",aStudents[i1].money); 这个参数要传递money的地址进去才行 name不需要是因为它是数组，数组名本身就代表一个地址

user: user-2
content: 缺少头文件，加一下<stdlib.h>试试～

user: user-1
content: #include<stdlib.h> #include <conio.h>  一个对应exit的，一个对应getch函数的
user-0 提问: 请教c语言基础问题

回复:
user: user-0
content: 引用 3 楼 自信男孩的回复:在第二个scanf后面加一个getchar();用于接收输入第二个数据之后的'\n'换行符。否则第三个scanf，即%c接收的是'\n'换行符。 看了你们的分析，真的学到了，我应该再仔细点。

user: user-0
content: 引用 1 楼 寻开心的回复:不是跳过了，而是把上一句scanf留到键盘缓冲区的'\n'字符获得到了。 在你这个scanf之前，增加一个getchar（）函数，把这个回车字符提取出来，然后再scanf这个字符就好了 哦哦，吸收回车，这我之前不知道，学到了，谢谢你。

user: user-1
content: 在第二个scanf后面加一个getchar();用于接收输入第二个数据之后的'\n'换行符。否则第三个scanf，即%c接收的是'\n'换行符。

user: user-2
content: 你可以在scanf("%c", &Fh); 之后增加一句 printf("Fh:%d\n", Fh); 来验证这点。 它会输出一个10， 也就是'\n'这个回车字符的ASCII值  getchar(); scanf("%c", &Fh); 这样过滤掉前面的回车键

user: user-2
content: 不是跳过了，而是把上一句scanf留到键盘缓冲区的'\n'字符获得到了。 在你这个scanf之前，增加一个getchar（）函数，把这个回车字符提取出来，然后再scanf这个字符就好了
user-0 提问: 为什么调用函数保存不了数据呢？一直输出0%，谢谢

回复:
user: user-1
content: 引用 3 楼 weixin_46024012 的回复:谢谢各位，我其实知道是要传地址，但我想看看主函数和子函数的同一个变量名的变量能等同用吗？现在我知道好像不能了 名字一样但是属于不同的函数栈，可以理解为两个不同的变量。

user: user-2
content: 或许你还要再看看作用域的知识。

user: user-0
content: 谢谢各位，我其实知道是要传地址，但我想看看主函数和子函数的同一个变量名的变量能等同用吗？现在我知道好像不能了

user: user-1
content: #include<stdio.h>  //int *pointer1,int *pointer2,int *pointer3,int *pointer4) void calculate_sum(int *age,int *sum1, int *sum2, int *sum3,int *sum4) {     if(*age>=0&&*age <= 18)         (*sum1)++;     if(*age>=19&&*age<=35)         (*sum2)++;     if(*age>=36&&*age<=60)         (*sum3)++;     if(*age>=61)         (*sum4)++;  }//写了一个给单个元素分类的函数。  int main() {     int a[10000],n,i,sum1=0,sum2=0,sum3=0,sum4=0;     scanf("%d", &n);     for(i=0;i<=n-1;i++)     {         scanf("%d",&a[i]);         calculate_sum(&a[i], &sum1, &sum2, &sum3, &sum4);     }     printf("%.2f%%\n%.2f%%\n%.2f%%\n%.2f%%",100.0*sum1/n,100.0*sum2/n,100.0*sum3/n,100.0*sum4/n);     return 0; } 供参考～  类似swap交换连个变量值一个道理，需要传地址过去。

user: user-3
content: int calculate_sum(int *age,int sum1,int sum2,int sum3,int sum4) 函数传递sum1，sum2，sum3，sum4进去，并不能获得返回值 要想获得返回值，必须是传这些变量的地址进去  好好看看函数的形参和实参部分的说明， 基本每本书都会说的交换两个数的swap函数，什么情况可以交换，什么无效
user-0 提问: getch()用法

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

user: user-0
content: 引用 1 楼 寻开心 的回复:实在看不出问题 编译跑了一遍，也没有发现楼主说的现象啊 asdw四个键都能控制着*移动， 不需要按回车键 哈哈，不是代码的问题，我清空了一下数据就可以运行了。

user: user-2
content: 输入函数都会阻塞，你可能需要借助kbhit函数

user: user-3
content: 因为标准输入是行缓冲，需要输入回车才能将输入缓存里的数据刷到内存。不然，还是在输入缓存里～

user: user-4
content: 实在看不出问题 编译跑了一遍，也没有发现楼主说的现象啊 asdw四个键都能控制着*移动， 不需要按回车键
user-0 提问: main.c(31) : fatal error C1004: unexpected end of file found（这是咋回事？）

回复:
user: user-1
content: 写代码的时候，好好按照规律缩进排版， 这种不匹配的地方就很容易看出来。 第一个while前面少了一个 }

user: user-2
content: 你的do while是怎么写的？根本不匹配
user-0 提问: scanf取入时，实数的类型

回复:
user: user-0
content: 哦哦哦，明白了，我是看到实数赋值时默认double所以想确认一下

user: user-1
content: 不是呢，scanf需要制定数据类型的，实数有单精度和双精度类型：%f（单精度）和%lf（双精度）

user: user-2
content: scanf读取的时候指定是什么类型就是什么类型 %lf  double %f  float 指定的类型，必须和你传入的参数的类型保持一致， 否则就不能读入正确的结果

user: user-3
content: 看你前面指定的数据类型
user-0 提问: 点击调试以后不出现蓝条怎么回事

回复:
user: user-1
content: 那么程序运行了没有，cmd窗口没出来压根没运行，看你这边没有  蓝条标记当前位置，应该不至于直接跳过去断点结束了，而且dev不会自动关闭cmd

user: user-2
content: 不太懂蓝条  . 同问
user-0 提问: 为什么没有输出所有字符？

回复:
user: user-1
content: #include <stdio.h> int main() {     char c;     printf("请输入:");     c=getchar();     /*     printf("\n输出为:");     putchar(c);     */     //while(c!='\0'){     while(c!='\n'){         //if('a'==getchar()){         if('a'==c){             printf("\n结束\n");             return 0;         }         else{             printf("\n输出为:");             putchar(c);         }         c=getchar();     }     putchar(10);      return 0; } 供参考～  注意c与'\0'比较，那么'\0'是无法从终端输入的。因此这样的判断是没有意义的～所以改成了与'\n'的比较～

user: user-0
content: 谢谢！！！

user: user-2
content: 把'a'==getchar()改为c=='a'或者'a'==c，这里你应该跟c比较，而不是跟getchar，getchar只要你用了就会读走一个，如果你把a的位置输在偶数位甚至不会结束还会把a打引出来，就是因为你这个判度的同时读走了一个字符，比如fadb你判等的时候把f读走，那么不符合进入else会读取a输出a然后下一次循环判等读走d不满足进入else输出b，就会出现这种跳着输出的现象且a不会结束

user: user-3
content: 你调用一次getchar就接受一个，你在while循环里把第一个o接受了，输出的是第二个o，然后d又被while循环条件里的getchar接收了
user-0 提问: c语言有没有替代getch()的函数

回复:
user: user-1
content: 楼上正解，还有_kbhit

user: user-2
content: 不行，接收不了~~~vs应该支持下划线  _getch()  吧

user: user-2
content: 可以有个简单方法，可能效率不咋的，每次接收一个字符，printf("\b*")，回退光标打个*把输入的覆盖掉
user-0 提问: 对文件中的数据进行整理

回复:
user: user-1
content: 这个不很难呢，建议fgets读取之后用strtok/strtok_r，一步操作就好了。

user: user-2
content: strlen（buffer）获取字符串的长度 int i=0； int nLen  = strlen(buffer); for ( ; i<nLen; i++ ) if ( '.' == buffer[i]  )break; if ( i==strlen ) { // 没找到. 可能是空行，或者其他的情况     printf("%s", buffer);     fputs(buffer, fpw); } else {     printf("%s", buffer+i+1);     fputs(buffe+i+1, fpw); }

user: user-0
content: 引用 3 楼 寻开心的回复:自己写吧 文件的读写，书上关于文件的那一章一定有 没有可以看网上的：https://www.runoob.com/cprogramming/c-file-io.html    打开要读的文件和要写的文件后 fgets读取一行字符串 从字符串里面找‘.’字符， 把它后面的剩余的部分用puts输出屏幕，fputs写入文件 然后关闭文件  自己尝试写，然后贴上代码的文本，求助 我不知道怎么处理数字和其后面的点

user: user-2
content: 自己写吧 文件的读写，书上关于文件的那一章一定有 没有可以看网上的：https://www.runoob.com/cprogramming/c-file-io.html    打开要读的文件和要写的文件后 fgets读取一行字符串 从字符串里面找‘.’字符， 把它后面的剩余的部分用puts输出屏幕，fputs写入文件 然后关闭文件  自己尝试写，然后贴上代码的文本，求助

user: user-0
content: 前辈，救救孩子吧

user: user-0
content: 求助各位
user-0 提问: C11有函数返回值适配器吗

回复:
user: user-0
content: 引用 4 楼 taodm的回复:哦，那，自己实现一个也必然是一个大问题，没这么简单的。 [quote=引用 2 楼 與蘤舊縐 的回复:] [quote=引用 1 楼 taodm 的回复:] 啊，std::tuple啊 老哥C啊[/quote][/quote] 那到不需要搞个万能的，具体情况具体实现还是简单的

user: user-1
content: 啊，std::tuple啊

user: user-1
content: 哦，那，自己实现一个也必然是一个大问题，没这么简单的。 引用 2 楼 與蘤舊縐 的回复:[quote=引用 1 楼 taodm 的回复:] 啊，std::tuple啊 老哥C啊[/quote]

user: user-2
content: 没有

user: user-0
content: 引用 1 楼 taodm 的回复:啊，std::tuple啊 老哥C啊
user-0 提问: 求助FOXPRO相关知识，回答有谢

回复:
user: user-1
content: 太古老了，30年前的流行趋势

user: user-0
content: 谢谢你的回答

user: user-2
content: 论坛有VFP板块，还有一个梅子论坛，好象国内就这两处了
user-0 提问: C语言新手，纯小白，学习困惑求帮助

回复:
user: user-1
content: 还要编码的时候一定要注意书写习惯，建议看下林锐的《c/c++ 高效编程指南》

user: user-2
content: 这个需要靠你的积累和不停地学习，实践来探索。多学习别人的，然后开拓自己的视野吧

user: user-1
content: 计算机是实践性很强的科目，不要停留在看书上，看书一定要敲代码！

user: user-1
content: 引用 2 楼 不忘初心20191013 的回复:[quote=引用 1 楼 qq_1457346882的回复:]这个说实话没有什么捷径，编程不是看出来的，是动手敲出来的。之前有一段时间我也是简单的就想想没敲，后来发现不会了。真要给建议那就是不要去看代码，哪怕是例题也跟着敲一遍，完了可以想想有没有简单的方法之类的，逐渐的思路就开拓出来了 谢谢你，我每个示例，习题，例题的代码都上机运行，都是自己在vs2019中敲出来的，可能还是学的时间短吧，头脑中还没行程验证的编程思维方式[/quote]  买本 c primer plus学一下，100经典习题做两遍，第一遍不会就照抄，第二遍就要回忆思考。

user: user-0
content: 引用 1 楼 qq_1457346882的回复:这个说实话没有什么捷径，编程不是看出来的，是动手敲出来的。之前有一段时间我也是简单的就想想没敲，后来发现不会了。真要给建议那就是不要去看代码，哪怕是例题也跟着敲一遍，完了可以想想有没有简单的方法之类的，逐渐的思路就开拓出来了 谢谢你，我每个示例，习题，例题的代码都上机运行，都是自己在vs2019中敲出来的，可能还是学的时间短吧，头脑中还没行程验证的编程思维方式

user: user-3
content: 这个说实话没有什么捷径，编程不是看出来的，是动手敲出来的。之前有一段时间我也是简单的就想想没敲，后来发现不会了。真要给建议那就是不要去看代码，哪怕是例题也跟着敲一遍，完了可以想想有没有简单的方法之类的，逐渐的思路就开拓出来了

user: user-1
content: 引用 9 楼 不忘初心20191013 的回复:[quote=引用 3 楼 走好每一步的回复:][quote=引用 2 楼 不忘初心20191013 的回复:] [quote=引用 1 楼 qq_1457346882的回复:]这个说实话没有什么捷径，编程不是看出来的，是动手敲出来的。之前有一段时间我也是简单的就想想没敲，后来发现不会了。真要给建议那就是不要去看代码，哪怕是例题也跟着敲一遍，完了可以想想有没有简单的方法之类的，逐渐的思路就开拓出来了 谢谢你，我每个示例，习题，例题的代码都上机运行，都是自己在vs2019中敲出来的，可能还是学的时间短吧，头脑中还没行程验证的编程思维方式[/quote]  买本 c primer plus学一下，100经典习题做两遍，第一遍不会就照抄，第二遍就要回忆思考。[/quote] 我们现在学的是谭浩强的《C程序设计 第五版》，这个教材怎么样？[/quote]  习题不错，英文不好当入门也可以，但是你需要花时间去改编程习惯。 真正编程的时候，变量名不能是a，b，c这种的

user: user-4
content: 谭浩强的书很经典，但也很老了，推荐cprimerplus ，另外基础学会了可以开始学习数据结构

user: user-0
content: 引用 3 楼 走好每一步的回复:[quote=引用 2 楼 不忘初心20191013 的回复:] [quote=引用 1 楼 qq_1457346882的回复:]这个说实话没有什么捷径，编程不是看出来的，是动手敲出来的。之前有一段时间我也是简单的就想想没敲，后来发现不会了。真要给建议那就是不要去看代码，哪怕是例题也跟着敲一遍，完了可以想想有没有简单的方法之类的，逐渐的思路就开拓出来了 谢谢你，我每个示例，习题，例题的代码都上机运行，都是自己在vs2019中敲出来的，可能还是学的时间短吧，头脑中还没行程验证的编程思维方式[/quote]  买本 c primer plus学一下，100经典习题做两遍，第一遍不会就照抄，第二遍就要回忆思考。[/quote] 我们现在学的是谭浩强的《C程序设计 第五版》，这个教材怎么样？

user: user-0
content: 引用 6 楼 走好每一步的回复:还要编码的时候一定要注意书写习惯，建议看下林锐的《c/c++ 高效编程指南》 我们现在学的是谭浩强的《C程序设计 第五版》，这个教材怎么样？

user: user-0
content: 我们现在学的是谭浩强的《C程序设计 第五版》，这个教材怎么样？
user-0 提问: 帮忙找简单链表代码实现的bug

回复:
user: user-0
content: int main() {    int** p;    *p=(int*)malloc(sizeof(int));    **p=6;    printf("%d",*p);    printf("%d",**p); }   这段代码运行卡顿后什么结果都没有就结束了，为什么

user: user-0
content: 怎么给分。。。。。。。。

user: user-1
content: 引用 10 楼 KID6200 的回复:知道了，但是有一点要问假如head是单指针，p是双指针，且p=&head。我要做引用调用是不是应该iniList(&head)，而传址调用是iniList(LNode** p)？ 而且这两者都能改变*head，即**p。  是的 参数入栈的毕竟是数值，而不是变量本身，所以函数体内部就无法修改这个变量；  传递变量的地址进去，通过地址就可以修改变量本身，而无法修改变量的地址；

user: user-1
content: 定义变量，并在变量里面保存了这个指针。  再取这个变量的地址，就是二级指针。  int **p; 定义了变量， 但是变量的内容是什么呢， 一个（int*）类型的地址。 定义变量可以满足这个条件。  int **pp p = (int ** ) malloc( sizeof(int*)); *p = (int*) malloc(sizeof(int)); 这样也是可以  不同就是： 两个malloc的这个例子里面，  p指向的一个动态内存地址， 动态内存当中保存的是另外一个动态内存的地址 前面的例子当中，p指向的是一个栈变量（局部变量）的地址， 这个栈变量内容是一个动态内存的地址；  你还可以这样 int **p; int  v[] = {1,2,3}; int q = v; p = &q; 这里p指向的是局部变量的地址， 局部变量内容是另外一个数组的地址， 这样**p也是有效的   这三种p都是有效的int **类型，只是一层层指向的内存地址不同而已

user: user-0
content: 知道了，但是有一点要问假如head是单指针，p是双指针，且p=&head。我要做引用调用是不是应该iniList(&head)，而传址调用是iniList(LNode** p)？ 而且这两者都能改变*head，即**p。

user: user-0
content: 引用 8 楼 寻开心的回复:简单的类比， 等号两边各自扔掉一个星  int * p; *p = 3; 这样一眼就能看明白吧。 p是野指针， 直接赋值自然不行。  int **p 一样的情况 p还是野外指针， *p 同样不知道是哪儿去了 定义变量和申请内存有什么区别

user: user-1
content: 简单的类比， 等号两边各自扔掉一个星  int * p; *p = 3; 这样一眼就能看明白吧。 p是野指针， 直接赋值自然不行。  int **p 一样的情况 p还是野外指针， *p 同样不知道是哪儿去了

user: user-1
content: 引用 5 楼 KID6200 的回复:int main() {    int** p;  *p=(int*)malloc(sizeof(int)); // p是什么还不知道呢， 哪儿来的*p啊     **p=6;    printf("%d",*p);    printf("%d",**p); }   这段代码运行卡顿后什么结果都没有就结束了，为什么  你可以这样  int* q = (int*) malloc(sizeof(int)); p = &q;  ** p = 6;

user: user-2
content: int** p;这里有问题，p是双指针（指针的指针），你应该先给p申请内存，再给*p申请内存 即 p = (int**)malloc(sizeof(int*)); 再 *p = (int*)malloc(sizeof(int)); 这个和上面说的 LNode* head; iniList(&head); 是不一样的，head是单指针，它的地址&head就是双指针

user: user-3
content: 还有一个问题，你这个add是头添加？NOW申请内存，now.val=val,这传一个字符用.传字符串用-> 不过字符串那你定义就要char val[]定义成数组 下面 now->next=last->next; last->next=now;这是从头加，你的应该是从尾加？个人建议你从尾加代码加个遍历到最后一个，不然你没有接收他的指针，那么下次再用就错了，你就需要每一次传的都必须是最后一个的指针不能错，记最后一个有点烦，所以建议你加个遍历，每次传头指针

user: user-4
content: 楼上已经指出问题所在了。  看到一点小瑕疵，printf("%d", head->next)，这里的next是指针，一般不这么用。如果一定要用的话， printf("%p", head->next)或者printf("%08X\n", p)，这样更直观点。  另外，楼主没有释放内存。如果楼主只是举个例子倒没啥。如果是项目的一部分的话，一定要记得释放内存，这是一个好习惯。

user: user-2
content: 把void iniList(LNode *head) 改成 LNode* iniList() {     LNode* head = (LNode*)malloc(sizeof(LNode));     head->Next = NULL;     return head; } main调用改成 LNode* head = iniList();  或者改成 LNode* iniList(LNode** head) { //双指针     *head = (LNode*)malloc(sizeof(LNode));     (*head)->Next = NULL; } main调用改成 iniList(&head);  原因：方法内部改变指针指向，不影响外部的指针指向。

user: user-5
content: 传一个指针给函数，在函数内部修改指针的地址，函数返回后那个指针的地址不变，起不到效果 要改变那个指针，需要传入指针的指针
user-0 提问: 为啥输入后没反应？

回复:
user: user-1
content: scanf中只放你的输入数据类型（%d%lf等）和格式就好了，不要换行 输出格式printf中前面是原封不动要显示的字符加你要替换的变量的数据类型，同样是%d%f这种，然后后面逗号接要替换的变量，一个数据类型对应后面的一个变量，从左往右依次。他会自己去把你后面的变量的值放到你前面的对应位置输出，不要%变量名，这是错的

user: user-2
content: int main(){ 	int n,m; 	float s; 	do { 		printf("Please enter two numbers n and m:\n"); 		scanf("%d%d",&n,&m); // 这里删除了 是“%d”后面的\n 	} while (n<m); 	s = cp(n,m); printf("%d!/(%d!(%d-%d)!)=%d",n,m,n,m,s);  	return 0; }

user: user-3
content: 把你scanf中的\n去掉

user: user-0
content: 输入4 和1 后，后面的程序似乎没有运行了。。。
user-0 提问: stateflow中如果c环境下，如果将数据的最低位输出给布尔类型？

回复:
user: user-1
content: 硬件编程很久没接触过了，具体原因不太清楚。 看错误提示，是因为数据传送尺寸错误造成的。

user: user-0
content: Error: Evaluation of elaborate function on class hdldefaults.Stateflow failed with the error message: hdlcoder:pirudd:StateflowIRGenFailed: Error: HDL code generation from Stateflow failed: Stateflow:Build Failed to eliminate a use of the MATLAB function 'bitget'. For non-simulation builds, uses of unsupported MATLAB functions are eliminated if they do not effect the model outputs.   使用了matlab的函数 bitget后，仿真波形有 但是导出hdl代码的时候报错

user: user-0
content: 引用 4 楼 真相重于对错 的回复:你说的环境我没用过，具体为何错误，不清楚。 多问一句，抱什么错？ 论文的网址在这里 https://www.ixueshu.com/document/b182fab31af30eb10d51a0751563d625318947a18e7f9386.html

user: user-0
content: 引用 4 楼 真相重于对错 的回复:你说的环境我没用过，具体为何错误，不清楚。 多问一句，抱什么错？  Cannot reshape Local Data 'tmp' ([8]) to Output Data 'txd' (scalar) for operator =. Please refer to object 'rshift'. Component:Stateflow | Category:CodererrorOpen Size mismatch errors occurred in shape propagation. Aborting code generation Component:Stateflow | Category:Codererror Size mismatch errors occurred in shape propagation. Aborting code generation   我将txd配置成fixdt(0,1,0)或者布尔类型 好像 都不行

user: user-1
content: 你说的环境我没用过，具体为何错误，不清楚。 多问一句，抱什么错？

user: user-0
content: 因为看一篇论文里面表述的是如下写法  txd=tmp%2; tmp=tmp>>1;  但是我按上面这个写法好像也不对，也是报错  不知道是哪个地方配置的问题

user: user-0
content: 引用 1 楼 真相重于对错 的回复:移位并不能获得最低位，移位相当于除2 获取最低位 用 &0x1; 我在simulink的stateflow里面的一个状态中如下表述总是不对  条件转移是 tmp=datain  都定位为无符号的uint8，txd是设成布尔的二进制输出  在其中一个状态里面写： txd=tmp & 0x01; tmp=tmp>>1;  其中tmp在stateflow里面我配置成local类型的局部变量  运行仿真总提示 不能reshapeloca的数据tmp到输出的txd

user: user-1
content: 移位并不能获得最低位，移位相当于除2 获取最低位 用 &0x1;
user-0 提问: C语言小白求助！！

回复:
user: user-1
content: getchar()是从终端接收一个字符，!= '\n'是指接收到的这个字符与'\n'比较。

user: user-2
content: getchar()是获取一个字符，!=\n就是从缓存区获取的这个字符不是换行符，unix，linux下一般都是相当于你的回车键，window和mac用\r或\r\n     这两个里\r是回车\n是换行 '\r'是回车，前者使光标到行首，（carriage return） '\n'是换行，后者使光标下移一格，（line feed）
user-0 提问: 运行超时问题

回复:
user: user-1
content: float的比较应该用范围方式if(y<0.000001||y>-0.000001),这个精度由你自己定，如果还是不行那就是循环了，看你的数据能不能达到你break的条件

user: user-2
content: 不要用float和0比较，要避免，你的循环退出条件为y==0因为精度问题，没有返回为0的，所以不能退出循环,可以在你的func中改一下返回值
user-0 提问: 问一个C语言关于文件的题目

回复:
user: user-1
content: 写错写错，是if(strcmp(结构体数组名[i].出版年份,输入的年份)==0)

user: user-1
content: 上面有点错误，如果是字符串，那就if(strcmp(结构体数组名[i].出版年份,输入的年份))，把找出来的结构体数组元素用一个新的结构体数组存放，最后写入新文件就好了。

user: user-1
content: 把原文件的东西读进系统用结构体数组保存，再定义一个变量存放输入的年份，然后用循环来匹配出相应年份出版的书本。如果循环控制变量是i，年份是整型变量，那就if(结构体数组名[i].出版年份==输入的年份)，如果是字符串，那就if(strcmp(结构体数组名[i],输入的年份))

user: user-0
content: 求下源代码 1111111

user: user-2
content: 定义好你的结构体，然后按格式获取你book里的信息存到数组就好了啊，然后关闭这个文件打开另一个，循环判断你结构体数组里年份的那个变量值，满足条件就把结构体按格式写道stack里就好了啊
user-0 提问: C语言小白求助!

回复:
user: user-1
content: 不但多一个a，而且还会多一个e 正像楼上朋友说的，if else语句最好还是加上大括号吧 	for (ps = str1; *ps != '\0'; ps++) 	{ 		if (*ps == 'a' || *ps == 'e') 			putchar(*ps); 		else 		{ 			(*ps)--; 			putchar(*ps); 		} 	} VS2015 C++调试结果

user: user-2
content: if (*ps=='a'||*ps=='e')             putchar(*ps);         else             (*ps)--，putchar(*ps);  这样也可以， 把分号改逗号

user: user-3
content: 又是省略大括号的问题，  if (*ps=='a'||*ps=='e')             putchar(*ps);         else             (*ps)--;         putchar(*ps); 等价于  if (*ps=='a'||*ps=='e'){             putchar(*ps); }         else{             (*ps)--; }         putchar(*ps); 也就是说你最后的putchar不管上面判断的怎么样都会输出一次，加上你if的，就是两次ae，不加大括号相当于对应的语句只有下面的一句已。一个大括号麻烦不到哪去，掌握不好就都加上，后面查错也好查

user: user-0
content: 引用 8 楼 user-4 的回复：[quote=引用 6 楼 weixin_45906870 的回复:] [quote=引用 2 楼 寻开心 的回复：] if (*ps=='a'||*ps=='e')             putchar(*ps);         else             (*ps)--，putchar(*ps);  这样也可以， 把分号改逗号 第二个问题怎么解释呢？[/quote] printf("%c",i%3?str2[i] : '*'); 相当于  if(i%3 != 0) printf("%c",str2[i]);   else  printf("%c" ,'*'); i%3?str2[i] : '*'   这是个三目运算符，    ？前面的表达式非0则取：之前的值，反之取：后面的值，针对你这个而言就是i%3如果不等于0，就取str2[i] ，反之取'*'[/quote]非常感谢您！帮我大忙了！

user: user-4
content: 引用 6 楼 weixin_45906870 的回复:[quote=引用 2 楼 寻开心 的回复：] if (*ps=='a'||*ps=='e')             putchar(*ps);         else             (*ps)--，putchar(*ps);  这样也可以， 把分号改逗号 第二个问题怎么解释呢？[/quote] printf("%c",i%3?str2[i] : '*'); 相当于  if(i%3 != 0) printf("%c",str2[i]);   else  printf("%c" ,'*'); i%3?str2[i] : '*'   这是个三目运算符，    ？前面的表达式非0则取：之前的值，反之取：后面的值，针对你这个而言就是i%3如果不等于0，就取str2[i] ，反之取'*'

user: user-0
content: 引用 2 楼 寻开心 的回复：if (*ps=='a'||*ps=='e')             putchar(*ps);         else             (*ps)--，putchar(*ps);  这样也可以， 把分号改逗号 第二个问题怎么解释呢？

user: user-0
content: 引用 1 楼 qq_1457346882 的回复：又是省略大括号的问题，  if (*ps=='a'||*ps=='e')             putchar(*ps);         else             (*ps)--;         putchar(*ps); 等价于  if (*ps=='a'||*ps=='e'){             putchar(*ps); }         else{             (*ps)--; }         putchar(*ps); 也就是说你最后的putchar不管上面判断的怎么样都会输出一次，加上你if的，就是两次ae，不加大括号相当于对应的语句只有下面的一句已。一个大括号麻烦不到哪去，掌握不好就都加上，后面查错也好查那第二个问题怎么解释呢？

user: user-0
content: 那第二个问题怎么解释呢？
user-0 提问: 横线上应该填什么语句。。。

回复:
user: user-1
content: 引用 2 楼 m0_46132054 的回复:[quote=引用 1 楼 寻开心 的回复：]这个最基础的东西必须要自己写啊 看书啊，看书啊，看书啊 重要事情说三遍我这样写了：a=%c，b=%%，c=%cla [/quote] 输入输出格式都差不多  可以参考下输入格式，有条件最好拿电脑跑一下代码

user: user-1
content: 看看printf 的输出格式

user: user-0
content: 引用 1 楼 寻开心 的回复：这个最基础的东西必须要自己写啊 看书啊，看书啊，看书啊 重要事情说三遍我这样写了：a=%c，b=%%，c=%cla

user: user-2
content: 这个最基础的东西必须要自己写啊 看书啊，看书啊，看书啊 重要事情说三遍
user-0 提问: 这是怎么回事？

回复:
user: user-1
content: 用VS2015就可以看出问题出在哪里  所以代码修改为 #include <stdio.h>  int main() { 	char c;//--------类型改为char-------- 	char enter; 	printf("请输入:"); 	c = getchar(); 	enter = getchar();//-------屏蔽回车按键------------- 	printf("输出为:"); 	printf("%c", c); 	putchar(c); 	while (c>0) { 		printf("\n请输入:"); 		c = getchar(); 		enter = getchar();//--------屏蔽回车按键--------- 		printf("输出为:"); 		printf("%c", c);//--------%s改为%c，添加c-------- 		putchar(c); 	} 	return 0; } VS2015 C++环境调试

user: user-0
content: 编译器是clang，版本是8.0.0

user: user-2
content: 除了printf（“%s”）这里该指定参数没有指定之外，没有明显的问题  你的编译器是什么？ 也许是编译器在printf里面看到了%s， 随便从堆栈找了个地址就当中字符串输出了
user-0 提问: 关于C语言中puts函数的问题

回复:
user: user-0
content: 十分感谢

user: user-1
content: 局部变量的之间的地址关系，c/c++标准没有定义， 是编译器自己的行为， 不能把你发现的结果作为所有的编译器通用行为 它只对你所有的编译器和所在的系统环境有效，换一个不一定对

user: user-1
content: printf("%p : %p %p", sida_a, dont, side_b); 你看看三个指针，他们的关系，到底哪一个地址高，哪个一个地址低  函数里面的局部变量，都是栈内存， 在你用的这个编译器里面，地址向下增长的.

user: user-0
content: 那它为什么不跑到side_b而非要跑side_a那里去呢？

user: user-1
content: 就是把字符数组当字符串使用的时候， 必须在数组里面，人工的填写一个'\0'字符放到最后，即：  char dont[] = {'W','O','W','!' ,'\0'};  而 char side_a[] = "Side A"; 这种定义，因为字符串自带'\0'字符在尾巴，就无需人工补这个0字符了

user: user-1
content: 因为它是数组， 里面没有一个 ‘\0’这样的一个值 把它当做字符串输出的时候， puts会在数组里面一直输出，直到遇到了'\0'字符为止 显然，在输出的过程当中越界了， 跑到了side_a数组里面还在继续输出，直到遇到了“Side A”这个字符串结尾的'\0'字符才结束
user-0 提问: c语言小白求解，向各位大神请教。写一个求解函数，编译没问题，答案不对呀

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

user: user-2
content: 按要求格式化输入就好

user: user-3
content: 第一，scanf输入数据格式要一致，第二，你的测试数据判别式不能小于0

user: user-4
content: 注意scanf输入格式，代码中写了逗号过或空格，那控制台也要输入逗号或空格，还有建议你定义变量的时候尽量做到见名之意，写好注释，养成好习惯

user: user-5
content: 可能是逗号中英文不对应，要区分中英文逗号。

user: user-6
content: scanf("%f,%f,%f",&a,&b,&c); 注意输入格式要和scanf中的保持一致，尤其是逗号的中英文要和scanf中的保持一致。

user: user-7
content: VS2015 C++环境调试没问题  原因可能就是像楼上朋友说的，输入的时候要注意有逗号，就是上图红线内容 请参考《scanf()函数的用法》 希望能够帮到你！

user: user-6
content: #include <stdio.h> #include "math.h" int main() {     float a,b,c,d,x1,x2,q;     scanf("%f,%f,%f",&a,&b,&c);     printf("%f, %f, %f\n", a, b, c);     d=b*b-4*a*c;     if (d<0) {         printf("No answer!");         return -1;     }      q=sqrt(d);     x1=(-b+q)/(2*a);     x2=(-b-q)/(2*a);     printf("x1=%.2f,x2=%.2f",x1,x2);     return 0; }   注意return -1;    引用 1 楼 寻开心 的回复:#include <stdio.h> #include "math.h" int main() {     float a,b,c,d,x1,x2,q;     scanf("%f,%f,%f",&a,&b,&c);     printf("%g, %g, %g\n", a, b, c);     d=b*b-4*a*c;     if (d<0) {     	printf("No answer!"); 	} 	q=sqrt(d);     x1=(-b+q)/(2*a);     x2=(-b-q)/(2*a);     printf("x1=%.2f,x2=%.2f",x1,x2);     return 0; }  其实没有改什么 严重怀疑你的输入不对，  一定是1,4,4这样的输入， 数字之间必须有逗号，因为你的scanf格式指定要求的 输入后，增加了一行输出，就是用来比对，看你是否真的正确的输入了数据

user: user-8
content: scanf("%f,%f,%f",&a,&b,&c); 估计如一楼所说，你输入的格式用逗号隔开，你的输入也需要一致，用逗号隔开

user: user-9
content: #include <stdio.h> #include "math.h" int main() {     float a,b,c,d,x1,x2,q;     scanf("%f,%f,%f",&a,&b,&c);     printf("%g, %g, %g\n", a, b, c);     d=b*b-4*a*c;     if (d<0) {     	printf("No answer!"); 	} 	q=sqrt(d);     x1=(-b+q)/(2*a);     x2=(-b-q)/(2*a);     printf("x1=%.2f,x2=%.2f",x1,x2);     return 0; }  其实没有改什么 严重怀疑你的输入不对，  一定是1,4,4这样的输入， 数字之间必须有逗号，因为你的scanf格式指定要求的 输入后，增加了一行输出，就是用来比对，看你是否真的正确的输入了数据
user-0 提问: 请教一个汇编语言的问题

回复:
user: user-1
content: 除法  eax保留商2， edx保留余数  1E 乘法  相当于1E*1E ,  eax保留低位,因为没有仅为，eax = 1E*1E = 384   没学过汇编，你跑这儿show什么汇编代码啊
user-0 提问: 关于malloc函数的问题

回复:
user: user-0
content: 好的，谢谢大佬！我明白了。

user: user-1
content: malloc(sizeof(struct Node)) 和  (struct Node*)malloc(sizeof(struct Node) malloc函数的返回值是void *你用别的类型的指针去接收，如果编译器允许这种，会自己给你转化的话是不会出问题的，但是如果不会给你转就会报错，错误大意就是把什么类型赋给什么类型是出错，不允许之类的 (struct Node*)malloc(sizeof(struct Node)中前面的(struct Node*)是强制转换，它是把你申请好的先强制转换成你所需要的类型，这样再进行“赋值”操作的时候类型一致，就不会报错了 所以为了避免麻烦，还是建议直接用后面的方式，比较好

user: user-2
content: 因为malloc返回的是void*
user-0 提问: c语言求助

回复:
user: user-0
content: 引用 5 楼 與蘤舊縐的回复:这个习惯建议改一下，有的语言不支持把大括号放到下一行的写法 java好像就是不能把大括号放下一行我这样写是c老师教的，说是好看点

user: user-0
content: 引用 4 楼 user-3的回复:else if 懂了谢谢大佬else后面不能加括号的

user: user-0
content: 懂了谢谢大佬else后面不能加括号的

user: user-1
content: else(a < number) 改成 else if(a < number)

user: user-2
content: 这个习惯建议改一下，有的语言不支持把大括号放到下一行的写法

user: user-3
content: else if

user: user-2
content: do{  }

user: user-0
content: 提示我加分号，可是加前面的就变成空语句了

user: user-0
content: #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { 	srand(time(0)); 	int number = rand() % 100 + 1;//游戏需要的数为1到100，所以需要加一 	int count = 0; 	int a; 	do 	{ 		printf("请输入你下注的号码："); 		scanf_s("%d", &a); 		count++; 		if (a > number) 		{ 			printf("您输入的数比中奖数大\n"); 		} 		else(a < number) 		{ 			printf("您输入的数比中奖数小\n"); 		} 	} while (a != number); 	printf("恭喜你已经中奖了,您用了%d的人民币就中奖了",count); 	return 0; }
user-0 提问: c语言

回复:
user: user-1
content: 您的这个代码主要看do while循环 1第一次循环a=-1, b=0，此时执行 n = m + n; 	      a += 2,b++; 执行之后，a=1,b=1，n=2，m=1，此时while循环条件成立，进行第二次循环； 2第二次循环，此时执行 m = 2 * n; 	     b++; 执行之后，a=1,b=2，n=2，m=4，此时while循环条件不成立，循环结束； 在VS2015 C++环境下

user: user-2
content: 想看图片上的代码，但是我脖子歪不到90°，没辙了

user: user-3
content: 打字会不会？打开 https://tool.lu/coderunner/ 选择c语言，然后把你的程序输入进去，点运行。
user-0 提问: C语言

回复:
user: user-1
content: m的倍数，1倍、2倍、3倍的往上遍历，比k++要效率很多

user: user-0
content: 懂了，谢谢大佬的指点

user: user-2
content: a和b的最小公倍数是m m显然是a的倍数，也是b的倍数 对于a来说， m是a， 2a，3a， ..... ka 当中的一个， k<=b 所以，从a开始判断是不是b的倍数，不是就看2a是不是，。。。。。   加上一个a和b大小的判断，用大的来做这个操作循环次数少一点儿
user-0 提问: C语言文件处理

回复:
user: user-1
content: 假如路正确的话 字符串就是你输入的双引号中间的那个部分， 输入的时候不要带上双引号 有双引号那是c语言里面的语法表达，字符串本身并没有两端的那个双引号 而且那个\\也是不需要的， 那也是c语法里面的转义字符带来的，也可以用/符号来取代 你可以用c:/user/administrator/desktop/1.txt 这样的字样从键盘输入

user: user-1
content: 你输入的时候，不要带上两边的双引号
user-0 提问: 萌新提问

回复:
user: user-1
content: printf少了，  问题楼上说了都对，我就是好奇想来问问，现在只有一句语句体不加{}是书上的，声明写在main函数里是书上的。现在的新书又出了main函数返回值是void不用return了嘛

user: user-2
content: 先说你的程序，问题楼上的朋友已经说了，printf()函数中少一个逗号，修改之后 VS2015 C++环境输出为  我觉得你的意思是想问超出该类型表示范围时应该怎么处理，但是int的长度是32位，所以你的代码应该改为 #include <stdio.h>  int main() { 	short a, b;//-------int改为short-------- 	a = 32767; 	b = a + 1; 	printf("%d,%d\n", a, b);//--------添加逗号-------- 	return 0; }  应为short类型的长度是16位，因此此时的输出为  主要原因是a的值32767，其二进制表示形式为0x0111 1111 1111 1111，b的值是0x1000 0000 0000 0000，因为short是有符号的，其范围是-32768~32767，0x1000 0000 0000 0000表示-32768

user: user-3
content: printf("%d,%d\n" a, b); 引号后面少一个逗号 改成 printf("%d,%d\n",a, b);

user: user-4
content: int main() {      .....      return 0; } 这才是标准的结构。 不要void main（）  printf("%d,%d\n", a, b); 这里a的前面少了一个逗号
user-0 提问: 如何理解链表的游标实现

回复:
user: user-1
content: 是的，理解正确

user: user-0
content: 谢谢您的回复 我想了想，总结了一下，麻烦您看一下我说的对不对？感谢  数组下标其实也就是代表着一个结构体的地址，而NodeArray[i].next 就可以看做存储着下个结构体的地址。虽然数组在内存中是连续的，但是用游标实现的链表却在内存中不连续，每个元素之间是由结构体中的next来连接的。

user: user-2
content: 我的理解是就是用数组实现的链表：实现的链表实际上并不是真正的动态内存组成的，没有malloc 和 free的内存操作 而是用事先定义的一个大数组来保存数据，数组元素是一个结构， 其中一个属性是next，指向下一个元素的数组下标 struct Node {      struct ata {      } data；     int next； } NodeArray[1000]； 大概就这个一个结构， 初始化next都是-1， 表示空的。 因为数组的下标从0开始  链表就是用NodeArray[i].next --> NodeArray[j].next --> NodeArray[k] ....... 这里的next就是游标，不是指针  这个更适合一些没有指针的语言来使用。 c使用也可以， 没有内存的分配和释放，效率也高一些；限制就是数组的大小不能改了。
user-0 提问: 请问char*与unsigned char*传参不同会有问题吗

回复:
user: user-1
content: 你传的什么数据过去，用的时候记得用相应的指针去取就好，中间传递过程可以不用考虑指针类型

user: user-1
content: 没有影响，同一平台上，指针类型的大小相同，不会发生截断造成地址变动丢失数据，更不会造成数据变更

user: user-1
content: 不会，只是会影响到指针类型，不会动到里面的数据的
user-0 提问: 请问一下这个题该怎么做？一个小白，大神可否有完整代码，指点迷津

回复:
user: user-1
content: 就是存放位置不同啊，用数组或链表去存数据，数组的话要定的大点，不然添加的话会越界 实现的话你要分别去定义那几个操作函数执行操作，然后main函数把数组或链表初始化之后就直接一个死循环，while（1）//这边建议也写一个运行函数run，menu都单出来了不差个run，把main简化，调用run，run里跟上面方法一样，靠死循环，先定义一个接收输入的变量，然后进去while，调用Menu，接收输入的变量值，这个你自己约定，建议用整型，如果你要输入DA这种，那就字符串接收，然后比较出是那个然后给int变量一个值，switch（int的变量）case去调用你实现的操作函数 说的比较啰嗦，你看一下吧
user-0 提问: 小白求解

回复:
user: user-1
content: 字符串里面的字符存的都是其 ASCII码，你查一下ASCII码表会发现 ‘0’对应的刚好是0x30， 所以用这些字符减下来刚好如2楼所说

user: user-2
content: 7+2+3+4+4+5本来就是25啊，哪有为什么还是说你想每个s都打印一下？那就把{}补全，不加括号只算下面的一句 判断*p的是不是一到九，是就让s加上*p的大小的值
user-0 提问: 为什么只输出了h，小白提问

回复:
user: user-1
content: printf("%d\b, x); 先输出x的当前值，然后再将其消掉，就像我们打字时 按退格键一样。  建议查一下\b的用法

user: user-0
content: 我用DEVC++和VS2019只输出了h，用在线编译器全输出， 了

user: user-0
content: 为什么会异常退出？

user: user-0
content: 为什么会内存溢出

user: user-2
content: 你的控制台是中文的，\b会往回两个字符，两个\b就是4个字符，实际上你只输出了两个字符，导致内存溢出了

user: user-2
content: 是printf的问题  输出第二个\b的时候 异常退出了 你再前面多输出几个字母就正常了

user: user-3
content: h     j k 我输出的是这个

user: user-0
content: 小白求助。。。。。
user-0 提问: 一个很简单的问题却绊住了

回复:
user: user-0
content: 我换了一种方法，也可以 三个数可以这样比较，4个数，或者8个数呢？有没有更好的办法？用排序法？   还有，我之前写scanf("%d,%d,%d"，&a,&b,&c) 是错的，d后面应该没有逗号的

user: user-0
content: 引用 1 楼 user-4 的回复:建议先学习下基本的C语言赋值的语法吧  max = a>=b? a:b; max = c>=max? c:max; 我太糊涂了  引用 5 楼 柒贰伍玖 的回复: #include "stdio.h" #include "stdlib.h" //#include<windows.h>  int main() { 	int a, b, c, max; 	scanf("%d,%d,%d",&a, &b, &c); 	(a >= b) ? (max = a) : (max = b); 	(max >= c) ? (max = max) : (max = c); 	printf("\r\nmax is:%d\r\n",max); 	system("pause"); }   输入输出： 1,2,3  max is:3 请按任意键继续. . .你说的非常棒，启发很大

user: user-1
content: #include "stdio.h" #include "stdlib.h" //#include<windows.h>  int main() { 	int a, b, c, max; 	scanf("%d,%d,%d",&a, &b, &c); 	(a >= b) ? (max = a) : (max = b); 	(max >= c) ? (max = max) : (max = c); 	printf("\r\nmax is:%d\r\n",max); 	system("pause"); }   输入输出： 1,2,3  max is:3 请按任意键继续. . .

user: user-1
content: scanf("%d,%d,%d",&a, &b, &c); 你的输入格式里面 是用“，”分开的，你的数据输入也需要逗号隔开 例如输入：1,2,3,  三目运算符这样用没有语法错误，但是不是这样用的 应该是 max = (a > b)  ?  a  :  b;

user: user-2
content: 从语法上说，虽然楼主这样写很啰嗦，但也是可以的，没毛病。 等于号赋值，会返回赋值后的值。  引用 1 楼 user-4 的回复:建议先学习下基本的C语言赋值的语法吧  max = a>=b? a:b; max = c>=max? c:max;  引用 2 楼 qq_1457346882 的回复:三目运算符不是这么用的啊，变量=表达式？成立的取值：不成立的取值

user: user-3
content: 三目运算符不是这么用的啊，变量=表达式？成立的取值：不成立的取值

user: user-4
content: 建议先学习下基本的C语言赋值的语法吧  max = a>=b? a:b; max = c>=max? c:max;
user-0 提问: 分子量问题

回复:
user: user-1
content: 勉强能跑  #include<stdio.h> //#include<syslib.h> #include<ctype.h> #include<stdlib.h> #include<string.h> #define min 101 struct yuansu { 	char name; 	float hight; };   int aa(void) { 	struct yuansu *ss; 	ss = (struct yuansu *)malloc(sizeof(struct yuansu)*4); 	if (ss != NULL) 	{ 		printf("\n动态内存申请成功\n"); 	} 	int n = 4;//元素的种类 	for (int i = 0; i < n; i++) //输入元素的种类 	{ 		//flush(); 		printf("\n请输入第%d个元素名称与原子量\n", i + 1); 		scanf_s("%c %f", &ss[i].name,1, &ss[i].hight, 4); 		fflush(stdin); 		printf("输入为%c - %.2f", ss[i].name, ss[i].hight); 	} 	int j =0; 	printf("\n\n请输入要求的物质个数\n"); 	scanf_s("%d", &j); 	for (int ji = 1; ji <= j; ji++) 	{ 		double sum = 0.0; 		char a[min];// , p[10]; 		int i = 0; 		printf("\n请输入第%d个物质的分子式\n", ji); 		scanf_s("%s", a, min); 		double preHight = 0; 		while (a[i] != '\0') 		{ 			if (isdigit(a[i])) 			{ 				printf("输入物质分子式错误\n"); 				break;; 			}  			int r = 0; 			for (; r < n; r++) 			{ 				if (a[i] == ss[r].name) 					break; 			} 			if (r >= n) 			{ 				printf("输入物质分子式错误\n"); 				break;; 			} 			i++;  			if (!isdigit(a[i])) 			{ 				sum += ss[r].hight; 				continue; 			}   			int dv = 0; 			while (isdigit(a[i])) 			{ 				dv = dv * 10 + a[i] - '0'; 				i++; 			} 			sum += ss[r].hight *dv; 			 		} 		printf("%s的分子量为%.3f\n", a, sum); 	} 	free(ss); 	return 0; }

user: user-2
content: 看编译报错  isdight  写错了，应该是isdigit

user: user-1
content: isdigit 你输错了
user-0 提问: 程序在Dev-c++上可以正确运行，但是在Vs2019下却报错了，这个错误是为什么？怎么解决，求大神指教！

回复:
user: user-0
content: 引用 2 楼 寻开心 的回复:scanf_s("%d%c%c%d", &x1, &t, 1, &j, 1, &x2); 我网上百度， 而我这里输入的是字符，也要加上字符限制吗？

user: user-1
content: scanf_s("%d%c%c%d", &x1, &t, 1, &j, 1, &x2);

user: user-1
content: scanf_s("%d%c%c%d", &x1, &t, 1, &j, &x2);  要这样，输入字符或者字符串的时候要指定长度的大小。  你的程序还有别的问题，但是这里的问题就是这样了

user: user-2
content: 查一下scanf_s在输入%c, %s等数据时的参数个数和参数信息。  %c， %s都需要多一个参数，_s就是相比scanf更安全，如何保证安全，那就是增加数据长度

user: user-3
content: 解决方法楼上已经说了，我这里提一下你百度到的那段话，其实它说得不太清楚，微软的 scanf_s 在指定 %s、%c 等格式说明符时要求额外传入一个 unsigned int 来确定缓冲长度，概括一下就是: 在输入一串字符时需要指定缓冲长度。注意缓冲长度不是字符个数，例如你定义了 char str[5]，那么就要写成 scanf_s("%4s", str, 5) 或者 scanf_s("%5c", str, 5) 等。

user: user-1
content: 你试过不就知道了嘛。  加上就好用， 不加就报错。 你说有效还是无效啊
user-0 提问: c语言编程（结构体）

回复:
user: user-1
content: 1.先声明一个结构体 struct 结构体名称{ 变量1类型  变量1； 变量2类型  变量2； …… 变量n类型  变量n； }；  2.在你需要用的地方定义一个结构体变量 struct 结构体名称  结构体变量  3.剩下的就跟正常使用变量一样使用它就行

user: user-0
content: 引用 3 楼 與蘤舊縐 的回复：就是设计一个结构体，里面有三个字段，性别、年龄、姓名，或者再加个id，给出获取结构体年龄和姓名字段的函数，也就是传入结构体指针，返回字段值，其他功能自己加，包括怎么存储结构体等等抱歉，我没太懂

user: user-2
content: 就是设计一个结构体，里面有三个字段，性别、年龄、姓名，或者再加个id，给出获取结构体年龄和姓名字段的函数，也就是传入结构体指针，返回字段值，其他功能自己加，包括怎么存储结构体等等

user: user-0
content: 引用 1 楼 等风、来 的回复：朋友，你学到结构体这个章节了没有学了，就是这个题我有点不太明白

user: user-3
content: 朋友，你学到结构体这个章节了没有
user-0 提问: 无输出问题

回复:
user: user-0
content: 分不能浪费啊，给个回复我好结贴

user: user-0
content: 噢 学了几天python，把.c的地址符忘了，丢人了。

user: user-0

user: user-1
content: 后面的代码也是 scanf("%d",b)  改成 scanf("%d",&b)

user: user-1
content: while((scanf("%d",b) != EOF),b != 0)   输入要把变量地址传进去，你的程序执行完这句就异常退出了，没有执行后面的代码  改成  while((scanf("%d",&b) != EOF),b != 0)
user-0 提问: glib Socket Client通信异常问题

回复:
user: user-0
content: 抱歉，问题定位了。 原因是我们的系统有一个守护进程，我每次启动后关闭再开就导致系统启动了两个一模一样的进程，干着同样的事。这就导致服务器发送了一组数据后，其中一个收到了中断和数据，另一个就只有中断而没有数据了...
user-0 提问: double溢出，换成long double输出为0

回复:
user: user-0
content: 引用 4 楼 寻开心 的回复:改成1.0/i/i 应该可以。  i*i是两个int乘法。   1.0/i/i是两个double类型的运算，这样不用去改i的类型 谢谢了大哥。

user: user-0
content: 引用 4 楼 寻开心 的回复:改成1.0/i/i 应该可以。  i*i是两个int乘法。   1.0/i/i是两个double类型的运算，这样不用去改i的类型 我得好好想一会。

user: user-1
content: 改成1.0/i/i 应该可以。  i*i是两个int乘法。   1.0/i/i是两个double类型的运算，这样不用去改i的类型

user: user-1
content: 你这个是i*i溢出， 把i的类型改了才有效，改sum没有用

user: user-0
content: 引用 1 楼 寻开心 的回复:#include<stdio.h> int main(void) {     int m,n;     while(scanf("%d%d",&n,&m) != EOF,n != 0&&m != 0)     {         int i;         long double sum = 0;         for(i = n;i <= m;i++)         {             sum += 1.0 / (i * i);         }  printf("%.6Lf\n",sum); // long double的时候这里是 %.6Lf, double是%.6lf， float是%.6f     }     return 0; }  所说的double溢出是怎么回事儿， 倒数和，达不到溢出的标准啊  你现在输出0是因为参数是long double，而%。6lf指定的是double类型不匹配造成的 但是他给的例子太大了  65536 655360

user: user-1
content: #include<stdio.h> int main(void) {     int m,n;     while(scanf("%d%d",&n,&m) != EOF,n != 0&&m != 0)     {         int i;         long double sum = 0;         for(i = n;i <= m;i++)         {             sum += 1.0 / (i * i);         }  printf("%.6Lf\n",sum); // long double的时候这里是 %.6Lf, double是%.6lf， float是%.6f     }     return 0; }  所说的double溢出是怎么回事儿， 倒数和，达不到溢出的标准啊  你现在输出0是因为参数是long double，而%。6lf指定的是double类型不匹配造成的
user-0 提问: windows下的这个参数怎么输入

回复:
user: user-1
content: 把数据文件（比如 data.txt）和你编译出来的执行文件（比如：test.exe文件）放到同一个目录下 方法1: 为你的exe文件创建一个快捷方式，编辑快捷方式， 在参数输入  data.txt 然后双击你的快捷方式，运行 方法2 运行cmd命令， 进入到这个文件夹后，人工输入。test data.txt 方法3 在你的编辑器里面，更改工程设置， 找到执行命令的部分，把参数设置为“ data.txt”

user: user-2
content: 运行时跟在后面就是参数 比如 a.exe "bbb.txt"
user-0 提问: 改不出错误。。

回复:
user: user-1
content: 代码里除了汉字剩下的都用英文，养成习惯，你输入学号之类的提示哪里为什么会想输出num？上面那个是函数嘛？没有返回值类型，参数也没有参数类型

user: user-2
content: 在哪里就按照哪里的规矩啊 在论坛就是贴代码，贴图。

user: user-3
content: 引用 3 楼 wsxedaa 的回复:用了分号错更多。。。 那说明本身就有很多错误，只是编译器发现这处错误就没有继续编译。所以，贴出源码吧，所有的

user: user-0
content: 引用 7 楼 寻开心的回复:18行， 缺少分号那行后面 要写成 void insertYouXi(Linklist L, Lintlist p)   你这个bug太多， 还是贴完整的源代码提问吧 能不能QQ聊一下，这个不方便

user: user-2
content: 18行， 缺少分号那行后面 要写成 void insertYouXi(Linklist L, Lintlist p)   你这个bug太多， 还是贴完整的源代码提问吧

user: user-2
content: 错误都是从头开始改的，改了前面的影响后面的， 这个必须一步一步的来。  注意看你的编译器错误提示， 大多数情况都能清晰的定位语法错误在哪里

user: user-0
content: 引用 2 楼 自信男孩的回复:直接贴代码吧，不建议贴图片~   缺少一个分号;  creatIncreLink函数声明后面缺少一个分号;  即创建链表的函数声明 大神能不能QQ说一下，这个不方便弄

user: user-0
content: 中文那个改过了。。。还是不对。。

user: user-0
content: 用了分号错更多。。。

user: user-3
content: 直接贴代码吧，不建议贴图片~   缺少一个分号;  creatIncreLink函数声明后面缺少一个分号;  即创建链表的函数声明

user: user-2
content: 你那个 %d 的%是中文的全角符号， 要改成英文符号才可以 第17行，尾巴明显少了一个分号
user-0 提问: 用C语言编写一个音乐播放器程序

回复:
user: user-1
content: mciSendString("open D:\\CloudMusic\\motherland. alias 1.mp3 ",NULL,0,NULL); 去掉文件名里面的点 试试，改成 mciSendString("open D:\\CloudMusic\\alias 1.mp3 ",NULL,0,NULL);

user: user-2
content: 如果你不使用微软的 Visual Studio 开发，请在对应的编译器选项里添加链接库 winmm(如果不支持，就在命令行选项里加上 -lwinmm)，否则会造成链接失败(即你的情况)。
user-0 提问: 求助！

回复:
user: user-0
content: 程序输出结果的层次，要求按照从n、n-1、n-2、……、1的顺序，将移除掉n号环的全部过程作为一个段落输出，然后将移除n-1号环的全部过程也作为一个段落输出，其余依此类推。  不仅需要最少次数 还需要移出n到1过程。这个不会啊，只想到移除n需要移出1到n-2.，这个怎么用非递归做出来

user: user-1
content: 那就多读几遍，多看看， 思路都已经告诉你了啊， 伪代码也有了  拒绝提供原码，只提供思路，   不自己动脑子，哪里会有进步  你可以自己写的， 不对了再上来贴代码提问

user: user-0
content: 程序还需要锁链过程描述

user: user-0
content: 能不能再具体点，还是有点蒙

user: user-1
content: int ary[N] = {1, 2}; for ( I=3; I<N; I++)     ary[I] = ary[I-1] * 2*ary[n-2] + 1;  这不就不是递归了，

user: user-0
content: 这个是递归的吧？我需要的是非递归

user: user-1
content: 不就是九连环嘛?! 还编出一个外国故事  先弄出递归公式来 假定把前n个全部弄下来需要的操作次数是f（n） 那么把前n个从空白全套上去的次数也是f（n）次  要把第n个拿下的步骤 step1:  把先前n-2个都拿下（ 也就是用了f(n-2)次操作 ） step2: 拿下第n个，  此时第n-1个还在上面 step3: 把前n-2个再套上 step4: 把前n-1个都拿下  所以 ：  f(n)  = f(n-2） + 1 + f(n-2) + f(n-1)  =. f(n-1) + 2*f(n-2) + 1  f(1) = 1, f(2) = 2 从这里开始就可以用递推的方式把所有的步骤都算出来了 int ary[N] = {1, 2}; for ( I=3; I<N; I++)     f(I) = f(I-1) * 2*f(n-2) + 1; 剩下的代码自己写吧
user-0 提问: 一个萌新有关c语言文件的问题

回复:
user: user-0
content: 谢谢你，忘记了fp的地址变化了

user: user-1
content: 写入文件之后，fp指针的位置就变化了了，所以你读取时是读取的上次写的内容之后的位置。另外，写文件是写到缓存里，当缓存满时才会真正的写入文件。建议调用一下刷新操作，即把缓存里的刷到文件里去。试一下：fflush(fp);然后再把文件指针重新指向文件头，即rewind(fp);最后再读取试试

user: user-2
content: 肯定的啊，你输入文件以后关闭了才会保存下来，这时候再打开读取内容才能读得到。而你没有关闭文件的话，你这个文件打开的还是空内容的状态，你没办法获取到内容的，所以没有输出。就像你打开txt文本，要保存或关闭再打开才有内容，如果写完了不保存直接换另一个打开，就是一个空的

user: user-3
content: 写完文件以后关闭啊
user-0 提问: (codeblocks编程)使用debug运行fopen函数失败

回复:
user: user-1
content: 编译器里面是可以设置执行路径和执行时候的调用参数的，不同的编译器方法不一样

user: user-0
content: 引用 10 楼 apkipa1的回复:如果使用相对路径要注意程序当前所设置的工作目录是否是你想要的，这可以通过 SetCurrentDirectory 和 GetCurrentDirectory 实现。IDE、快捷方式或者其它程序可以在启动你的程序时修改程序默认的工作目录，而不使用直接双击打开时的程序所在的目录，所以会导致你所述的现象产生。 好的，谢谢111111

user: user-2
content: 如果使用相对路径要注意程序当前所设置的工作目录是否是你想要的，这可以通过 SetCurrentDirectory 和 GetCurrentDirectory 实现。IDE、快捷方式或者其它程序可以在启动你的程序时修改程序默认的工作目录，而不使用直接双击打开时的程序所在的目录，所以会导致你所述的现象产生。

user: user-0
content: 引用 7 楼 寻开心的回复:在设计你的程序的时候，就要考虑到执行文件和你的数据文件之间的位置关系，这样才可以写出正确的相对路径 或者你也可以让用户自己来输入文件的路径地址，绝对的也好相对的也罢都可以 是这样的。后来我把要打开的文件放到可执行文件同一目录问题就解决了。但是最后发现编译器打开的文件路径和可执行文件打开的文件路径不一样。

user: user-1
content: 在设计你的程序的时候，就要考虑到执行文件和你的数据文件之间的位置关系，这样才可以写出正确的相对路径 或者你也可以让用户自己来输入文件的路径地址，绝对的也好相对的也罢都可以

user: user-3
content: 贴代码吧，如果代码没问题是不是编译器配置问题

user: user-0
content: 引用 2 楼 寻开心的回复:看你的fopen文件路径是否正确吧。  如果不是写死的绝对路径，就要看debug下默认的路径和你生成文件夹所在路径与要打开文件的路径关系是否正确。 怀疑是上面的原因可能性较大  此外，你可以输出fopen的错误代码，看看具体原因 问题解决了，但是相对路径得输入到盘符，这样通过.exe才可以执行。不过这样的话可移植性不就变差了吗？有没有解决方法啊？

user: user-0
content: 引用 2 楼 寻开心的回复:看你的fopen文件路径是否正确吧。  如果不是写死的绝对路径，就要看debug下默认的路径和你生成文件夹所在路径与要打开文件的路径关系是否正确。 怀疑是上面的原因可能性较大  此外，你可以输出fopen的错误代码，看看具体原因 我用的是相对路径，，，

user: user-0
content: 引用 1 楼 柒贰伍玖的回复:是不是跟文件目录有关系 在编译器中能够正常运行，但是通过.exe在遇到fopen后无法正常打开文件，这样的话是文件路径的关系吗？

user: user-1
content: 看你的fopen文件路径是否正确吧。  如果不是写死的绝对路径，就要看debug下默认的路径和你生成文件夹所在路径与要打开文件的路径关系是否正确。 怀疑是上面的原因可能性较大  此外，你可以输出fopen的错误代码，看看具体原因

user: user-4
content: 是不是跟文件目录有关系
user-0 提问: 如何输出%d/n 

回复:
user: user-0
content: 20分平白多出了这么多啊

user: user-0
content: 怎么又来一个

user: user-1
content: printf("\%d\n")   \是转义字符

user: user-2
content: 引用 2 楼 weixin_45949073 的回复：引用 1 楼 遇见女神 的回复:printf(“%d”,n);//输出n不不，是在一个printf里输出%d然后再换行printf(“%%d\n”);

user: user-3
content: 用转义符号"\%"解决%的输出就好了

user: user-3
content: printf("\%d/n")

user: user-4
content: 引用 2 楼 weixin_45949073 的回复:引用 1 楼 遇见女神 的回复:printf(“%d”,n);//输出n不不，是在一个printf里输出%d然后再换行 直接printf("%d\n",你要输出的变量名)；就好了，%d是输出十进制数据\n是换行

user: user-0
content: 引用 1 楼 遇见女神 的回复:printf(“%d”,n);//输出n不不，是在一个printf里输出%d然后再换行

user: user-2
content: printf(“%d”,n);//输出n
user-0 提问: PTA段错误，7-58 求整数序列中出现次数最多的数 (15分)

回复:
user: user-1
content: 你的num有多大，太大了放到局部变量是不行的，会把程序撑爆 你看看num的范围，很大的就要做成全局变量来使用

user: user-2
content: 变量idx没有初始化
user-0 提问: C++语言写的贪吃蛇小游戏，绝对原创！

回复:
user: user-1
content: 太厉害了！！！！！！！！！！！！！！！！！！！！！！！

user: user-2
content: 我先猜一个：不是用引擎写的

user: user-3
content: 学习一下

user: user-0
content: 引用 13 楼 千梦一生 的回复:我先猜一个：不是用引擎写的 我就是用引擎写的，哈哈哈。。。

user: user-4
content: 其实有这种破坏性质的，都可以称之为病毒，广义的病毒。 我记得在很久以前，有一个超级简单的病毒，它就是在启动的批处理文件中，加了一行：DelTree  *.* /Y 那时候还是DOS时代，这条命令意味着什么就不用说了。  引用 6 楼 liups 的回复:[quote=引用 4 楼 gufeng1314520 的回复:] [quote=引用 3 楼 Logy_S 的回复:]   你以为我会从CSDN的百度云链接下载？？？   很久以前，下了个小游戏  然后来一句   shutdown -s -t 1    现在我还隐约记得，  当时 我在给硬盘分区。  系统也崩了，文件也丢了。。。我搞了半宿。自己写的小游戏，没有任何病毒，你太抬举我了，我还没有厉害到能写病毒的地步，我对病毒什么也不懂[/quote] 这个可不是病毒！[/quote]

user: user-4
content: 咋一看，像是控制台下的文本游戏，但细看一下，又不太像了。难道是用D3D或者OPENGL之类的写的？

user: user-4
content: 不要以为人为传染就不算传染，要知道，黑客其实也会使用非计算机手段来破解。

user: user-4
content: 定义： 计算机病毒（Computer Virus）是编制者在计算机程序中插入的破坏计算机功能或者数据的代码，能影响计算机使用，能自我复制的一组计算机指令或者程序代码。  引用 9 楼 liups 的回复:[quote=引用 8 楼 super_admi 的回复:] 其实有这种破坏性质的，都可以称之为病毒，广义的病毒。 我记得在很久以前，有一个超级简单的病毒，它就是在启动的批处理文件中，加了一行：DelTree  *.* /Y 那时候还是DOS时代，这条命令意味着什么就不用说了。  [quote=引用 6 楼 liups 的回复:] [quote=引用 4 楼 gufeng1314520 的回复:] [quote=引用 3 楼 Logy_S 的回复:]   你以为我会从CSDN的百度云链接下载？？？   很久以前，下了个小游戏  然后来一句   shutdown -s -t 1    现在我还隐约记得，  当时 我在给硬盘分区。  系统也崩了，文件也丢了。。。我搞了半宿。自己写的小游戏，没有任何病毒，你太抬举我了，我还没有厉害到能写病毒的地步，我对病毒什么也不懂[/quote] 这个可不是病毒！[/quote][/quote] 你怕是对病毒有什么误解！有破坏作用的都是病毒？那为什么会有蠕虫、木马这些称呼？[/quote]

user: user-0
content: 引用 7 楼 super_admi 的回复:咋一看，像是控制台下的文本游戏，但细看一下，又不太像了。难道是用D3D或者OPENGL之类的写的？用了easy_x图形库

user: user-5
content: 引用 8 楼 super_admi 的回复:其实有这种破坏性质的，都可以称之为病毒，广义的病毒。 我记得在很久以前，有一个超级简单的病毒，它就是在启动的批处理文件中，加了一行：DelTree  *.* /Y 那时候还是DOS时代，这条命令意味着什么就不用说了。  [quote=引用 6 楼 liups 的回复:] [quote=引用 4 楼 gufeng1314520 的回复:] [quote=引用 3 楼 Logy_S 的回复:]   你以为我会从CSDN的百度云链接下载？？？   很久以前，下了个小游戏  然后来一句   shutdown -s -t 1    现在我还隐约记得，  当时 我在给硬盘分区。  系统也崩了，文件也丢了。。。我搞了半宿。自己写的小游戏，没有任何病毒，你太抬举我了，我还没有厉害到能写病毒的地步，我对病毒什么也不懂[/quote] 这个可不是病毒！[/quote][/quote] 你怕是对病毒有什么误解！有破坏作用的都是病毒？那为什么会有蠕虫、木马这些称呼？

user: user-0
content: 引用 3 楼 Logy_S 的回复:  你以为我会从CSDN的百度云链接下载？？？   很久以前，下了个小游戏  然后来一句   shutdown -s -t 1    现在我还隐约记得，  当时 我在给硬盘分区。  系统也崩了，文件也丢了。。。我搞了半宿。自己写的小游戏，没有任何病毒，你太抬举我了，我还没有厉害到能写病毒的地步，我对病毒什么也不懂

user: user-5
content: 引用 4 楼 gufeng1314520 的回复:[quote=引用 3 楼 Logy_S 的回复:]   你以为我会从CSDN的百度云链接下载？？？   很久以前，下了个小游戏  然后来一句   shutdown -s -t 1    现在我还隐约记得，  当时 我在给硬盘分区。  系统也崩了，文件也丢了。。。我搞了半宿。自己写的小游戏，没有任何病毒，你太抬举我了，我还没有厉害到能写病毒的地步，我对病毒什么也不懂[/quote] 这个可不是病毒！

user: user-0
content: 下载链接：https://download.csdn.net/download/gufeng1314520/12087735

user: user-6
content: 你以为我会从CSDN的百度云链接下载？？？   很久以前，下了个小游戏  然后来一句   shutdown -s -t 1    现在我还隐约记得，  当时 我在给硬盘分区。  系统也崩了，文件也丢了。。。我搞了半宿。

user: user-0
content: 引用 1 楼 user-7 的回复:厉害，给你点个赞谢谢，多提点意见哦

user: user-7
content: 厉害，给你点个赞
user-0 提问: 第一个filename和第二个filename为什么不一样呢

回复:
user: user-0
content: 引用 2 楼 自信男孩的回复:你没发现你的filename输入的越界了吗？你看看你输入的filename长度是多少个字符，而是filename数组的长度是多少？ 原来如此，谢谢你了

user: user-1
content: 你没发现你的filename输入的越界了吗？你看看你输入的filename长度是多少个字符，而是filename数组的长度是多少？

user: user-0
content: 感谢各位哥哥姐姐帮我解决这个问题🙏🙏
user-0 提问: C语言

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

user: user-0
content: 引用 4 楼 qq_1457346882的回复:[quote=引用 2 楼 寻开心 的回复:] 这是基础的练习题， 自己写代码，有问题再贴代码求助 题目已经很清楚告诉你如何实现了啊 scanf获得第一个行的n 循环n次，用gets获得每行的字符串，保存一个 char  buffer【100】数组里面 用strlen计算buffer里面字符串的长度，然后累加  这种基础的题目不自己动手练习，  还学个p开发啊 心累啊[/quote] 谢谢大佬，我是个菜鸟

user: user-0
content: 谢谢大佬，我是个菜鸟

user: user-2
content: 引用 2 楼 寻开心 的回复:这是基础的练习题， 自己写代码，有问题再贴代码求助 题目已经很清楚告诉你如何实现了啊 scanf获得第一个行的n 循环n次，用gets获得每行的字符串，保存一个 char  buffer【100】数组里面 用strlen计算buffer里面字符串的长度，然后累加  这种基础的题目不自己动手练习，  还学个p开发啊 心累啊

user: user-2
content: #include<stdio.h> #include<string.h> int main(){     int n,i=0;     char str[81];     scanf("%d",&n);     getchar();     while(i<n){         gets(str);         int x=strlen(str);         printf("%d\n",x);         memset(str,0,81);         i++;     }     return 0; } 思路给你了先去自己写一下啊，直接拿了你下次还是不会，一共也就这几行代码

user: user-3
content: 这是基础的练习题， 自己写代码，有问题再贴代码求助 题目已经很清楚告诉你如何实现了啊 scanf获得第一个行的n 循环n次，用gets获得每行的字符串，保存一个 char  buffer【100】数组里面 用strlen计算buffer里面字符串的长度，然后累加  这种基础的题目不自己动手练习，  还学个p开发啊

user: user-2
content: n还是分开的？那不是更简单
user-0 提问: C语言的数据类型问题

回复:
user: user-1
content: 格式化输出字符

user: user-2
content: %c 是输出字符， %d 是输出这个字符ASCII码的十进制值

user: user-3
content: %c输出字符数据，%d输出十进制的值

user: user-4
content: 输出ascii字符和对应的ascii值。
user-0 提问: 这里不用到强转换会报错，视频里没有用到却编译过了，求指点

回复:
user: user-1
content: 把文件后缀名 从.cpp 改为 .c

user: user-2
content: 现代编译器都会要求 做强制类型转换的 ， 毕竟 int* 和 unsigned char * 类型是大不一样的， 应该是错误，而不是警告级别的

user: user-3
content: 试了下没报错，好像有个警告闪过去了，可能编译器问题
user-0 提问: 无输出

回复:
user: user-1
content: 还有， 知道了答案的帖子，都去结贴付分儿去 ，要不后面面没人愿意回答你的问题

user: user-1
content: double angle[] = {atan(1),atan(1/2),atan(1/4),atan(1/8),atan(1/16),                       atan(1/32),atan(1/64),atan(1/128),atan(1/256),atan(1/512),                       atan(1/1024),atan(1/2048),atan(1/4096),atan(1/9192)};      double tan1[]={1,1/2,1/4,1/8,1/16,1/32,1/64,1/128,1/256,                1/512,1/1024,1/2048,1/4096,1/9192};  你不考虑整数除法吗？  这些参数绝大多数都被你初始化为0了  1/2 ， 1/4 ， 。。。。。这些都是0
user-0 提问: c语言求一个大佬帮我出一份答案

回复:
user: user-1
content: 引用 9 楼 qq_46133362 的回复:[quote=引用 7 楼 自信男孩 的回复：]第一题，完全可以输入到机器上编译一下就好了。这个问题，标准答案自己就可以通过尝试找到。语法错误还要问的话，那基础知识需要加强了。  1. fopen第一个参数应该是字符串； 2。 B，97可以查一下是'a' 3. A 4. D 5. D 6. B最后一题，我认为选a啊[/quote] 选A没关系，试一下，试了再确定。这个问题好判断～

user: user-2
content: 10道题6道在能力范围之外吗。那更应该自己写代码自己做了

user: user-0
content: 引用 7 楼 自信男孩 的回复：第一题，完全可以输入到机器上编译一下就好了。这个问题，标准答案自己就可以通过尝试找到。语法错误还要问的话，那基础知识需要加强了。  1. fopen第一个参数应该是字符串； 2。 B，97可以查一下是'a' 3. A 4. D 5. D 6. B最后一题，我认为选a啊

user: user-1
content: 给出的答案有出入，建议楼主自己验证一下那个答案是正确的。

user: user-1
content: 第一题，完全可以输入到机器上编译一下就好了。这个问题，标准答案自己就可以通过尝试找到。语法错误还要问的话，那基础知识需要加强了。  1. fopen第一个参数应该是字符串； 2。 B，97可以查一下是'a' 3. A 4. D 5. D 6. B

user: user-0
content: 引用 3 楼 m0_46102964 的回复：第一题fopen打开文件应该用双引号 第二题A,第二个形参时char型，调用时用单引号，C函数无返回值，所以不能用n=;D97虽然是单引号，但这里是字符串了 第三题A 第四题看不清 第五题2.0 第六题A谢谢

user: user-0
content: 引用 4 楼 _肆 的回复：把题目写成小demo，用程序去校验，不要为了应试教育去学编程这些发的是我能力之外的

user: user-3
content: 把题目写成小demo，用程序去校验，不要为了应试教育去学编程

user: user-4
content: 第一题fopen打开文件应该用双引号 第二题A,第二个形参时char型，调用时用单引号，C函数无返回值，所以不能用n=;D97虽然是单引号，但这里是字符串了 第三题A 第四题看不清 第五题2.0 第六题A

user: user-0
content: 引用 1 楼 一条不会飞的鱼 的回复：自己动手，丰衣足食我做了但是没有标准答案

user: user-5
content: 自己动手，丰衣足食
user-0 提问: 求助C语言大神

回复:
user: user-1
content: 你这不是问问题啊，你这是想要答案

user: user-2
content: 可以写，但是不能白给，会害了你的，自己去写，碰到问题实在不会再来问

user: user-3
content: 首先，不会免费给你写，付费也要看时间～  希望打击能让你用心去学习，而不是继续这样的大学生活～

user: user-3
content: 要求是给你写程序吗？题目超纲了，还是自己写不出来，说明白一些吧
user-0 提问: c语言函数求解

回复:
user: user-1
content: 引用 2 楼 weixin_46002165 的回复:[quote=引用 1 楼 不闻窗外事的回复:]因为形参a是指针，所以可以改变指针指向的内容 数组和指针等价吗?a[]可以等价于※a吗[/quote]可以的，int a[]等价于int *a

user: user-2
content: fun(int a[]) = fun(int *p) 相当余把数组传过去了，你在函数里面做操作都是对数组进行操作的，所以它的值会跟着变

user: user-0
content: 引用 7 楼 寻开心的回复:  说了半天说的是： 指针没有变，指针指向的内容变了， 传参传的是指针 懂了，指针指向的内容变了。了解了，谢谢大神

user: user-3
content: 说了半天说的是： 指针没有变，指针指向的内容变了， 传参传的是指针

user: user-0
content: 引用 3 楼 寻开心的回复:a本身没有变， a是指针，a没有变是指a这个指针的数值（数组的地址）没有变 传参传入的是这个指针的值 变的是a指向的内容 大致明白了，值没有变，指针变了

user: user-0
content: 引用 3 楼 寻开心的回复:a本身没有变， a是指针，a没有变是指a这个指针的数值（数组的地址）没有变 传参传入的是这个指针的值 变的是a指向的内容 明白了，谢谢大神

user: user-4
content: 当然可以，你不会以为写一个a[]，就是把整个数组作为参数吧，当然只是数组的指针了

user: user-3
content: a本身没有变， a是指针，a没有变是指a这个指针的数值（数组的地址）没有变 传参传入的是这个指针的值 变的是a指向的内容

user: user-0
content: 引用 1 楼 不闻窗外事的回复:因为形参a是指针，所以可以改变指针指向的内容 数组和指针等价吗?a[]可以等价于※a吗

user: user-4
content: 因为形参a是指针，所以可以改变指针指向的内容
user-0 提问: c语言大佬帮我康康

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

user: user-0
content: 引用 4 楼 柒贰伍玖 的回复：BCD CD D  s     ‘A’ s+1 ‘B’ s+2 ‘C’ s+3 ‘D’ s+4 ‘\0’  p  = s + 1，即p指向‘B’所以会循环3次   分别输出上面3个字符串谢谢

user: user-2
content: BCD CD D  s     ‘A’ s+1 ‘B’ s+2 ‘C’ s+3 ‘D’ s+4 ‘\0’  p  = s + 1，即p指向‘B’所以会循环3次   分别输出上面3个字符串

user: user-3
content: 可以先确定一下循环次数，A是循环4次，很明显不对。 另外，s+1指向的是'B'的地址。%s是从p地址开始向后输出字符串，所以直到遇到'\0'停止输出。

user: user-0
content: 引用 1 楼 user-4 的回复：bcd cd d 数组名是首地址，p=s+1，是取s地址的后一位，地址内的值是B，首地址是A，但是这里后移了，后面同理，循环依次后移一位 取移位后的地址开始到结束的值谢谢！

user: user-4
content: bcd cd d 数组名是首地址，p=s+1，是取s地址的后一位，地址内的值是B，首地址是A，但是这里后移了，后面同理，循环依次后移一位 取移位后的地址开始到结束的值
user-0 提问: C语言 关于switch case 语句执行顺序以及结果的问题

回复:
user: user-0
content: 引用 8 楼 柒贰伍玖 的回复:[quote=引用 4 楼 懒笑翻 的回复:] [quote=引用 1 楼 柒贰伍玖 的回复:]  case 后面要加 break 跳出 case，要不然它会从进入的 case 开始 往后执行，直到碰到break，才结束switch 语句 你的程序 在printf 完之后，加上 break，像你的case 4 一样，每一case都一样，这样就会只执行某一个case就是测试不加break执行看会不会往回执行，但是我纠结的是2+=2之后，k=4,此时为什么不执行case 4[/quote]  进switch 的时候才做判断，后面不再判断了，进到case之后就顺序往后执行，碰到break或者到switch末尾处就结束。这个是switch语句，不会循环执行。[/quote]原来只判断一次case  ，我懂了，谢谢！！！

user: user-0
content: 引用 9 楼 qq_1457346882 的回复:switch只会往后执行，不会跳回去的，除非结束switch外面有循环再进来，加了break会执行完跳出，如果没加break，会u先判断执行对应的case值的语句，然后就不会判断case值，而是直接往下依次执行，直到遇见break跳出或者执行完结束嗯嗯，谢谢大佬的指导，完全理解了

user: user-0
content: 引用 10 楼 自信男孩 的回复:引用 5 楼 懒笑翻 的回复:[quote=引用 3 楼 自信男孩 的回复:] k是3，所以switch跳到case 3执行，因为case 3没有break，因此顺序执行case 4，直到break或执行完。但是为啥程序执行时，没有输出case 4 呢？ 执行了呢，因为case 3后面没有break,所以执行case 4了。不然怎么会有两个输出呢[/quote]明白了，谢谢大佬！！！就是说会直接往下执行，不会判断case的值了，直到break退出

user: user-1
content: 引用 5 楼 懒笑翻 的回复:引用 3 楼 自信男孩 的回复:k是3，所以switch跳到case 3执行，因为case 3没有break，因此顺序执行case 4，直到break或执行完。但是为啥程序执行时，没有输出case 4 呢？ 执行了呢，因为case 3后面没有break,所以执行case 4了。不然怎么会有两个输出呢

user: user-2
content: switch只会往后执行，不会跳回去的，除非结束switch外面有循环再进来，加了break会执行完跳出，如果没加break，会u先判断执行对应的case值的语句，然后就不会判断case值，而是直接往下依次执行，直到遇见break跳出或者执行完结束

user: user-3
content: 引用 4 楼 懒笑翻 的回复:[quote=引用 1 楼 柒贰伍玖 的回复:]  case 后面要加 break 跳出 case，要不然它会从进入的 case 开始 往后执行，直到碰到break，才结束switch 语句 你的程序 在printf 完之后，加上 break，像你的case 4 一样，每一case都一样，这样就会只执行某一个case就是测试不加break执行看会不会往回执行，但是我纠结的是2+=2之后，k=4,此时为什么不执行case 4[/quote]  进switch 的时候才做判断，后面不再判断了，进到case之后就顺序往后执行，碰到break或者到switch末尾处就结束。这个是switch语句，不会循环执行。

user: user-4
content: 输出的不就是case 3和4吗

user: user-4
content: 引用 5 楼 懒笑翻 的回复:引用 3 楼 自信男孩 的回复:k是3，所以switch跳到case 3执行，因为case 3没有break，因此顺序执行case 4，直到break或执行完。但是为啥程序执行时，没有输出case 4 呢？  判断只在一开始做了一次，后面就等着退出了，就像你写个if语句，你在语句块里把条件改没了他还能立即退出不成

user: user-0
content: 引用 3 楼 自信男孩 的回复:k是3，所以switch跳到case 3执行，因为case 3没有break，因此顺序执行case 4，直到break或执行完。但是为啥程序执行时，没有输出case 4 呢？

user: user-0
content: 引用 1 楼 柒贰伍玖 的回复:case 后面要加 break 跳出 case，要不然它会从进入的 case 开始 往后执行，直到碰到break，才结束switch 语句 你的程序 在printf 完之后，加上 break，像你的case 4 一样，每一case都一样，这样就会只执行某一个case就是测试不加break执行看会不会往回执行，但是我纠结的是2+=2之后，k=4,此时为什么不执行case 4

user: user-1
content: k是3，所以switch跳到case 3执行，因为case 3没有break，因此顺序执行case 4，直到break或执行完。

user: user-5
content: 只执行了两个printf，怎么会有三个值呢，应该是  3 2吧

user: user-3
content: case 后面要加 break 跳出 case，要不然它会从进入的 case 开始 往后执行，直到碰到break，才结束switch 语句 你的程序 在printf 完之后，加上 break，像你的case 4 一样，每一case都一样，这样就会只执行某一个case
user-0 提问: 学生党员管理系统

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

user: user-2
content: 做这个需要收费的，不要以为别人都能这么帮你～

user: user-3
content: 党员这么有责任的人，会用不是你自己写的代码的系统吗[face]qq:13.gif[/] 自己写，贴代码来提问吧