barriers / 阅读 / 详情

c语言scanf和scanf_s的区别,详解

2023-08-04 19:57:36
TAG: anf
共3条回复
皮皮

scanf是标准库函数

scanf_s 是vs的库函数 微软认为c标准的scanf_s不安全 自己做的

比如给字符串写值的时候必须确认 数组大小 防止访问越界

char d[20];

scanf("%s",d);

scanf_s("%s",d,20);

coco

ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内在泄露。所以vc++2005/2008中提供了scanf_s(),在调用时,必须提供一个数字以表明最多读取多少位字符。

里论外几

二者的区别与 strcpy 和 strncpy 的区别一样

scanf_s提供更安全一些的机制 ,以防止溢出 ,对于 %s , %S 等 ,变量地址后要紧跟一个参数,以表示其大小,如:

wchar_t ws[10];

scanf_s("%S", ws, 10);

相关推荐

scanf是什么意思?

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。函数返回值为int型。注意问题:ANSI C标准向scanf()增加了一种新特性,称为扫描集(scanset)。扫描集定义一个字符集合,可由scanf()读入其中允许的字符并赋给对应字符数组。扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。使用扫描集时,scanf()连续吃进集合中的字符并放入对应的字符数组,直到发现不在集合中的字符为止(即扫描集仅读匹配的字符)。返回时,数组中放置以null结尾、由读入字符组成的字符串。
2023-08-04 18:48:371

scanf是什么意思?

scanf是c语言中的标准库函数,主要作用是接收用户输入的数据。scanf是C语言中的输入函数,可以从键盘获得用户输入,和printf输出功能正好相反。scanf的输入格式是多种多样的,使用时需根据情况选择,最常用的是十进制整数型输入%d。scanf的使用和输入格式scanf("%d", &c); //输入一个整数并赋值给c。scanf("%d", &d); //输入一个整数并赋值给d。scanf("%d,%d", &c, &d); //输入两个整数并分别赋值给c、d。scanf("%d %d", &c, &d); //输入两个整数并分别赋值给c、d。前两个scanf:输入一个整数,按下回车键,scanf会读取键盘输入,并把数据赋值给c(或d);后两个scanf:都是一样功能,输入格式不同,对于scanf(),输入数据的格式要和控制字符串的格式保持一致。比如:输入15 24回车,输入15,24回车,同样的把值分别赋给c和d。
2023-08-04 18:48:511

scanf是什么意思?

scanf 格式输入函数函数作用:按照变量在内存的地址将变量值存进去。一般格式:scanf(格式控制,地址表列)其中,格式控制:%d:以带符号的十进制形式输出整数%o:以八进制无符号形式输出整数%x:以十六进制无符号形式输出整数%u:以无符号十进制形式输出整数%c:以字符形式输出,只输出一个字符%s:输出字符串%f:以小数形式输出单,双精度数,隐含输出六位小数%e:以指数形式输出实数%g:选用%f或%e格式中输出宽度较短的一种格式,不输 出无意义的0在格式控制的字母前面可以用几种常见的格式符的修饰符,作用如下:L:用于长整型整数,可加在格式符d,o,x,u前面M(代表一个正整数):数据最小宽度N(代表一个正整数):对实数,表示输出n位小数; 对字符串,表示截取的字符个数地址列表:是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址举例:用scanf函数输入数据。#include<stdio.h>void main(){int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d,%d,%d ”,a,b,c);}运行情况:3 4 5 (回车) (输入a,b,c的值)3,4,5 (输出a,b,c的值)使用scanf函数时应注意的问题 :(1)scanf函数中的“格式控制”后面应当是变量地址,而不应 是变量名。 (2) 如果在“格式控制”字符串中除了格式说明以外还有其他字符, 则在输入数据时在对应位置应输入与这些字符相同的字符。 (3) 在用“%c”格式输入字符时,空格字符和“转义字符”都作为 有效字符输入 (4) 在输入数据时,遇以下情况时认为该数据结束。 ① 遇空格,或按“回车”或“跳格”(Tab)键; ② 按指定的宽度结束,如“%3d”,只取3列; ③ 遇非法输入。
2023-08-04 18:49:041

C语言中的scanf是什么意思

scanf() 函数是 C 语言中的一个输入函数,它从标准输入设备(通常是键盘)读取数据,并将其存储到变量中。它的原型为:int scanf(const char *format, ...);scanf() 函数会根据 format 参数中的格式字符串,将从标准输入设备中读取的数据转换为相应的数据类型。下面是一些常用的格式控制字符串:%d:整数(十进制)。%f:浮点数。%c:字符。%s:字符串。%p:指针。%x:整数(十六进制)。scanf() 函数的返回值是成功读取的参数数量。如果读取失败,返回值会是 EOF。scanf函数的作用是按照指定的格式从标准输入流读取数据。标准输入流就是指我们从键盘上输入的按键。比如我们一般输入2个整数的话,那么中间会使用空格进行间隔,这个就是scanf默认定义的格式。值得注意的是,scanf() 函数容易受到输入格式的干扰,比如输入错误的格式控制字符串或者输入的数据类型与格式控制字符串不匹配等,都会导致函数的异常行为,包括程序崩溃、死循环等问题。因此,在使用 scanf() 函数时,需要特别小心,并且在读取输入前,最好对用户输入的数据进行合法性检查。
2023-08-04 18:49:141

C语言中的scanf是什么意思

它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。
2023-08-04 18:49:429

scanf()函数是什么意思?

说直白点就是输入,比如:scanf("%d", x);就是输入int型的x变量
2023-08-04 18:50:354

关于scanf的用法

