Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 【咨询贴】C语言 输出10个数中最大数

回复:
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: 引用 8 楼 qzjhjxj的回复:供参考：#include <stdio.h> int main(void) {       int a[5];       printf("请输入5个数字:\n");       for(int i=0;i<5;i++)//for(int i=1;i<=5;i++)        {           scanf("%d",&a[i]);        }       int i,temp=a[0];       for(i=1;i<5;i++) //for(i=2;i<=6;i++)        {            if(temp < a[i])            {                        //printf("%d > %d \n",a[i-1],a[i]);                   temp=a[i];//找到大数，并记录到temp里                         // a[i]=temp;             }        }       printf("max= %d  ",temp);//printf("max= %d  ",a[i]);              return 0; } 谢谢啦！问题已解决。就是i可能会小于0

user: user-2
content: 供参考：#include <stdio.h> int main(void) {       int a[5];       printf("请输入5个数字:\n");       for(int i=0;i<5;i++)//for(int i=1;i<=5;i++)        {           scanf("%d",&a[i]);        }       int i,temp=a[0];       for(i=1;i<5;i++) //for(i=2;i<=6;i++)        {            if(temp < a[i])            {                        //printf("%d > %d \n",a[i-1],a[i]);                   temp=a[i];//找到大数，并记录到temp里                         // a[i]=temp;             }        }       printf("max= %d  ",temp);//printf("max= %d  ",a[i]);              return 0; }

user: user-0
content: 好的，谢谢！这常识我会好好记住的。 不过改动了一下，又遇到一个问题，就是当输入的数值里既有正数又有负数时，结果输出max＝0 可以再解答一下吗？

user: user-0
content: 引用 3 楼 qzjhjxj的回复:改为i <6,就正确了。 原来是这样啊！ 不过改动了一下，又遇到一个问题，就是当输入的数值里既有正数又有负数时，结果输出max＝0 可以再解答一下吗？

user: user-0
content: 原来是这样啊！ 不过改动了一下，又遇到一个问题，就是当输入的数值里既有正数又有负数时，结果输出max＝0 可以再解答一下吗？

user: user-3
content: 作为常识，C语言数组下标从0开始 定义为int a[5]的数组，其合法元素是 a[0]  a[1]  a[2]  a[3]  a[4]

user: user-2
content: 改为i <6,就正确了。

user: user-2
content: for (i =2;i <=6;i++)这里，i =6 的时候，数组a[6]下标越界了，a[6]的值是随机的，刚好凑上6了。

user: user-0
content: 谁来帮帮我
user-0 提问: 想请问这个哪里有错误，求教！！！

回复:
user: user-0
content: 谢谢啦

user: user-1
content: ”开学第一天“——就挂了

user: user-2
content: 审核延迟浪费我一根面条。

user: user-2
content: 括号位置不当 while((c=getchar))!='@')

user: user-3
content: while ((c=getchar ())!=‘@‘);括号括正确。
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: #include <stdio.h> #include <string.h> int main() {     char *s[2][3]={         {"000","01111","02"        },         {"10" ,"111"  ,"1222222222"},     };     int r,c,L[3],w;     for (c=0;c<3;c++) {         for (r=0;r<2;r++) {             if (r==0) L[c]=strlen(s[r][c]);             else {                 w=strlen(s[r][c]);                 if (w>L[c]) L[c]=w;             }         }     }     for (r=0;r<2;r++) {         for (c=0;c<3;c++) {             if (c!=0) printf("|");             printf("%*s",L[c],s[r][c]);         }         printf("|\n");     }     printf("\n");      for (r=0;r<2;r++) {         for (c=0;c<3;c++) {             if (c!=0) printf("|");             printf("%*s",-L[c],s[r][c]);         }         printf("|\n");     }     printf("\n");     return 0; } //000|01111|        02| // 10|  111|1222222222| // //000|01111|02        | //10 |111  |1222222222| // //

user: user-3
content: 设定字符串长度，比如"%20s"字符串20字节长度，试试～
user-0 提问: C语言extern的一个小问题

回复:
user: user-0
content: 当标识符具有文件作用域时，extern才是可选的。第二个a不具备文件作用域，所以在使用extern对a进行声明时会自动引用具有文件作用域的变量a(在文是第一个a)。回帖是为了下次忘了能更好的理解

user: user-1
content: 就近原则吧，把extern int a;这句注释掉，应该输出的是13；

user: user-2
content: 全局变量在外部使用声明时，extern关键字是必须的，如果变量没有extern修饰且没有显式的初始化，同样成为变量的定义，因此此时必须加extern，而编译器在此标记存储空间在执行时加载内并初始化为0。而局部变量的声明不能有extern的修饰，且局部变量在运行时才在堆栈部分分配内存。你这加extern表示a为全局变量，当然为12

user: user-3
content: extern extern declarator      // used when variable or function has external linkage  extern string-literal declarator      // used when linkage conventions of another                           // language are being used for the declarator  extern string-literal { declarator-list }   // used when linkage conventions of another                          // language are being used for the declarators  The extern keyword declares a variable or function and specifies that it has external linkage (its name is visible from files other than the one in which it's defined). When modifying a variable, extern specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends). The variable or function may be defined in another source file, or later in the same file. In C++, when used with a string, extern specifies that the linkage conventions of another language are being used for the declarator(s).  Declarations of variables and functions at file scope are external by default.  In C++, string-literal is the name of a language. The language specifier "C++" is the default. "C" is the only other language specifier currently supported by Microsoft C/C++. This allows you to use functions or variables defined in a C module.  All of the standard include files use the extern "C" syntax to allow the run-time library functions to be used in C++ programs.  For more information, see auto, register, static, const, and volatile.  Example  The following example declares the functions printf, getchar, and putchar with “C” linkage:  // Example of the extern keyword extern "C" int printf( const char *, ... );  extern "C" {    int getchar( void );    int putchar( int ); }

user: user-4
content: 供参考：#include <stdio.h>  int a=12 ;//全局变量是有默认值的,可以在函数外定义并初始化。           // a=12;//不能进行赋值操作。 int main(void) {      int a = 13;//局部变量没有默认值                //局部变量会在函数内部屏蔽全局变量的影响。即当局部变量与全局变量同名时，                //在局部变量的作用范围之内，全局变量不起作用。局部变量优先原则。     {       extern int a;//想引用该外部变量，则应该在引用之前用关键字extern对该变量                   //作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明，                   //就可以从“声明”处起，合法地使用该外部变量。       printf("%d\n",a);//12     }     printf("%d\n",a); //13     system("pause");     return 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
user-0 提问: 利用函数调用编写输入n个数，输出最大值和最小值的程序

回复:
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: 写在主函数内移出去到定义的函数内即可,不过就是写了个定义的函数体而已. 如主函数内写:N=0最大=最大值函数最小=最小值函数输入=0WHILE(N)CIN>>输入,最大<输入?最大=输入:0,最小>输入?最小=输入:0,--N;COUT<<最大<<ENDS<<最小; 再写一个函数体:输出最大小数据(){把之上代码剪贴这里即可}，再在主函数内调用这个写好了的函数即可。

user: user-3
content: #include <stdio.h>  void get_max_min_val(int n, int *max, int *min);  int main(void) {     int n;     int max = 0, min = 0;      scanf("%d", &n);      get_max_min_val(n, &max, &min);      printf("max=%d, min = %d\n", max, min);      return 0; }  void get_max_min_val(int n, int *max, int *min) {     int i;     int tmp;      for (i = 0; i < n; i++) {         scanf("%d", &tmp);         if (i == 0) {             *max = *min = tmp;             continue;         }         if (*max < tmp)             *max = tmp;         if (*min > tmp)             *min = tmp;     } }   供参考～  问题不难，建议自己多尝试一些，给你代码也建议自己试着写写，比如输入的先放到数组里，然后定义两个函数，分别算出最大值和最小值
user-0 提问: 求大佬帮我看看这一段代码为什么不能跑

回复:
user: user-1
content: #include<stdio.h>  int cube(int n){     return n*n*n; }  int main(void) {     int sum,temp,i;     for(i = 100;i < 1000; ++i){         temp = i;         sum = 0;         //while(i){         while(temp){             //sum += cube(i%10);             sum += cube(temp%10);             //i /= 10;             temp /= 10;         }         //if(temp == sum){         if(i == sum){             //printf("%d\n",temp);             printf("%d\n", i);         }         //sum = 0;     }      return 0; } 供参考～  问题是在外层是for循环变量是i，所以在while中就不能对i进行写操作了，否则改变了i的值，外层的循环i也跟着变化了，有可能是无限循环了。  另外，第一次使用sum时没有初始化。要么定义时，int sum = 0;这样sum = 0;放在后面就没问题了。当然也可以按照代码里操作

user: user-2
content: while ()循环体里，把i 全改为temp.

user: user-2
content: 最后的sum =0;删除了

user: user-2
content: temp =i;后面再加一句sum =0;
user-0 提问: 求大佬解答？这个程序在Devc++上运行显示id returned 1 exit status

回复:
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: 参考：https://didispace-wx.blog.csdn.net/article/details/110358437

user: user-0
content: 用visual stdio 2019输入include显示灰色，是怎么回事呢

user: user-0
content: 嗯嗯，好的我试试

user: user-2
content: 引用 5 楼 weixin_43058440 的回复:请问您用的这个是什么软件，各类的颜色和我的软件不一样我用的c++builder.其它可参照6#楼。

user: user-3
content: 引用 5 楼 weixin_43058440 的回复:请问您用的这个是什么软件，各类的颜色和我的软件不一样 你指的是2楼的回复吗？呃，这是CSDN自带的代码编辑器格式。推荐一款好用的IDE:visual studio 2019

user: user-4
content: 引用 2 楼 user-4 的回复:getchar 如何输入 EOF 呀？是上一个调试终端没关闭的原因？ 算了，都隔了一天了，估计今天重启之后就可以用了 (1)遇到getcahr函数执行时，要输入第一个字符时就直接输入Ctrl+D； (2)在前面输入的字符为换行符时， 接着输入Ctrl+D； (3)在前面有字符输入且不为换行符时，要连着输入两次Ctrl+D，这时第二次输入的Ctrl+D起到文件结束符的功能，至于第一次的 Ctrl+D作为行结束符 其实，这三种情况都可以总结为只有在getchar()提示新的一次输入时， 直接输入Ctrl+D才相当于文件结束符。 https://www.cnblogs.com/cunlau/articles/3823660.html

user: user-4
content: getchar 如何输入 EOF 呀？是上一个调试终端没关闭的原因？ 算了，都隔了一天了，估计今天重启之后就可以用了

user: user-0
content: 请问您用的这个是什么软件，各类的颜色和我的软件不一样

user: user-0
content: 谢谢你，解决啦，格式比我的美观多了

user: user-2
content: #include<stdio.h>  int main(){     int c;     int nd=0,nb=0,nl=0,nc=0,nn=0;     while((c=getchar())!=EOF){ //这里缺'{'          switch (c) {                 case' ':                         ++nb;                         break;                 case'1':                 case'2':                 case'3':                 case'4':                 case'5':                 case'6':                 case'7':                 case'8':                 case'9':                 case'0':                         ++nd;                         break;                 case'\n':                         ++nl;                         break;                 case'{':                 case'}':                         ++nc;                         break;                 default:                         ++nn;                         break;          }     } //这里缺'}'     printf("spaces: %d,lines: %d,digits: %d",nb,nl,nd);     printf("{ and }：%d,others: %d\n",nc,nn);          return 0; }
user-0 提问: 求大佬帮我看看这段代码

回复:
user: user-1
content: 建议提供更多的代码，完整的代码吧