具体如下:1、记住一点,scanf认为遇到“非法输入”就结束。2、scanf("%2d%f",&a,&b);中第一个格式控制字符2d的意思是读取2位,作为一个整数输入到给对应的变量a的地址中。输入876,当然只读取前2位87。这是2的作用,后面输入对于2来说,相当于非法输入。3、对于%f,后面输入的是7 543.0,对于浮点型数据是不可能得到空格的,所以遇到空格,认为是非法输入,结束输入。所以b的值是6,即是6.000000。4、scanf函数是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。
2023-08-04 18:51:011

c语言中的scanf 函数的用法

#inclde<stdio.h> void main () { char s[80]; gets(s); printf("%s",s); }
2023-08-04 18:51:2611

scanf是什么意思

其实吧,来这里问,不如去百度百科搜这个函数。
2023-08-04 18:53:025

scanf函数的用法

功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF。其控制串由三类字符构成:1。格式化说明符; 2。空白符; 3。非空白符;(A) 格式化说明符格式字符 说明%a 读入一个浮点值(仅C99有效) %A 同上 %c 读入一个字符 %d 读入十进制整数 %i 读入十进制,八进制,十六进制整数 %o 读入八进制整数 %x 读入十六进制整数 %X 同上 %c 读入一个字符 %s 读入一个字符串 %f 读入一个浮点数 %F 同上 %e 同上 %E 同上 %g 同上 %G 同上 %p 读入一个指针 %u 读入一个无符号十进制整数 %n 至此已读入值的等价字符数 %[] 扫描字符集合 %% 读%符号
2023-08-04 18:53:195

C语言中的scanf是什么意思?

输入!
2023-08-04 18:53:464

scanf函数怎么使用?

简介  scanf函数,与printf函数一样,都被定义在stdio.h里,因此在使用scanf函数时要加上#include<stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。 [编辑本段]scanf函数的一般形式  scanf(格式控制,地址表列)  int scanf(char *format[,argument,...]);  “格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串首地址。  scanf()函数返回成功赋值的数据项数,出错时则返回EOF。  例:使用scanf函数输入数据。  #include<stdio.h>  void main()  {  int a,b,c;  printf("input a,b,c ");  scanf("%d%d%d",&a,&b,&c);  printf("a=%d,b=%d,c=%d",a,b,c);  } [编辑本段]格式字符说明  %a,%A 读入一个浮点值(仅C99有效)   %c 读入一个字符  %d 读入十进制整数  %i 读入十进制,八进制,十六进制整数  %o 读入八进制整数  %x,%X 读入十六进制整数  %c 读入一个字符  %s 读入一个字符串,遇空格、制表符或换行符结束。  %f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。  %p 读入一个指针  %u 读入一个无符号十进制整数  %n 至此已读入值的等价字符数  %[] 扫描字符集合  %% 读%符号    附加格式说明字符表修饰符说明   L/l 长度修饰符 输入"长"数据  h 长度修饰符 输入"短"数据  W 整型常数 指定输入数据所占宽度  * 表示本输入项在读入后不赋值给相应的变量 [编辑本段]scanf的返回值  scanf的返回值有后面的参数决定  scanf("%d%d", &a, &b);  如果a和b都被成功读入,那么scanf的返回值就是2  如果只有a被成功读入,返回值为1  如果a和b都未被成功读入,返回值为0  如果遇到错误或遇到end of file,返回值为EOF。  且返回值为int型. [编辑本段]使用scanf函数时应该注意的问题  1、sacnf()中的变量必须使用地址。   2、scanf()的格式控制串可以使用其它非空白字符,但在输入时必须输入这些字符。  3、在用"%c"输入时,空格和“转义字符”均作为有效字符。  问题一:scanf()函数不能正确接受有空格的字符串?如: I love you!  #include <stdio.h>  int main()  {  char str[80];  scanf("%s",str);  printf("%s",str);   return 0;  }  输入:I love you!  输出:scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。  ① 遇空格、“回车”、“跳格”键。  ② 遇宽度结束。  ③ 遇非法输入。  所以,上述程序并不能达到预期目的,scanf()扫描到"I"后面的空格就认为对str的赋值结束,并忽略后面的"love you!".这里要注意是"love you!"还在键盘缓冲区(关于这个问题,网上我所见的说法都是如此,但是,我经过调试发现,其实这时缓冲区字符串首尾指针已经相等了,也就是说缓冲区清空了,scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中)。我们改动一下上面的程序来验证一下:  #include <stdio.h>  int main()  {  char str[80];  char str1[80];  char str2[80];  scanf("%s",str);/*此处输入:I love you! */  printf("%s",str);  sleep(5);/*这里等待5秒,告诉你程序运行到什么地方*/  scanf("%s",str1);/*这两句无需你再输入,是对键盘盘缓冲区再扫描 */  scanf("%s",str2);/*这两句无需你再输入,是对键盘盘缓冲区再扫描 */  printf(" %s",str1);  printf(" %s",str2);  return 0;  }  输入:I love you!  输出:  I  love  you!  好了,原因知道了,那么scanf()函数能不能完成这个任务?回答是:能!别忘了scanf()函数还有一个 %[] 格式控制符(如果对%[]不了解的请查看本文的上篇),请看下面的程序:  #include "stdio.h"  int main()  {  char string[50];/*scanf("%s",string);不能接收空格符*/  scanf("%[^ ]",string);  printf("%s ",string);  return 0;  }  问题二:键盘缓冲区残余信息问题  #include <stdio.h>  int main()  {  int a;  char c; do  {  scanf("%d",&a);  scanf("%c",&c);  printf("a=%d c=%c ",a,c);/*printf("c=%d ",c);*/  }while(c!="N");  }   scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d ",c);将C用int表示出来,启用printf("c=%d ",c);这一句,看看scanf()函数赋给C到底是什么,结果是c=10 ,ASCII值为10是什么?换行即 .对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”( ),一个“换行"( ),在这里 被scanf()函数处理掉了(姑且这么认为吧^_^),而 被scanf()函数“错误”地赋给了c.解决办法:可以在两个scanf()函数之后加个fflush(stdin);,还有加getch() , getchar()也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。但是加fflush(stdin);不管什么情况都可行。  (  函数名: fflush   功 能: 清除一个流  用 法: int fflush(FILE *stream);  )  #include <stdio.h>  int main()  {  int a;  char c; do  {  scanf("%d",&a);  fflush(stdin);  scanf("%c",&c);  fflush(stdin);  printf("a=%d c=%c ",a,c); }while(c!="N");  }   这里再给一个用“空格符”来处理缓冲区残余信息的示例:运行出错的程序:  #include <stdio.h>  int main()  {  int i;  char j;  for(i = 0;i < 10;i++)  {  scanf("%c",&j);/*这里%前没有空格*/  }  }  使用了空格控制符后:  #include <stdio.h>  int main()  {  int i;  char j;  for(i = 0;i < 10;i++)  {  scanf(" %c",&j);/*注意这里%前有个空格*/  }  }   可以运行看看两个程序有什么不同。  问题三: 如何处理scanf()函数误输入造成程序死锁或出错?  #include <stdio.h>  int main()  {  int a,b,c; /*计算a+b*/  scanf("%d,%d",&a,&b);  c=a+b;  printf("%d+%d=%d",a,b,c);  }  如上程序,如果正确输入a,b的值,那么没什么问题,但是,你不能保证使用者每一次都能正确输入,一旦输入了错误的类型,你的程序不是死锁,就是得到一个错误的结果,呵呵,这可能所有人都遇到过的问题吧?解决方法:scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,如果scanf()函数全部正常读取,它就返回几。但这里还要注意另一个问题,如果输入了非法数据,键盘缓冲区就可能还个有残余信息问题。正确的例程:  #include <stdio.h>  int main()  {  int a,b,c; /*计算a+b*/  while(scanf("%d,%d",&a,&b)!=2)fflush(stdin);  c=a+b;  printf("%d+%d=%d",a,b,c);  }  补充: fflush(stdin)这个方法在GCC下不可用。(在VC6.0下可以)  以下是 C99 对 fflush 函数的定义:  int fflush(FILE *stream);  如果stream指向输出流或者更新流(update stream),并且这个更新流  最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入stream  指向的文件(如标准输出文件stdout)。否则,fflush函数的行为是不确定的。  fflush(NULL)清空所有输出流和上面提到的更新流。如果发生写错误,fflush  函数会给那些流打上错误标记,并且返回EOF,否则返回0。  由此可知,如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用  fflush(stdin) 是不正确的,至少是移植性不好的。  可采用如下方法:  void flush() /* 只适用于键盘缓冲区有残余信息的情况,若键盘缓冲区为空则不能使用 */  {  while (getchar() != " ") ;  }  #include <stdio.h>  int main()  {  int a,b,c; /*计算a+b*/  while(scanf("%d,%d",&a,&b)!=2) flush();  c=a+b;  printf("%d+%d=%d",a,b,c);  }
2023-08-04 18:54:211

C语言的 scanf("%d",&x) 是什么意思?

scanf函数的一般形式为:scanf(“格式控制字符串”,地址表列);地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。例如:&a,&b分别表示变量a和变量b的地址。这个地址就是编译系统在内存中给a,b变量分配的地址。在C语言中,使用了地址这个概念,这是与其它语言不同的。应该把变量的值和变量的地址这两个不同的概念区别开来。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。变量的地址和变量值的关系如下:在赋值表达式中给变量赋值,如:a=567则,a为变量名,567是变量的值,&a是变量a的地址。但在赋值号左边是变量名,不能写地址,而scanf函数在本质上也是给变量赋值,但要求写变量的地址,如&a。这两者在形式上是不同的。&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。【例】main(){inta,b,c;printf("inputa,b,c ");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);}在本例中,由于scanf函数本身不能显示提示串,故先用printf语句在屏幕上输出提示,请用户输入a、b、c的值。执行scanf语句,则退出TC屏幕进入用户屏幕等待用户输入。用户输入789后按下回车键,此时,系统又将返回TC屏幕。在scanf语句的格式串中由于没有非格式字符在“%d%d%d”之间作输入时的间隔,因此在输入时要用一个以上的空格或回车键作为每两个输入数之间的间隔。如:789或789
2023-08-04 18:54:325

c语言scanf中 %d%d和%d,%d 有什么区别?

scanf是格式输入第一种输入的时候用空格分隔第二种用半角逗号分隔上课认真听
2023-08-04 18:55:044

scanf("%c",&ch)什么意思

刚学C语言?scanf表示输入,“%c”表示输入数据的类型格式&表示取地址&ch表示输入数据后存到ch里面等于给ch赋值。这段代码的意思是从键盘输入一个字符存到ch里面你在前面一定定义了ch。
2023-08-04 18:55:132

c语言中, scanf函数是什么意思?

在程序运行之后从键盘录入
2023-08-04 18:55:212

C语言中scanf的%s是什么意思,%c和%s有什么区别。会的进来,谢谢.

一般当a是数组名时,用scanf("%s",a)来实现从键盘输入一个字符串(%s)给一个字符型数组a
2023-08-04 18:56:273