user: user-2
content: 供参考，见标注：int lengthOfLongestSubstring(char * s) {     int len = strlen(s);     if (len<2) return len;     int max = 1;     int hash[128] = {-1};     for (int i=0, j=0; j<len; j++){         if (hash[s[j]] != -1){      //if (has[s[j]] != -1){             i = fmax(i, hash[s[j]]+1);         }         hash[s[j]] = j;         max = fmax(max, j-i+1);     }     return max; }

user: user-0
content: 引用 8 楼 qzjhjxj的回复:因为一条基本语法规则：数组初始化列表中的元素个数小于指定的数组长度时，不足的元素补以默认值。默认值只能设为0，且只有在初始化时，才能设为0。如果不明确指出初始化列表，那么基本类型是不会被初始化的（除全局变量和静态变量外），所有的内存都是“脏的”。 非常感谢

user: user-2
content: 因为一条基本语法规则：数组初始化列表中的元素个数小于指定的数组长度时，不足的元素补以默认值。默认值只能设为0，且只有在初始化时，才能设为0。如果不明确指出初始化列表，那么基本类型是不会被初始化的（除全局变量和静态变量外），所有的内存都是“脏的”。

user: user-3
content: hash[128]{0}

user: user-0
content: 引用 5 楼 棉猴的回复:就像上面朋友说的 int hash[128] = {-1}; hash数组的第一个元素是-1，后面所有的元素都是0。 改成下面的代码试试 int hash[128]; 	for (int i = 0; i < 128; ++i) 	{ 		hash[i] = -1; 	} 改了，确实通过了，但是为什么int hash[128] = {0}可以把所有元素初始化为0，而把0改成-1却不能全部初始化为-1呢

user: user-0
content: 引用 4 楼 user-5的回复:数组初始化的问题 int hash[128] = {-1}; //这是不完全初始化，除了用0初始化可以保证正确，其他不保证，也就是有可能只有第一个元素是-1，以后的元素都是0 为什么只有0才可以呢

user: user-4
content: 就像上面朋友说的 int hash[128] = {-1}; hash数组的第一个元素是-1，后面所有的元素都是0。 改成下面的代码试试 int hash[128]; 	for (int i = 0; i < 128; ++i) 	{ 		hash[i] = -1; 	}

user: user-5
content: 数组初始化的问题 int hash[128] = {-1}; //这是不完全初始化，除了用0初始化可以保证正确，其他不保证，也就是有可能只有第一个元素是-1，以后的元素都是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: 在软件开发领域，“C开发分类” 与 在生物进化领域，“DNA分类” 类似。 我觉得。

user: user-3
content: C语言都是一样的，当然要看遵循什么标准：C89， C99等； 不同的系统下，编辑和编译器可能不一样；根据要开发和使用的系统来决定是使用那些工具吧～

user: user-4
content: 不管什么分类，语法都是一样的（相对于同一编译器而言），有可能用到的一些类库不同而已 开发工具嘛，当然各式各样，但不管用哪一种，应该都可以（当然，应该选择针对不同的平台，至于开发工具自带make file之类的编译命令，应该都大同小异）
user-0 提问: 请问有人知道FreeType库可以修复损毁的字体文件吗

回复:
user: user-0
content: 引用 1 楼 赵4老师 的回复:换个不收费的样子长差不多的字体可能更省事。不是，是个需求，看有没有可能将损毁的字体文件恢复，我用freetype看了下这个字体的属性，发现这个字体文件连字符表什么都没有

user: user-1
content: 换个不收费的样子长差不多的字体可能更省事。
user-0 提问: 关于++符号的求助

回复:
user: user-1
content: 先赋值再加，否则++是在前面

user: user-2
content: 先赋值，然后分别加加。

user: user-3
content: 简单理解： 先 *p1 = *p2；  后 p1 + 1,p2 + 1
user-0 提问: borlandc++

回复:
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 楼 user-4的回复:你是说bc3.1?  对的我太难了

user: user-2
content: cppfans.com有个完整例子，复杂了一点。如果想二三十行代码的，差不多是玩具级别的。

user: user-3
content: 现在的视频比较复杂，需要先安装解码器，然后调用它来实现，至于语言反而不是那么重要了

user: user-4
content: 你是说bc3.1?
user-0 提问: c语言输入

回复:
user: user-0
content: 感谢大佬回复

user: user-1
content: 在输入缓冲区放着呢

user: user-2
content: 多输入的字符仍然留在输入缓冲区里等待你后续的输入语句。 然后随程序结束而失效。

user: user-3
content: scanf("%c%c",&a,&b);这个输入的是单个字符，你输这么多，它装不下的。
user-0 提问: 请问下面的动态数据代码有什么问题吗？(vargrind报错)

回复:
user: user-0
content: 引用 1 楼 user-3 的回复:for(int j=0;j<2;j++){         i=dynamic_arr_add(i,j);   最终还是大意了，确实是这个问题。。。 对于栈空间的内存，下意识认为函数内和函数外互相影响，结果导致这种问题。  实际程序中，遇到写入几个数据就变成随机数的问题，原因如下 malloc(sizeof(int)) 虽然sizeof(int) == 4,但是申请的内存实际上是32大小，当我realloc(sizeof(int)*2)的时候，因为后面是之前malloc的32大小的内存，所以只需要修改索引，不需要把新的内存拷贝到别的位置。  但是当realloc(sizeof(int)*8)的时候，realloc就会拷贝内存，并且释放原来的内存，然后，后面再malloc的时候，会把这里释放的内存用掉。就会出现随机数  破案了。谢谢您

user: user-1
content: 正如楼上的描述，  dynamic_arr_add(i,j);每次更新后的i没有在下次的调用该函数时传入。因此每次就应该更新一下i；如果不想用返回值，建议可以把第一个传入参数写成传入传出参数，这样，每次的修改也可以更新到i；并在下次的传入最新的i；

user: user-2
content: int len = i[0];     // 长度应当包含记录位 改成 int len = *i;

user: user-3
content: for(int j=0;j<2;j++){         i=dynamic_arr_add(i,j);
user-0 提问: for循环中if语句的一个诡异的问题

回复:
user: user-1
content: 回过头看，编译器优化掉一些分支很正常，你要是实在闹心可以先试试 -O0 或者在两个if中间printf一下，那就不算无用分支了。

user: user-2
content: 引用 13 楼 无名D小兵 的回复:[quote=引用 10 楼 真相重于对错 的回复:] if (a == 0)//这句话执行了         {             //if(x*10<-2147483648 || x*10>2147483647 || x*10+nums[j]<-2147483648 || x*10+nums[j]>2147483647)             if (x * 10 > 2147483647 || x * 10 + nums[j] > 2147483647)//这句判断永为假                 //return 0;                 return 0;//因此这句话不会得到执行的机会         } 自己打断点，或者加入输出语句，或者单步执行，就应该清楚了 有做，就是单步执行过程中跳过了这一条语句才奇怪的。[/quote]          if (a == 0)         {             printf("a==0\n");//这里加一句输出不就清楚了？             //if(x*10<-2147483648 || x*10>2147483647 || x*10+nums[j]<-2147483648 || x*10+nums[j]>2147483647)             if (x * 10 > 2147483647 || x * 10 + nums[j] > 2147483647)                 //return 0;                 return 0;         }

user: user-0
content: 引用 10 楼 真相重于对错 的回复:if (a == 0)//这句话执行了         {             //if(x*10<-2147483648 || x*10>2147483647 || x*10+nums[j]<-2147483648 || x*10+nums[j]>2147483647)             if (x * 10 > 2147483647 || x * 10 + nums[j] > 2147483647)//这句判断永为假                 //return 0;                 return 0;//因此这句话不会得到执行的机会         } 自己打断点，或者加入输出语句，或者单步执行，就应该清楚了 有做，就是单步执行过程中跳过了这一条语句才奇怪的。

user: user-1
content: 难道gcc有这么聪明，懂得删除无用分支？ 好吧，真的有这么聪明的编译器。

user: user-0
content: 引用 9 楼 forever74 的回复:[quote=引用 8 楼 无名D小兵 的回复:][quote=引用 3 楼 真相重于对错 的回复:]a=num[0],也就是0，后边也没有修改过a ,所以下边a==1，本程序不会执行。  我好奇的是，连a是否等于0都没有判断[/quote] 何以见得呢？[/quote] 用GDB调试时发现的

user: user-0
content: 引用 15 楼 forever74 的回复:回过头看，编译器优化掉一些分支很正常，你要是实在闹心可以先试试 -O0 或者在两个if中间printf一下，那就不算无用分支了。 好的，谢谢。

user: user-2
content: a=num[0],也就是0，后边也没有修改过a ,所以下边a==1，本程序不会执行。

user: user-2
content: 上边有误，应永远为假

user: user-2
content: x * 10 > 2147483647 || x * 10 + nums[j] > 2147483647 这样的语句永远为真，因为int 永远不会大于INT32_MAX ,如果计算结果大于了INT32_MAX,则会回卷。

user: user-2
content: if (a == 0)//这句话执行了         {             //if(x*10<-2147483648 || x*10>2147483647 || x*10+nums[j]<-2147483648 || x*10+nums[j]>2147483647)             if (x * 10 > 2147483647 || x * 10 + nums[j] > 2147483647)//这句判断永为假                 //return 0;                 return 0;//因此这句话不会得到执行的机会         } 自己打断点，或者加入输出语句，或者单步执行，就应该清楚了

user: user-1
content: 引用 8 楼 无名D小兵 的回复:[quote=引用 3 楼 真相重于对错 的回复:]a=num[0],也就是0，后边也没有修改过a ,所以下边a==1，本程序不会执行。  我好奇的是，连a是否等于0都没有判断[/quote] 何以见得呢？

user: user-0
content: 引用 3 楼 真相重于对错 的回复:a=num[0],也就是0，后边也没有修改过a ,所以下边a==1，本程序不会执行。  我好奇的是，连a是否等于0都没有判断

user: user-3
content: 或者以字符串的形式判断

user: user-3
content: 输入的时候，如果超出int的范围，会回卷。你可以用long long类型，如果没超出范围，再转为int

user: user-1
content: 计算机的数学不是人类数学，它只是一个粗糙的近似。 这就是现行的计算机体系结构不能诞生真正的人工智能的哲学层面的理由。

user: user-1
content: 这有啥诡异的，就好象 你取得了自己所在位置的地球经纬度，然后写了个if 说如果在东经180度的东边，或者在西经180度的西边，或者北纬90度北边，或者南纬90度南边，那就输出个出错信息。 这不就是废话么？自然的就废掉了。 道理一样一样的。
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: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-4
content: 早些年有个syslog-ng是用来日志入库的，近几年流行啥就不知道了，没有跟踪。

user: user-4
content: 看到楼主仍然坚持嵌套定义结构体（这是个编译错误），就没兴趣继续看下去了。  一般地说，要在结构体数组和文件之间互动，还是使用二进制文件方便一些。  对于楼主面临的分析日志，由于文件长度不定，另外全部读入内存也没有算法上的必要，因此建议还是用我的风格，读一行统计一行，扔掉，读下一行。 这样一来，用不用结构体不是关键，或者说结构体就多余了。  最后，如果是工作需要，那么建议找个开源软件代替syslog，日志入库，你要分析什么的可以上SQL，很香的。
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: 引用 5 楼 ctrigger 的回复:[quote=引用 4 楼 赵4老师 的回复:]计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 基本赞同。不过个人感觉：DOS命令 ==》SHELL，更靠谱一点。[/quote] 不写“DOS命令”，怎么凡尔赛文学地显摆我学DOS命令时，Linux还没诞生，Unix或FreeBSD啥的还没进入中国呢？

user: user-3
content: 引用 4 楼 赵4老师 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 基本赞同。不过个人感觉：DOS命令 ==》SHELL，更靠谱一点。

user: user-4
content: 30%靠就记忆，70%靠百度

user: user-5
content: 看了下基本都是从看书和从事方向的方法，都很对 说下从编程技巧方面的方法，可以多尝试去看下算法题并用C语言实现，会有很好的效果

user: user-2
content: 引用 7 楼 早打大打打核战争 的回复:我听说过80年代中科院已经引进xenix（sco unix的PC修改版），只能说当时还没进入西电~  可惜我当年没资格进中科院啊！

user: user-6
content: 我听说过80年代中科院已经引进xenix（sco unix的PC修改版），只能说当时还没进入西电~

user: user-2
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-7
content: 建议从读书，或者观看视频进行学习，因为这样学习会更加系统。 选择经典数据《C程序设计语言》、《C和指针》、《C陷阱与缺陷》，先从基础书开始，到进阶，如果刚开始有看不懂的，可以浏览一下跳过，后面再回头看的。 C语言学习后，如果走嵌入式路线，就需要学习单片机编程，了解汇编，计算机基础等。单片机比较方便是STM32起步，资源比较多。后续是单片机跑实时系统freeRTOS系统之类的。接着是linux系统了，linux也分为驱动开发，系统移植，应用开发几块。 如果走的是纯软路线，就需要学习C++或者C#了，这时候也有是linux系统还是windows系统分，总之需要先规划好，必须系统学习，博客之类只能作为辅助学习用。

user: user-8
content: 谢谢提供思路。能进一步细化吗
user-0 提问: double类型用scanf函数时格式符%f和%lf不一样结果？有没有懂得解释一下

回复:
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: scanf: %f - float,  %lf - double printf 在 C89 里 %f， float 类型会自动转为 double, C89里面是没有 %lf 的。  https://en.cppreference.com/w/c/io/fscanf https://en.cppreference.com/w/c/io/fprintf

user: user-3
content: %f是float单精度，%lf是double双精度的，所以计算结果不同

user: user-4
content: double就是要使用 %lf的   float使用 %f 不要纠结为什么。  想想double使用 %d能对吗？ 你现在的问题就  类似  “ double类型变量，使用scanf函数时格式符%d，为什么错误了？”  没有为什么，就是用错了

user: user-5
content: #include <stdio.h> int main() {     float   f=1.234567f;     double lf=1.234567890123456;     printf("%f ,%.15lf\n",f,lf);//1.234567 ,1.234567890123456     printf("%f ,%.15f \n",f,lf);//1.234567 ,1.234567890123456     printf("%lf,%.15lf\n",f,lf);//1.234567,1.234567890123456      char s[]="1.234567890123456";     f =0.0f;sscanf(s,"%f" ,& f); printf("%f    \n", f);//1.234568     lf=0.0 ;sscanf(s,"%lf",&lf); printf("%.15lf\n",lf);//1.234567890123456     lf=0.0f;sscanf(s,"%f" ,&lf); printf("%.15lf\n",lf);//0.000000000000000     f =0.0 ;sscanf(s,"%lf",& f); printf("%f    \n", f);//70.175720      return 0; } //根据以上运行结果可得：printf时，%lf和%f可以混用，scanf时不行。

user: user-6
content: https://blog.csdn.net/weixin_44997886/article/details/102812153 参考

user: user-6
content: 你定义的double，scanf就得用lf，浮点数本就很麻烦，看堆栈调试

user: user-6
content: 虽然都是浮点数，%f代表单精度浮点型数据（float），%lf代表双精度浮点型数据（double），怎么可能一样呢。单精度浮点数有效数字保证6位，部分7位，双精度浮点数有效数字保证15位，部分16位。单精度浮点的表示范围：-3.40E+38 ~ +3.40E+38，双精度浮点的表示范围：-1.79E+308 ~ +1.79E+308

user: user-7
content: 既然测试了，验证了，那说明别人说的可能局限于编译器，要么就是别人说的有问题～

user: user-7
content: double输入的是8字节的，float是4字节的。输出用%f没问题，可能是类型提升了。
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: 再定义一个用于存储最大值下表的变量，比如max_idx，初始化为0（因为x = score[0]);再更新x的时候，同时给max_idx赋值对应的i;

user: user-3
content: 供参考：int LinSearch(int score[],int n) {     int i,x,max=0;     x = score[0];     for(i=1;i<n;i++)     {        if(score[i]>x)        {           x   = score[i];           max = i;        }     }     printf("最高分：%d\n",x);     return max; }

user: user-4
content: 返回x 的值就行了 如果你还需要返回对应的值 可以返回一个结构，或者用指针传入保存下标的变量 int LinSearch(int score[],int n,int * ret_index) { //原来的代码  *ret_index=x; return i; }
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: 引用 1 楼 user-3 的回复:供参考：void MaPrintScore(int score[],int n) {     int i,term,a=score[0],b=score[0],max=0,min=0;     for(i=0;i<n;i++)     {         if(score[i]>a)         {            a   = score[i];            max = i;         }         if(score[i]<b)         {            b   = score[i];            min = i;         }     }     term       = score[max];     score[max] = score[min];     score[min] = term; }    static void swap(int *a, int *b);  void MaPrintScore(int score[],int n) {     //int i,term,a=score[0],b=score[0],max=0,min=0;     int i, /*term,*/ max, min, max_i, min_i;      max = min = score[0];     max_i = min_i = 0;  //_i equal index     //for(i=0;i<n;i++)     for(i=1;i<n;i++)     {         if(score[i] > max)         {            max   = score[i];            max_i = i;         }         if(score[i] < min)         {            min   = score[i];            min_i = i;         }     }     if (max_i != min_i)         swap(&score[max_i], &score[min_i]);     /*     term       = score[max_i];     score[max_i] = score[min_i];     score[min_i] = term;     */ }  static void swap(int *a, int *b) {     int tmp = *a;     *a = *b;     *b = tmp; }  供参考～

user: user-3
content: 供参考：void MaPrintScore(int score[],int n) {     int i,term,a=score[0],b=score[0],max=0,min=0;     for(i=0;i<n;i++)     {         if(score[i]>a)         {            a   = score[i];            max = i;         }         if(score[i]<b)         {            b   = score[i];            min = i;         }     }     term       = score[max];     score[max] = score[min];     score[min] = term; }
user-0 提问: 结构体的内存存放是不是与编译器有关？

回复:
user: user-0
content: 谢谢各位大佬，明白了

user: user-1
content: 打印地址，建议用%p，不建议用%lld，因为16进制看地址比较方便，第二个是%d是有符号数，而地址是无符号类型的数据。

user: user-2
content: 结构体对齐并不是简单的相加，具体规范百度

user: user-3
content: 内存对齐啊，64位应该是按8字节对齐的 vs的话可以用#pragma pack (4) ，修改它 gcc 这个语句是否管用，我没试过。 gcc好像可以用__attribute__ ((aligned (n)))，我没有gcc，没法试

user: user-4
content: https://blog.csdn.net/liran2019/article/details/106759881?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%BB%93%E6%9E%84%E4%BD%93%E5%AF%B9%E9%BD%90%E5%8E%9F%E5%88%99&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-7-106759881.pc_search_result_hbase_insert

user: user-4
content: 结构体对齐的原因，参考：https://blog.csdn.net/qianghaohao/article/details/51011418?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%BB%93%E6%9E%84%E4%BD%93%E5%AF%B9%E9%BD%90%E5%8E%9F%E5%88%99&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-8-51011418.pc_search_result_hbase_insert
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: 引用 12 楼 xian0-666的回复:[quote=引用 11 楼 weixin_45544561 的回复:][quote=引用 3 楼 xian0-666的回复:]*(a+i)表示第i个元素，*(*(a+i))就表示第i个元素的地址了。a[p-a]看着怪怪的但是应该没有问题为a【0】 额额，c项没有问题的。[/quote]  我知道语法是没有问题的，但是这样用也太多此一举了[/quote] 嗯，是有一点。

user: user-2
content: 引用 11 楼 weixin_45544561 的回复:[quote=引用 3 楼 xian0-666的回复:]*(a+i)表示第i个元素，*(*(a+i))就表示第i个元素的地址了。a[p-a]看着怪怪的但是应该没有问题为a【0】 额额，c项没有问题的。[/quote]  我知道语法是没有问题的，但是这样用也太多此一举了

user: user-0
content: 引用 3 楼 xian0-666的回复:*(a+i)表示第i个元素，*(*(a+i))就表示第i个元素的地址了。a[p-a]看着怪怪的但是应该没有问题为a【0】 额额，c项没有问题的。

user: user-3
content: 感觉找到了

user: user-0
content: 引用 1 楼 gouyanfen的回复:选B *是读取地址的值 B中 *(a+i)就己经取得了正确的值了，最外括号的*再读取a[i]的值的地址 C选项中 a[p-a]是可以的但是怎么和i没有关系，怎么能知道要取第i个索引的值呢? 是你输入错了吗 a[p-a+i]? 我发现，没有int* p=a这句 d选项也可以引用。

user: user-0
content: 引用 1 楼 gouyanfen的回复:选B *是读取地址的值 B中 *(a+i)就己经取得了正确的值了，最外括号的*再读取a[i]的值的地址 C选项中 a[p-a]是可以的但是怎么和i没有关系，怎么能知道要取第i个索引的值呢? 是你输入错了吗 a[p-a+i]? 嗯嗯，懂了懂了！谢谢！

user: user-3
content: 引用 6 楼 weixin_45544561 的回复:[quote=引用 1 楼 gouyanfen的回复:]选B *是读取地址的值 B中 *(a+i)就己经取得了正确的值了，最外括号的*再读取a[i]的值的地址 C选项中 a[p-a]是可以的但是怎么和i没有关系，怎么能知道要取第i个索引的值呢? 是你输入错了吗 a[p-a+i]? B项可以改为：*(&(*(a+i)))吗？[/quote]当然可以的

user: user-0
content: 引用 1 楼 gouyanfen的回复:选B *是读取地址的值 B中 *(a+i)就己经取得了正确的值了，最外括号的*再读取a[i]的值的地址 C选项中 a[p-a]是可以的但是怎么和i没有关系，怎么能知道要取第i个索引的值呢? 是你输入错了吗 a[p-a+i]? B项可以改为：*(&(*(a+i)))吗？

user: user-0
content: 引用 2 楼 qzjhjxj的回复:选B A. p[i]              等价于  a[i] B. *(*(a+i))      *(a+i)) 等价于 a[i]  ,再对a[i] 取值 *a[i] 就错误了 C. a[p-a]         p=a ,p-a=0,a[p-a] = a[0]=0，是能取到数组a中的元素的 D. *(&a[i])      &是取地址符，等价于 *（a+i），是正确的 懂了，懂了。原来这样！谢谢！

user: user-0
content: 额，原来是这样。懂了，懂了。谢谢！

user: user-2
content: *(a+i)表示第i个元素，*(*(a+i))就表示第i个元素的地址了。a[p-a]看着怪怪的但是应该没有问题为a【0】

user: user-3
content: 选B A. p[i]              等价于  a[i] B. *(*(a+i))      *(a+i)) 等价于 a[i]  ,再对a[i] 取值 *a[i] 就错误了 C. a[p-a]         p=a ,p-a=0,a[p-a] = a[0]=0，是能取到数组a中的元素的 D. *(&a[i])      &是取地址符，等价于 *（a+i），是正确的

user: user-4
content: 选B *是读取地址的值 B中 *(a+i)就己经取得了正确的值了，最外括号的*再读取a[i]的值的地址 C选项中 a[p-a]是可以的但是怎么和i没有关系，怎么能知道要取第i个索引的值呢? 是你输入错了吗 a[p-a+i]?

user: user-5
content: A[B] *(A+B) *(B+A) B[A] //以上四行等价  "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价  A[0] *(A) 0[A] //以上三行等价
user-0 提问: 运行结果不对，也不能调试，能帮我看看怎么回事吗？

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

user: user-0
content: 引用 2 楼 user-3的回复:先改错，能通过了编译再说。 不要非法嵌套定义结构体。 你的status既然改成了int，就不要再套用strncpy处理它。否则就改回字符数组。 嗯嗯，谢谢指点

user: user-0
content: 引用 1 楼 自信男孩的回复:    //printf("%d",1.0*arr[i]++/i);     printf("%lf",1.0*arr[i]++/i); 对于浮点数值，用%d输出是有问题的。 好的，已经改过来了，谢谢啦

user: user-2
content: //printf("%d",1.0*arr[i]++/i);     printf("%lf",1.0*arr[i]++/i); 对于浮点数值，用%d输出是有问题的。

user: user-3
content: 先改错，能通过了编译再说。 不要非法嵌套定义结构体。 你的status既然改成了int，就不要再套用strncpy处理它。否则就改回字符数组。
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: 做网站的话还是c#或者java吧

user: user-2
content: 系统有简单有复杂，就看你想做怎样的界面了

user: user-0
content: 引用 2 楼 user-3的回复:[quote=引用 1 楼 user-3 的回复:]这种系统适合做成一个网站，显然C语言不是最佳选择！ 另外百度一下可以发现确实有别人做的，有的虽然不能免费下载但是可以观看，也有C语言的版本，但是作业还是自己完成的好[/quote] 大佬救救孩子

user: user-0
content: 引用 2 楼 user-3的回复:[quote=引用 1 楼 user-3 的回复:]这种系统适合做成一个网站，显然C语言不是最佳选择！ 另外百度一下可以发现确实有别人做的，有的虽然不能免费下载但是可以观看，也有C语言的版本，但是作业还是自己完成的好[/quote] 😲就是卡在充值这里好久了，实在没辙了😭😭

user: user-3
content: 引用 1 楼 user-3 的回复:这种系统适合做成一个网站，显然C语言不是最佳选择！ 另外百度一下可以发现确实有别人做的，有的虽然不能免费下载但是可以观看，也有C语言的版本，但是作业还是自己完成的好

user: user-3
content: 这种系统适合做成一个网站，显然C语言不是最佳选择！
user-0 提问: 请问一下 为什么左边的for循环可以输出正确的count，而换成右边的嵌套式循环就错了，两者的意思不是一样的嘛？

回复:
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: 首先，循环不是想嵌套就嵌套的，嵌套执行和执行两次结果完全不同；其次，你的嵌套循环都用的同一个变量i，肯定会出错

user: user-3
content: 两层循环用同一个变量，那么当外层循环i=0时，内层循环的i就已经i == n了，所以外层循环只会执行一次。但是score[i] > aver这句的i已经是i == n了，所以是越界访问了。

user: user-4
content: 就像楼上说的，你用两个相同的循环变量的意义不明白。如果你硬要都用i，那么最外层循环只循环一次，i就不满足条件了。 如果是笔误，（比如换成j）就循环而言，是不一样的。左边循环2n次，右边循环n*n次。s最终值是求和的n倍

user: user-5
content: 同一个i，同一个值。 你不觉得有点乱么？
user-0 提问: 大家帮我看看我这深搜的方法有没有错误

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

user: user-0
content: 题目是小于20，我用21不会越界的

user: user-2
content: 引用 2 楼 m0_55067373 的回复:找到问题了，是障碍物的设定有问题，下标应该不会越界，因为我只往右和往下搜索，而且超过这个范围就会return 问题是x,y输入不能保证不大于21

user: user-0
content: 找到问题了，是障碍物的设定有问题，下标应该不会越界，因为我只往右和往下搜索，而且超过这个范围就会return

user: user-3
content: 下标有机会越界； 你输入的y用得有点少。
user-0 提问: 同样一份.c文件，我在Linux上编译成.a文件执行正常，在windows编译成.exe文件，执行前面正常，后面无结果输出

回复:
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: 是不是程序处理的数据文件有格式上的问题？明显左侧的Windows端有个 WARNING ： END OF DATA IN FILE。

user: user-3
content: 调试，看看到具体哪一部，结果不一致。

user: user-4
content: 嗯，收到，确实挺奇怪。

user: user-0
content: 左侧为windows端，后面的文件无数据写入，右侧为ubuntu，程序执行正常

user: user-5
content: windows打开文件默认文本模式，linux打开文件默认二进制模式。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fputc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fscanf,fprintf,fgets,fgetc,fputc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了
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: C语言能自定义变量的地址？

user: user-3
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

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

user: user-4
content: 把需求再描述清晰一些，更详细一些。

user: user-5
content: ？？？？？ 楼上厉害了，远程遥视？？？？

user: user-6
content: 在书上楷体字那部分。
user-0 提问: 请问一下 这个程序是输出学生不及格的人数，但是为什么得不到正确的答案

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

user: user-2
content: for(i=0;i<n && i < N;i++)    //加上i < N，防止数组越界～     {        scanf("%d",&a[i]);//scanf("%d",a[i]);输入成绩                          //break;//这句多余     } 供参考～

user: user-3
content: 参考对照： #include <stdio.h> #define N 40 int Func(int a[],int n); int main() {     int n,i,a[N],ret;      scanf("%d",&n);       //输入学生人数      for(i=0;i<n;i++)     {        scanf("%d",&a[i]);//scanf("%d",a[i]);输入成绩                          //break;//这句多余     }     ret = Func(a,n);     printf("%d",ret);     return 0; }  int Func(int a[],int n) {     int i,count=0; //m     for(i=0;i<n;i++)     {                   //m = a[i];//这句可以不用        if(a[i]<60)//if(m<60)        {           count++;        }     }     return count; }   //8 //75 87 54 36 92 64 52 53 //4请按任意键继续. . .
user-0 提问: Miller_Rabin算法中的二次探测定理的一些疑惑

回复:
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: 说错了 是为什么给了小于p的正整数的范围也行啊
user-0 提问: c如何输出中文

回复:
user: user-1
content: https://blog.csdn.net/yoursly/article/details/95588323  按这里方式修改一下吧

user: user-2
content: 改一下编码方式就好了

user: user-3
content: 引用 2 楼 虚延 的回复:引用 1 楼 自信男孩 的回复：编码问题，建议看一下字符编码。字符编码怎么设置啊，我之前在mac上都可以直接输出中文的 看一下配置部分，找到设置编码的地方。

user: user-4
content: 供参考：#include <stdio.h> #include <locale.h> int main() {     wchar_t name[100];     setlocale(LC_ALL,"chs");     wscanf(L"%s",name);     wprintf(L"\"%s\"\n",name);     return 0;  }

user: user-0
content: 引用 1 楼 自信男孩 的回复：编码问题，建议看一下字符编码。字符编码怎么设置啊，我之前在mac上都可以直接输出中文的

user: user-3
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-2
content: 去网上找找翁恺老师的课，还有就是多练习叭

user: user-3
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-4
content: 引用 4 楼 拾年_ 的回复:[quote=引用 3 楼 早打大打打核战争的回复:]学好C语言比玩转F1赛车容易多了，但是“C语言到底怎么才能学好”这个问题的难度和“到底怎么才能当上F1车手”的难度一样，简单说就是问题太大，无法回答，回答也只能是概念性的，没有可操作性~ 唉，说白了只要肯下功夫，我就是想走捷径，看来还得靠自己[/quote]  我感觉你很有悟性，应该很容易学好，C语言是很简单的语言，复杂之处在于灵活运用

user: user-0
content: 引用 3 楼 早打大打打核战争的回复:学好C语言比玩转F1赛车容易多了，但是“C语言到底怎么才能学好”这个问题的难度和“到底怎么才能当上F1车手”的难度一样，简单说就是问题太大，无法回答，回答也只能是概念性的，没有可操作性~ 唉，说白了只要肯下功夫，我就是想走捷径，看来还得靠自己😓

user: user-4
content: 学好C语言比玩转F1赛车容易多了，但是“C语言到底怎么才能学好”这个问题的难度和“到底怎么才能当上F1车手”的难度一样，简单说就是问题太大，无法回答，回答也只能是概念性的，没有可操作性~
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: 不知道楼主的杨辉三角形n的数据规模与约定，暂定n<10 的. 每行最后一列之后允许跟空格吗，如果可以，第25行改为下面这样就行了 printf("%-2d  ",a[i][j]); 如果每行最后一列之后不能有空格，那第25行改printf("%-2d%s",a[i][j],(j<i)?"  ":"");

user: user-3
content: 不想改很多，就用判断一下每一行是不是第一个元素，如果是，就不用%2d而改成%d，否则就用%2d

user: user-4
content: printf的格式控制很灵活的：printf("%*d", !!(j - 1) + 1, a[i][j]);

user: user-5
content: 特事特办嘛 printf(j==1?"%1d":"%2d",a[i][j]);
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: for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }

user: user-3
content: 当k=4，i = 1时，注释掉的代码是k < 5-i；即这条语句判断是假，不会执行，后面的i = 2, i = 3 ...都不会执行，这样，这个循环就成冗余代码，不会被执行了。

user: user-4
content: 供参考：#include <stdio.h> int main() {     int i,j,k;     for(i=1;i<=4;i++)      {       for(j=0;j<i-1;j++)        {         printf(" ");        }       //for(k=0;k<5-i;k++)//这句是k=0开始，执行k<5-i次 printf(" *")，k++;                           //i=1时，k=0 < 5-i=5-1=4,条件满足，执行 printf(" *")，k++；                           //i=2时，k=0 < 5-i=5-2=3,条件满足，执行 printf(" *")，k++；                           //i=3时，。。。。。。        for(k=5-i;k>0;k--) //倒过来应该是这样写才对，k=5-i开始，执行5-i>0次printf(" *"),k--;        //for(k=4;k<5-i;k--)//为什么将上面的for(k=0;k<5-i;k++)换成我注释的就不对啊，求解？        {                  //当i=1时，条件是k=4开始，k=4 < 5-i=5-1=4,条件不满足，直接就跳出循环了         printf(" *");     //当i=2时，k=4 < 5-i=5-2,仍然条件不满足，跳出循环        }                  //i=3时，。。。。。。       printf("\n");      }     system("pause");     return 0; }
user-0 提问: 为啥我这个代码输入数字点回车就还是没有输出

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

user: user-0
content: 好的好的，谢谢

user: user-2
content: 输入结束的条件是-1，所以你得输入-1才会退出循环。

user: user-3
content: 你的第一个循环赋值不如直接初始化的时候赋值，第二个循环仔细看的话可以发现只有输入scanf，而你输出的printf函数则是在第三个循环里，第二个循环没有跳出来就无法进入第三个循环，自然没有输出

user: user-3
content: ...你的那个循环本来就没有输出呀

user: user-4
content: 无语中 你自己写的输入-1才结束嘛。
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-0
content: 引用 4 楼 user-3的回复:楼主，这个chen()函数具体功能不清楚，按图修改，供参考：#include <stdio.h>  int chen(int b[],int n,int m);//函数声明 //或：int chen(int *b,int n,int m);  int main() {     int c,b;     while(~scanf("%d",&c))     {        scanf("%d",&b);        //int a[c];        int *a = new int[c];//动态数组        printf("%d\n",chen(a,c,b));     }          return 0;  }  int chen(int b[],int n,int m)//函数实现 //或：int chen(int *b,int n,int m); {     int sum=0;     for(int i=0;i<m;i++)     {        b[i] = i+1;     } } 我明天会试试的

user: user-0
content: 要求要用指针

user: user-2
content: 说的就是去掉星啊，原型比函数头就是多余一个星，画蛇为啥要添足呢？

user: user-3
content: 楼主，这个chen()函数具体功能不清楚，按图修改，供参考：#include <stdio.h>  int chen(int b[],int n,int m);//函数声明 //或：int chen(int *b,int n,int m);  int main() {     int c,b;     while(~scanf("%d",&c))     {        scanf("%d",&b);        //int a[c];        int *a = new int[c];//动态数组        printf("%d\n",chen(a,c,b));     }          return 0;  }  int chen(int b[],int n,int m)//函数实现 //或：int chen(int *b,int n,int m); {     int sum=0;     for(int i=0;i<m;i++)     {        b[i] = i+1;     } }

user: user-0
content: 加分加了，还是报错了，去掉星号，不用指针也对，字符串指针我会用，这个数组型指针有毒感觉

user: user-3
content: 参考这页往下拉：

user: user-2
content: 原型写的不对，复制函数头加个分号就好。 b需要个int类型的数组名，所以你红的那行调用是正确的，错的是上面。
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

user: user-0
content: 输出，%3.0f 瞎了。。。

user: user-0
content: 哦哦 我晓得了
user-0 提问: 把文件中的特定数据传入至数组中以待后续使用

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

user: user-2
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-0
content: 原始文件是手机上的传感器的数据，然后由于每次测量时间不等，行数是未知的，没有空行，但是每行并没有完全填满，预期期望是把原始数据文件中ACCE、Gyro、Magn以及GNSS开头的后续的一些数据分别读取到对应的数组中去，其中acce、gyro、magn都是n行（因为样本数未知）6列的数组；gnss是n行10列的数组，以便后续调取使用。

user: user-3
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-2
content: 这个恐怕和printf的%f 格式有关，好像默认小数6位， 我看就是 1.5

user: user-3
content: 这里涉及到浮点型与整数型何时进行转换的问题。 式子a= a_10/10;   a为浮点型，a_10为整数型      为了方便讲，把式子变成   a = a_10/10 + 3;  这时就出现问题了   是该把a_10直接转为浮点型然后进行 除10 加 3 的运算，(整数除法运算不保留余数，这是与浮点型运算的区别，这个会影响到最后结果) 还是a_10/10 运算完后 转为浮点型然后加3， 或者说a_10/10 + 3   全部运算完后在转呢。  实际上编译器是根据给的数字 10  或 10.0   ， 3  或3.0进行运算区分 整数与整数运算 a_10/10 ，a_10/10 + 3 还是按照整数运算方式进行 整数与浮点运算a_10/10.0   就会先把 a_10 转为浮点型在 与10.0运算。

user: user-4
content: #include <stdio.h> int main() {     float a=1.5;     printf("first  a=%f\n",a);//原来的     int   a_10;     a_10 = (int)(a*10);     printf("a_10=%d\n",a_10);     a    = a_10/10.0;     printf("second a=%f\n",a);//现在的      return 0; }  //first  a=1.500000 //a_10=15 //second a=1.500000 //请按任意键继续. . .

user: user-5
content: 所以你得表达清楚，你关心的到底是值还是格式？

user: user-5
content: 人家系统输出了5个0，你自己在正文敲了8个0，可见你自己也认为末尾多几个少几个0没关系。
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: 引用 2 楼 qq_52473673 的回复:[quote=引用 1 楼 forever74的回复:]scanf_s("%s",name,39); 为啥后面要带个39呀。[/quote] 40，或者用sizeof(name)。不建议用39，用39是考虑最后的'\0'，其实不需要关心scanf_s会考虑把'\0'加到缓存的末尾或者是有效字符的后面一个字节。

user: user-3
content: 参考：https://blog.csdn.net/Gnewocean/article/details/83793744?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-7.control

user: user-0
content: 引用 10 楼 qq_52473673的回复:[quote=引用 8 楼 qq_52473673的回复:][quote=引用 6 楼 qzjhjxj的回复:]供参考：#include<stdio.h> #define PARISE "you are a extraordinary being." int main() {     char name[40];     printf("what is your name?");     scanf_s("%s",name,40);     printf("Hello,%s. %s\n",name,PARISE);          return 0; } 参考百度：https://www.zhihu.com/question/64044016 不行呀，报错说40是未声明的标识符。[/quote] 不好意思，刚才我弄错了。已经可以了，谢谢。[/quote] 再次劳烦您一下，为什么要在后面加个40呢？

user: user-0
content: 引用 8 楼 qq_52473673的回复:[quote=引用 6 楼 qzjhjxj的回复:]供参考：#include<stdio.h> #define PARISE "you are a extraordinary being." int main() {     char name[40];     printf("what is your name?");     scanf_s("%s",name,40);     printf("Hello,%s. %s\n",name,PARISE);          return 0; } 参考百度：https://www.zhihu.com/question/64044016 不行呀，报错说40是未声明的标识符。[/quote] 不好意思，刚才我弄错了。已经可以了，谢谢。

user: user-4
content: scanf_s("%s",&name,39);

user: user-0
content: 引用 6 楼 qzjhjxj的回复:供参考：#include<stdio.h> #define PARISE "you are a extraordinary being." int main() {     char name[40];     printf("what is your name?");     scanf_s("%s",name,40);     printf("Hello,%s. %s\n",name,PARISE);          return 0; } 参考百度：https://www.zhihu.com/question/64044016 不行呀，报错说40是未声明的标识符。

user: user-4
content: scanf_s("%s",[color=#0000FF]&name[/color],39); //必须是变量地址，

user: user-3
content: 供参考：#include<stdio.h> #define PARISE "you are a extraordinary being." int main() {     char name[40];     printf("what is your name?");     scanf_s("%s",name,40);     printf("Hello,%s. %s\n",name,PARISE);          return 0; } 参考百度：https://www.zhihu.com/question/64044016

user: user-0
content: 引用 4 楼 forever74的回复:scanf_s的其他用法和scanf一致，但是， 每个%s或%c格式符需要对应后面2个参数，第二个是长度限制。 但我按你上面那样打还是不行呀。

user: user-5
content: scanf_s的其他用法和scanf一致，但是， 每个%s或%c格式符需要对应后面2个参数，第二个是长度限制。

user: user-0
content: 引用 1 楼 forever74的回复:scanf_s("%s",name,39); 好像也不行哟

user: user-0
content: 引用 1 楼 forever74的回复:scanf_s("%s",name,39); 为啥后面要带个39呀。

user: user-5
content: scanf_s("%s",name,39);

user: user-0
content: 引用 14 楼 qq_34124780的回复:scanf()不是要用&符号来取地址接收吗？scanf_s应该也需要吧。。。 这个是name数组，不需要那个

user: user-6
content: scanf()不是要用&符号来取地址接收吗？scanf_s应该也需要吧。。。
user-0 提问: 请问大神 为什么是这个结果，错哪了（答案是5）

回复:
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: 修改如下，供参考：#include <stdio.h>  int Gcd(int x,int y);//函数声明  int main() {         int a,b;         int ret;         scanf("%d %d",&a,&b);          ret = Gcd(a,b); //函数调用          printf("%d",ret);                  return 0; }  int Gcd(int x,int y)//函数实现 {        int r;        r=x%y;        while(r!=0)        {           x=y;           y=r;           r=x%y;        }        return y; }   //50 15 //5请按任意键继续. . .

user: user-3
content: ret没有初始化。 编写的函数也没有用呀。，看不出这段程序的作用

user: user-4
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: 引用 5 楼 weixin_45544561的回复:[quote=引用 4 楼 自信男孩的回复:][quote=引用 3 楼 weixin_45544561 的回复:][quote=引用 1 楼 自信男孩的回复:]scanf的返回值不等1（注意scanf中只有一个%d，因此等于1是正常的输入），说明输入的不匹配%d，那么scanf("%*s");就是用于接收输入缓存里的不匹配%d的内容，这样保证输入缓存里没有内容，下次的scanf就会接收新输入的，如果没有这句，那么输入缓存的内容还是会和%d匹配，不匹配，继续返回0，这样就成了无限循环～ 额，好像跟那个getchar()接收回车一样。 但while那里还是不明白，如果我输入days为5，那么5！=1为真（逻辑值即非零），为什么不进入循环？[/quote] 是返回值，返回值要么是0或EOF，要么是输入的匹配的个数[/quote] 懂了懂了，厉害[/quote] 怎么发不出消息

user: user-0
content: 引用 4 楼 自信男孩的回复:[quote=引用 3 楼 weixin_45544561 的回复:][quote=引用 1 楼 自信男孩的回复:]scanf的返回值不等1（注意scanf中只有一个%d，因此等于1是正常的输入），说明输入的不匹配%d，那么scanf("%*s");就是用于接收输入缓存里的不匹配%d的内容，这样保证输入缓存里没有内容，下次的scanf就会接收新输入的，如果没有这句，那么输入缓存的内容还是会和%d匹配，不匹配，继续返回0，这样就成了无限循环～ 额，好像跟那个getchar()接收回车一样。 但while那里还是不明白，如果我输入days为5，那么5！=1为真（逻辑值即非零），为什么不进入循环？[/quote] 是返回值，返回值要么是0或EOF，要么是输入的匹配的个数[/quote] 懂了懂了，厉害

user: user-2
content: 引用 3 楼 weixin_45544561 的回复:[quote=引用 1 楼 自信男孩的回复:]scanf的返回值不等1（注意scanf中只有一个%d，因此等于1是正常的输入），说明输入的不匹配%d，那么scanf("%*s");就是用于接收输入缓存里的不匹配%d的内容，这样保证输入缓存里没有内容，下次的scanf就会接收新输入的，如果没有这句，那么输入缓存的内容还是会和%d匹配，不匹配，继续返回0，这样就成了无限循环～ 额，好像跟那个getchar()接收回车一样。 但while那里还是不明白，如果我输入days为5，那么5！=1为真（逻辑值即非零），为什么不进入循环？[/quote] 是返回值，返回值要么是0或EOF，要么是输入的匹配的个数

user: user-0
content: 引用 1 楼 自信男孩的回复:scanf的返回值不等1（注意scanf中只有一个%d，因此等于1是正常的输入），说明输入的不匹配%d，那么scanf("%*s");就是用于接收输入缓存里的不匹配%d的内容，这样保证输入缓存里没有内容，下次的scanf就会接收新输入的，如果没有这句，那么输入缓存的内容还是会和%d匹配，不匹配，继续返回0，这样就成了无限循环～ 额，好像跟那个getchar()接收回车一样。 但while那里还是不明白，如果我输入days为5，那么5！=1为真（逻辑值即非零），为什么不进入循环？

user: user-0
content: 引用 1 楼 自信男孩的回复:scanf的返回值不等1（注意scanf中只有一个%d，因此等于1是正常的输入），说明输入的不匹配%d，那么scanf("%*s");就是用于接收输入缓存里的不匹配%d的内容，这样保证输入缓存里没有内容，下次的scanf就会接收新输入的，如果没有这句，那么输入缓存的内容还是会和%d匹配，不匹配，继续返回0，这样就成了无限循环～ 好像跟那个getchar()接收回车键一样。懂了一些。但while里面的条件，如果开始我输入为5，即days为5，5!=1为真(即非零。)为什么不进入循环？

user: user-2
content: scanf的返回值不等1（注意scanf中只有一个%d，因此等于1是正常的输入），说明输入的不匹配%d，那么scanf("%*s");就是用于接收输入缓存里的不匹配%d的内容，这样保证输入缓存里没有内容，下次的scanf就会接收新输入的，如果没有这句，那么输入缓存的内容还是会和%d匹配，不匹配，继续返回0，这样就成了无限循环～