在C语言里,什么时候用scanf函数呢?

你要通过键盘输入数字字符时
2023-08-04 18:56:386

c语言中什么时候加scanf什么时候不用加?

要存储输入的值的时候用scanf。比如要把3存到变量a中scanf("%d",&a);对应的是要输出的时候用printf.printf("%d",a);
2023-08-04 18:57:012

C语言中scanf("%c%*c%c%*c%d",&a,&b,&c)

1.%c表示是一个字符型变量,对于ASCLL表。%d表示是一个整形变量,对于数字(有表示范围的)。当然还有许多其他类型的变量。它们的范围和表示方法以及存储方法等很多方面都不一样。2.scanf是一个C语言里面的输入语句,这样控制台就会等待你输入一些东西。它有它自己的输入规范。3.&是取地址符号。在这里面就是往a,b,c所在的地址放东西,就是赋值给a,b,c。4.a,b,c要提前定义。它们的类型最好要相当于它们在scanf里面对应的输入类型,比如a,b是%cchar字符型的,c是%dint整形型的。5.scanf("%c%*c%c%*c%d"),里面%*c是无意义的。它是要求你输入的时候输入%*c而已。例如:scanf("%d,%d,%d",&a,&b,&c);这样你在控制台输入的时候就要输入10,10,10才能准确赋值给a,b,c。(注意逗号)要不然直接输入101010会出现意想不到的错误。具体到你这个问题的话,输入要是A%*cA%*c10才能准确给a,b,c赋值
2023-08-04 18:57:101

c语言中多个scanf怎么输入

多个用空格分割输入;
2023-08-04 18:57:214

c语言 怎样用scanf输入数组变量?

/*假设变量数组都已正确定义好*/scanf("%d",&n);/*输入元素个数*/for(i=0;i<n;i++)scanf("%d",&a[i]);
2023-08-04 18:58:361

c语言 如何用scanf求两数之和

#include<stdio.h>void main(){int a, b;scanf("%d%d", &a, &b);printf("%d ", a + b);}
2023-08-04 18:58:463

C语言的scanf("%d",&x)是什么意思?

scanf("%d",&x);从输入设备接收一个整型变量,把他他赋给x,&是x地址.%d表示十进制整数.
2023-08-04 18:59:071

C语言中scanf函数的输入格式

按照25,13,,10这样的输入方式,实际上只是对x进行了赋值,值为25.而y和z会在x的地址处,分别向下偏移4个字节进行取值。这样就会造成了你上面的结果。你可以把x、y和z的地址打出来,试试看。intmain(intargc,char*argv[]){intx,y,z;scanf("%d%d%d",&x,&y,&z);printf("%d ",x+y+z);printf("%d ",x);printf("%d ",y);printf("%d ",z);printf("%d ",&x);printf("%d ",&y);printf("%d ",&z);return0;}希望可以帮到你。
2023-08-04 18:59:171

scanf函数可以输入单个字符吗

当然,#include<stdio.h>void main(){ int i,count;char a;scanf("%c",&a);printf("%c ",a);} 这就是的
2023-08-04 18:59:263

C语言中scanf("%d%*s%d",&a,&b);是什么意思

*是指向a的指针。&是a的内存地址。"%*s"根据以上推测,应该指向a的内存地址的指针。
2023-08-04 18:59:363

scanf 怎么读啊?

斯看f
2023-08-04 18:59:522

scanf函数怎么使用?

简介  scanf函数,与printf函数一样,都被定义在stdio.h里,因此在使用scanf函数时要加上#include。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。 [编辑本段]scanf函数的一般形式  scanf(格式控制,地址表列)x0dx0a  int scanf(char *format[,argument,...]);x0dx0a  “格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串首地址。x0dx0a  scanf()函数返回成功赋值的数据项数,出错时则返回EOF。x0dx0a  例:使用scanf函数输入数据。x0dx0a  #includex0dx0a  void main()x0dx0a  {x0dx0a  int a,b,c;x0dx0a  printf("input a,b,c ");x0dx0a  scanf("%d%d%d",&a,&b,&c);x0dx0a  printf("a=%d,b=%d,c=%d",a,b,c);x0dx0a  } [编辑本段]格式字符说明  %a,%A 读入一个浮点值(仅C99有效) x0dx0a  %c 读入一个字符x0dx0a  %d 读入十进制整数x0dx0a  %i 读入十进制,八进制,十六进制整数x0dx0a  %o 读入八进制整数x0dx0a  %x,%X 读入十六进制整数x0dx0a  %c 读入一个字符x0dx0a  %s 读入一个字符串,遇空格、制表符或换行符结束。x0dx0a  %f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。x0dx0a  %p 读入一个指针x0dx0a  %u 读入一个无符号十进制整数x0dx0a  %n 至此已读入值的等价字符数x0dx0a  %[] 扫描字符集合x0dx0a  %% 读%符号x0dx0a  x0dx0a  附加格式说明字符表修饰符说明 x0dx0a  L/l 长度修饰符 输入"长"数据x0dx0a  h 长度修饰符 输入"短"数据x0dx0a  W 整型常数 指定输入数据所占宽度x0dx0a  * 表示本输入项在读入后不赋值给相应的变量 [编辑本段]scanf的返回值  scanf的返回值有后面的参数决定x0dx0a  scanf("%d%d", &a, &b);x0dx0a  如果a和b都被成功读入,那么scanf的返回值就是2x0dx0a  如果只有a被成功读入,返回值为1x0dx0a  如果a和b都未被成功读入,返回值为0x0dx0a  如果遇到错误或遇到end of file,返回值为EOF。x0dx0a  且返回值为int型. [编辑本段]使用scanf函数时应该注意的问题  1、sacnf()中的变量必须使用地址。 x0dx0a  2、scanf()的格式控制串可以使用其它非空白字符,但在输入时必须输入这些字符。x0dx0a  3、在用"%c"输入时,空格和“转义字符”均作为有效字符。x0dx0a  问题一:scanf()函数不能正确接受有空格的字符串?如: I love you!x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  char str[80];x0dx0a  scanf("%s",str);x0dx0a  printf("%s",str); x0dx0a  return 0;x0dx0a  }x0dx0a  输入:I love you!x0dx0a  输出:scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。x0dx0a  ① 遇空格、“回车”、“跳格”键。x0dx0a  ② 遇宽度结束。x0dx0a  ③ 遇非法输入。x0dx0a  所以,上述程序并不能达到预期目的,scanf()扫描到"I"后面的空格就认为对str的赋值结束,并忽略后面的"love you!".这里要注意是"love you!"还在键盘缓冲区(关于这个问题,网上我所见的说法都是如此,但是,我经过调试发现,其实这时缓冲区字符串首尾指针已经相等了,也就是说缓冲区清空了,scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中)。我们改动一下上面的程序来验证一下:x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  char str[80];x0dx0a  char str1[80];x0dx0a  char str2[80];x0dx0a  scanf("%s",str);/*此处输入:I love you! */x0dx0a  printf("%s",str);x0dx0a  sleep(5);/*这里等待5秒,告诉你程序运行到什么地方*/x0dx0a  scanf("%s",str1);/*这两句无需你再输入,是对键盘盘缓冲区再扫描 */x0dx0a  scanf("%s",str2);/*这两句无需你再输入,是对键盘盘缓冲区再扫描 */x0dx0a  printf(" %s",str1);x0dx0a  printf(" %s",str2);x0dx0a  return 0;x0dx0a  }x0dx0a  输入:I love you!x0dx0a  输出:x0dx0a  Ix0dx0a  lovex0dx0a  you!x0dx0a  好了,原因知道了,那么scanf()函数能不能完成这个任务?回答是:能!别忘了scanf()函数还有一个 %[] 格式控制符(如果对%[]不了解的请查看本文的上篇),请看下面的程序:x0dx0a  #include "stdio.h"x0dx0a  int main()x0dx0a  {x0dx0a  char string[50];/*scanf("%s",string);不能接收空格符*/x0dx0a  scanf("%[^ ]",string);x0dx0a  printf("%s ",string);x0dx0a  return 0;x0dx0a  }x0dx0a  问题二:键盘缓冲区残余信息问题x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  int a;x0dx0a  char c; dox0dx0a  {x0dx0a  scanf("%d",&a);x0dx0a  scanf("%c",&c);x0dx0a  printf("a=%d c=%c ",a,c);/*printf("c=%d ",c);*/x0dx0a  }while(c!="N");x0dx0a  } x0dx0a  scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d ",c);将C用int表示出来,启用printf("c=%d ",c);这一句,看看scanf()函数赋给C到底是什么,结果是c=10 ,ASCII值为10是什么?换行即 .对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”( ),一个“换行"( ),在这里 被scanf()函数处理掉了(姑且这么认为吧^_^),而 被scanf()函数“错误”地赋给了c.解决办法:可以在两个scanf()函数之后加个fflush(stdin);,还有加getch() , getchar()也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。但是加fflush(stdin);不管什么情况都可行。x0dx0a  (x0dx0a  函数名: fflush x0dx0a  功 能: 清除一个流x0dx0a  用 法: int fflush(FILE *stream);x0dx0a  )x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  int a;x0dx0a  char c; dox0dx0a  {x0dx0a  scanf("%d",&a);x0dx0a  fflush(stdin);x0dx0a  scanf("%c",&c);x0dx0a  fflush(stdin);x0dx0a  printf("a=%d c=%c ",a,c); }while(c!="N");x0dx0a  } x0dx0a  这里再给一个用“空格符”来处理缓冲区残余信息的示例:运行出错的程序:x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  int i;x0dx0a  char j;x0dx0a  for(i = 0;i < 10;i++)x0dx0a  {x0dx0a  scanf("%c",&j);/*这里%前没有空格*/x0dx0a  }x0dx0a  }x0dx0a  使用了空格控制符后:x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  int i;x0dx0a  char j;x0dx0a  for(i = 0;i < 10;i++)x0dx0a  {x0dx0a  scanf(" %c",&j);/*注意这里%前有个空格*/x0dx0a  }x0dx0a  } x0dx0a  可以运行看看两个程序有什么不同。x0dx0a  问题三: 如何处理scanf()函数误输入造成程序死锁或出错?x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  int a,b,c; /*计算a+b*/x0dx0a  scanf("%d,%d",&a,&b);x0dx0a  c=a+b;x0dx0a  printf("%d+%d=%d",a,b,c);x0dx0a  }x0dx0a  如上程序,如果正确输入a,b的值,那么没什么问题,但是,你不能保证使用者每一次都能正确输入,一旦输入了错误的类型,你的程序不是死锁,就是得到一个错误的结果,呵呵,这可能所有人都遇到过的问题吧?解决方法:scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,如果scanf()函数全部正常读取,它就返回几。但这里还要注意另一个问题,如果输入了非法数据,键盘缓冲区就可能还个有残余信息问题。正确的例程:x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  int a,b,c; /*计算a+b*/x0dx0a  while(scanf("%d,%d",&a,&b)!=2)fflush(stdin);x0dx0a  c=a+b;x0dx0a  printf("%d+%d=%d",a,b,c);x0dx0a  }x0dx0a  补充: fflush(stdin)这个方法在GCC下不可用。(在VC6.0下可以)x0dx0a  以下是 C99 对 fflush 函数的定义:x0dx0a  int fflush(FILE *stream);x0dx0a  如果stream指向输出流或者更新流(update stream),并且这个更新流x0dx0a  最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入streamx0dx0a  指向的文件(如标准输出文件stdout)。否则,fflush函数的行为是不确定的。x0dx0a  fflush(NULL)清空所有输出流和上面提到的更新流。如果发生写错误,fflushx0dx0a  函数会给那些流打上错误标记,并且返回EOF,否则返回0。x0dx0a  由此可知,如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用x0dx0a  fflush(stdin) 是不正确的,至少是移植性不好的。x0dx0a  可采用如下方法:x0dx0a  void flush() /* 只适用于键盘缓冲区有残余信息的情况,若键盘缓冲区为空则不能使用 */x0dx0a  {x0dx0a  while (getchar() != " ") ;x0dx0a  }x0dx0a  #include x0dx0a  int main()x0dx0a  {x0dx0a  int a,b,c; /*计算a+b*/x0dx0a  while(scanf("%d,%d",&a,&b)!=2) flush();x0dx0a  c=a+b;x0dx0a  printf("%d+%d=%d",a,b,c);x0dx0a  }
2023-08-04 19:00:021

C中scanf是什么意思?

如:scanf("%d %*d %d",&a,&b);当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。%*c作用时读取输入流中数字后的一个字符,并丢弃,使得后面的输入函数不能读到那个字符跳过一个字符举个例子#include "stdio.h"int main(){int a, b; scanf("%d%*c%d", &a, &b); printf("%d %d ", a, b);return 0;}你输入1n2,那么scanf把1读取赋给变量a,如果跳过一个char(这里是 ‘n")接着读取2赋给变量b.
2023-08-04 19:00:123

c语言中,scanf(“%d”,&x);这一句是什么意思?

从键盘输入一个整数值赋给变量x
2023-08-04 19:00:224

scanf是什么意思?

scanf是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include 。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。扩展资料:scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。scanf("%d %d",&a,&b);函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a读取失败,返回值为0;如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。参考资料来源:百度百科-scanf
2023-08-04 19:00:551

scanf是什么意思

scanf:c语言的格式输入函数。scanf函数是C语言中最常用的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。函数原型:函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
2023-08-04 19:01:121

scanf是什么意思

scanf函数,与printf函数一样,都被定义在stdio.h里,因此在使用scanf函数时要加上#include。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。
2023-08-04 19:01:293

scanf什么意思

scanf:c语言的格式输入函数。scanf函数是C语言中最常用的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。函数原型:函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
2023-08-04 19:01:411

c程序中scanf是什么意思?

scanf是一个输入函数。例如int a;scanf("%d",&a);你在console输入:5那么a=5了
2023-08-04 19:02:072

关于scanf的用法

功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF。其控制串由三类字符构成:1。格式化说明符; 2。空白符; 3。非空白符;(A) 格式化说明符格式字符 说明%a 读入一个浮点值(仅C99有效) %A 同上 %c 读入一个字符 %d 读入十进制整数 %i 读入十进制,八进制,十六进制整数 %o 读入八进制整数 %x 读入十六进制整数 %X 同上 %c 读入一个字符 %s 读入一个字符串 %f 读入一个浮点数 %F 同上 %e 同上 %E 同上 %g 同上 %G 同上 %p 读入一个指针 %u 读入一个无符号十进制整数 %n 至此已读入值的等价字符数 %[] 扫描字符集合 %% 读%符号
2023-08-04 19:02:257

scanf是用来干什么的?

scanf 用于输入与printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。函数 scanf() 是从标准输入流stdio (标准输入设备,一般是键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。返回值scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。如:scanf("%d %d",&a,&b);如果a和b都被成功读入,那么scanf的返回值就是2如果只有a被成功读入,返回值为1如果a和b都未被成功读入,返回值为0如果遇到错误或遇到end of file,返回值为EOF。且返回值为int型.例:使用scanf函数输入数据。#include<stdio.h>int main(void){ int a,b,c; printf("输入a,b,c "); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d ",a,b,c); fflush(stdin); return 0;}
2023-08-04 19:03:141

scanf的作用是什么?

scanf 用于输入与printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。函数 scanf() 是从标准输入流stdio (标准输入设备,一般是键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。返回值scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。如:scanf("%d %d",&a,&b);如果a和b都被成功读入,那么scanf的返回值就是2如果只有a被成功读入,返回值为1如果a和b都未被成功读入,返回值为0如果遇到错误或遇到end of file,返回值为EOF。且返回值为int型.例:使用scanf函数输入数据。#include<stdio.h>int main(void){ int a,b,c; printf("输入a,b,c "); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d ",a,b,c); fflush(stdin); return 0;}
2023-08-04 19:03:211

scanf怎么用?

scanf 格式输入函数函数作用:按照变量在内存的地址将变量值存进去。一般格式:scanf(格式控制,地址表列)其中,格式控制:%d:以带符号的十进制形式输出整数%o:以八进制无符号形式输出整数%x:以十六进制无符号形式输出整数%u:以无符号十进制形式输出整数%c:以字符形式输出,只输出一个字符%s:输出字符串%f:以小数形式输出单,双精度数,隐含输出六位小数%e:以指数形式输出实数%g:选用%f或%e格式中输出宽度较短的一种格式,不输 出无意义的0在格式控制的字母前面可以用几种常见的格式符的修饰符,作用如下:L:用于长整型整数,可加在格式符d,o,x,u前面M(代表一个正整数):数据最小宽度N(代表一个正整数):对实数,表示输出n位小数; 对字符串,表示截取的字符个数地址列表:是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址举例:用scanf函数输入数据。#include<stdio.h>void main(){int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d,%d,%d ”,a,b,c);}运行情况:3 4 5 (回车) (输入a,b,c的值)3,4,5 (输出a,b,c的值)使用scanf函数时应注意的问题 :(1)scanf函数中的“格式控制”后面应当是变量地址,而不应 是变量名。 (2) 如果在“格式控制”字符串中除了格式说明以外还有其他字符, 则在输入数据时在对应位置应输入与这些字符相同的字符。 (3) 在用“%c”格式输入字符时,空格字符和“转义字符”都作为 有效字符输入 (4) 在输入数据时,遇以下情况时认为该数据结束。 ① 遇空格,或按“回车”或“跳格”(Tab)键; ② 按指定的宽度结束,如“%3d”,只取3列; ③ 遇非法输入。
2023-08-04 19:03:556

scanf函数的作用是什么?

scanf 用于输入与printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。函数 scanf() 是从标准输入流stdio (标准输入设备,一般是键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。返回值scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。如:scanf("%d %d",&a,&b);如果a和b都被成功读入,那么scanf的返回值就是2如果只有a被成功读入,返回值为1如果a和b都未被成功读入,返回值为0如果遇到错误或遇到end of file,返回值为EOF。且返回值为int型.例:使用scanf函数输入数据。#include<stdio.h>int main(void){ int a,b,c; printf("输入a,b,c "); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d ",a,b,c); fflush(stdin); return 0;}
2023-08-04 19:05:322

scanf在c语言中的作用

scanf是c语言中的标准库函数,主要作用是接收用户输入的数据。scanf是C语言中的输入函数,可以从键盘获得用户输入,和printf输出功能正好相反。scanf的输入格式是多种多样的,使用时需根据情况选择,最常用的是十进制整数型输入%d。scanf的使用和输入格式scanf("%d", &c); //输入一个整数并赋值给c。scanf("%d", &d); //输入一个整数并赋值给d。scanf("%d,%d", &c, &d); //输入两个整数并分别赋值给c、d。scanf("%d %d", &c, &d); //输入两个整数并分别赋值给c、d。前两个scanf:输入一个整数,按下回车键,scanf会读取键盘输入,并把数据赋值给c(或d);后两个scanf:都是一样功能,输入格式不同,对于scanf(),输入数据的格式要和控制字符串的格式保持一致。比如:输入15 24回车,输入15,24回车,同样的把值分别赋给c和d。
2023-08-04 19:05:531

scanf是什么意思?为什么要用这个输入函数?

scanf是c语言中的标准库函数,主要作用是接收用户输入的数据。scanf是C语言中的输入函数,可以从键盘获得用户输入,和printf输出功能正好相反。scanf的输入格式是多种多样的,使用时需根据情况选择,最常用的是十进制整数型输入%d。scanf的使用和输入格式scanf("%d", &c); //输入一个整数并赋值给c。scanf("%d", &d); //输入一个整数并赋值给d。scanf("%d,%d", &c, &d); //输入两个整数并分别赋值给c、d。scanf("%d %d", &c, &d); //输入两个整数并分别赋值给c、d。前两个scanf:输入一个整数,按下回车键,scanf会读取键盘输入,并把数据赋值给c(或d);后两个scanf:都是一样功能,输入格式不同,对于scanf(),输入数据的格式要和控制字符串的格式保持一致。比如:输入15 24回车,输入15,24回车,同样的把值分别赋给c和d。
2023-08-04 19:06:121

scanf输入格式是什么?

scanf 格式输入函数函数作用:按照变量在内存的地址将变量值存进去。一般格式:scanf(格式控制,地址表列)其中,格式控制:%d:以带符号的十进制形式输出整数%o:以八进制无符号形式输出整数%x:以十六进制无符号形式输出整数%u:以无符号十进制形式输出整数%c:以字符形式输出,只输出一个字符%s:输出字符串%f:以小数形式输出单,双精度数,隐含输出六位小数%e:以指数形式输出实数%g:选用%f或%e格式中输出宽度较短的一种格式,不输 出无意义的0在格式控制的字母前面可以用几种常见的格式符的修饰符,作用如下:L:用于长整型整数,可加在格式符d,o,x,u前面M(代表一个正整数):数据最小宽度N(代表一个正整数):对实数,表示输出n位小数; 对字符串,表示截取的字符个数地址列表:是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址举例:用scanf函数输入数据。#include<stdio.h>void main(){int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d,%d,%d ”,a,b,c);}运行情况:3 4 5 (回车) (输入a,b,c的值)3,4,5 (输出a,b,c的值)使用scanf函数时应注意的问题 :(1)scanf函数中的“格式控制”后面应当是变量地址,而不应 是变量名。 (2) 如果在“格式控制”字符串中除了格式说明以外还有其他字符, 则在输入数据时在对应位置应输入与这些字符相同的字符。 (3) 在用“%c”格式输入字符时,空格字符和“转义字符”都作为 有效字符输入 (4) 在输入数据时,遇以下情况时认为该数据结束。 ① 遇空格,或按“回车”或“跳格”(Tab)键; ② 按指定的宽度结束,如“%3d”,只取3列; ③ 遇非法输入。
2023-08-04 19:06:261

scanf()是什么?

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。函数返回值为int型。注意问题:ANSI C标准向scanf()增加了一种新特性,称为扫描集(scanset)。扫描集定义一个字符集合,可由scanf()读入其中允许的字符并赋给对应字符数组。扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。使用扫描集时,scanf()连续吃进集合中的字符并放入对应的字符数组,直到发现不在集合中的字符为止(即扫描集仅读匹配的字符)。返回时,数组中放置以null结尾、由读入字符组成的字符串。
2023-08-04 19:06:331

scanf 怎么用

scanf格式输入函数函数作用:按照变量在内存的地址将变量值存进去。一般格式:scanf(格式控制,地址表列)其中,格式控制:%d:以带符号的十进制形式输出整数%o:以八进制无符号形式输出整数%x:以十六进制无符号形式输出整数%u:以无符号十进制形式输出整数%c:以字符形式输出,只输出一个字符%s:输出字符串%f:以小数形式输出单,双精度数,隐含输出六位小数%e:以指数形式输出实数%g:选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0在格式控制的字母前面可以用几种常见的格式符的修饰符,作用如下:l:用于长整型整数,可加在格式符d,o,x,u前面m(代表一个正整数):数据最小宽度n(代表一个正整数):对实数,表示输出n位小数;对字符串,表示截取的字符个数地址列表:是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址举例:用scanf函数输入数据。#includevoidmain(){inta,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d,%d,%d ”,a,b,c);}运行情况:345(回车)(输入a,b,c的值)3,4,5(输出a,b,c的值)使用scanf函数时应注意的问题:(1)scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。(2)如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。(3)在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入(4)在输入数据时,遇以下情况时认为该数据结束。①遇空格,或按“回车”或“跳格”(tab)键;②按指定的宽度结束,如“%3d”,只取3列;③遇非法输入。
2023-08-04 19:06:461

c语言中什么时候要用scanf

代码运行到scanf语句时,就等待用户输入,以便获取输入信息
2023-08-04 19:06:574

c语言中scanf有什么作用?

  scanf与printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。  scanf函数原型:  int scanf( const char *format, ... );  scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。  其调用格式为: scanf("<格式化字符串>",<地址表>);  函数 scanf() 是从标准输入流 stdin 中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式。  scanf的返回值:  scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。  如:  scanf("%d,%d", &a, &b);  如果a和b都被成功读入,那么scanf的返回值就是2  如果只有a被成功读入,返回值为1  如果a和b都未被成功读入,返回值为0  如果遇到错误或遇到end of file,返回值为EOF。  且返回值为int型.  例:使用scanf函数输入数据。  #include<stdio.h>  int main()  {  int a,b,c;  printf("输入 a, b, c ");  scanf("%d,%d,%d", &a, &b, &c);  printf("a = %d b = %d c = %d ", a, b, c);  fflush(stdin);  return 0;  }  注意上面的scanf("%d,%d,%d",&a,&b,&c);中%d,%d,%d之间如果有逗号,在输入数据时也要加逗号,如果去掉逗号,输入时就不用逗号,而用空格、tab键或回车键将各个数据隔开
2023-08-04 19:07:088

scanf函数里的&是什么意思?

scanf 的意思是把输入的值给送到地址,因此,如果参数已经是地址了,那么不需要 &,否则 需要用&取一下地址scanf 格式输入函数函数作用:按照变量在内存的地址将变量值存进去。一般格式:scanf(格式控制,地址表列)其中,格式控制:%d:以带符号的十进制形式输出整数%o:以八进制无符号形式输出整数%x:以十六进制无符号形式输出整数%u:以无符号十进制形式输出整数%c:以字符形式输出,只输出一个字符%s:输出字符串%f:以小数形式输出单,双精度数,隐含输出六位小数%e:以指数形式输出实数%g:选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0在格式控制的字母前面可以用几种常见的格式符的修饰符,作用如下:L:用于长整型整数,可加在格式符d,o,x,u前面M(代表一个正整数):数据最小宽度N(代表一个正整数):对实数,表示输出n位小数;对字符串,表示截取的字符个数地址列表:是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址举例:用scanf函数输入数据。#include<stdio.h>void main(){int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d,%d,%d ”,a,b,c);}运行情况:3 4 5 (回车) (输入a,b,c的值)3,4,5 (输出a,b,c的值)使用scanf函数时应注意的问题 :(1)scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。 (2) 如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。 (3) 在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入 (4) 在输入数据时,遇以下情况时认为该数据结束。① 遇空格,或按“回车”或“跳格”(Tab)键;② 按指定的宽度结束,如“%3d”,只取3列;③ 遇非法输入。
2023-08-04 19:07:442

scanf是干什么的?

scanf是c语言中的标准库函数,主要作用是接收用户输入的数据。scanf是C语言中的输入函数,可以从键盘获得用户输入,和printf输出功能正好相反。scanf的输入格式是多种多样的,使用时需根据情况选择,最常用的是十进制整数型输入%d。scanf的使用和输入格式scanf("%d", &c); //输入一个整数并赋值给c。scanf("%d", &d); //输入一个整数并赋值给d。scanf("%d,%d", &c, &d); //输入两个整数并分别赋值给c、d。scanf("%d %d", &c, &d); //输入两个整数并分别赋值给c、d。前两个scanf:输入一个整数,按下回车键,scanf会读取键盘输入,并把数据赋值给c(或d);后两个scanf:都是一样功能,输入格式不同,对于scanf(),输入数据的格式要和控制字符串的格式保持一致。比如:输入15 24回车,输入15,24回车,同样的把值分别赋给c和d。
2023-08-04 19:08:141