c语言中的scanf 函数的用法

为什么下面的函数输出的值只是空格前面的字符呢???急求答案!!!#inclde<stdio.h>voidmain(){chars[80];scanf("%s",s);pr... 为什么下面的函数 输出的值只是空格前面的字符呢???急求答案!!!
#inclde<stdio.h>
void main ()
{ char s[80];
scanf("%s",s);
printf("%s",s);
}
展开
 我来答
次次次蛋黄米亚
高粉答主

推荐于2019-08-31 · 说的都是干货,快来关注
知道小有建树答主
回答量:7778
采纳率:100%
帮助的人:218万
展开全部

1、用法:int scanf(char *format[,argument,...]);

scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。

2、其调用格式为:      

scanf("<格式化字符串>",<地址表>);

scanf()函数返回成功赋值的数据项数,出错时则返回EOF。

3、scanf()函数的控制串的使用:

#include "stdio.h" 

int main(void) 

int a,b,c; 

scanf("%d%d%d",&a,&b,&c); 

printf("%d,%d,%d/n",a,b,c);

return 0; 

}  

扩展资料:

scanf 函数使用中的注意事项:

(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。

(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。

(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。

(4) scanf函数中没有类似printf的精度控制。

如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。

参考资料来源:百度百科—scanf函数

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星座dayday
推荐于2019-10-25 · TA获得超过689个赞
知道答主
回答量:91
采纳率:0%
帮助的人:4.2万
展开全部

scanf 后面的参数,就是要 写变量的 地址。所以 int a,b; 就要 用 &a,&b 形式来调用 scanf.可是,如果是字符串,char s[10]; scanf("%s",s); 参数 s 就 不要 &. 因为 s 就是 地址形式。scanf("%d,%d", &a, &b); 还有,你这句输入时,a b 数据之间还要加逗号。例如 12,34
因为格式里有逗号。

扩展资料:

注意问题

(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。

(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。

(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。

(4) scanf函数中没有类似printf的精度控制。

如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。

(5) scanf中要求给出变量地址,如给出变量名则会出错

如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。

(6) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。

C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。

(7) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

参考资料:百度百科—scanf函数

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小肥肥2
高粉答主

推荐于2019-09-16 · 醉心答题,欢迎关注
知道答主
回答量:50
采纳率:100%
帮助的人:1万
展开全部

首先需要#include int scanf( const char *format, ... );scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。 

第一个参数format为一个常量字符串,这个字符串中如果包含‘%’符号则使用后续参数进行匹配
如:scanf("%d%d", &a, &b)。

扩展资料:

1、格式指令说明

format指向的字符串包含的格式指令由以下字符序列组成:*,表示读入的数据将被舍弃。带有*的格式指令不对应可变参数列表中的任何数据。

2、域宽

以一个非零的十进制整数形式出现。表示该格式指令最多读入的字符数。

3、格式说明符

c 读入域宽指定的数目个字符组成的字符序列(后面不会加上空字节),如果省略宽度则读入单字符。如%c或%1c读入单字符,%2c读入两个字符(后面不会加上空字节),以此类推。

s读入一个的字符序列,后面会加上空字节。

d,u读入可选有符号(可选有符号表示输入时可以带符号也可以不带符号,不带符号则视为非负)十进制整数。输入格式应该像strtol函数的base实参为10调用时识别的字符序列一样。

i 读入可选有符号整数。输入格式应该像strtol函数的base实参为0调用时识别的字符序列一样。

a,e,f,g,A,E,F,G 读入可选有符号浮点数,输入格式应该像strtod函数识别的字符序列一样。

o读入可选有符号八进制整数。输入格式应该像strtoul函数的base实参为8调用时识别的字符序列一样。

x,X读入可选有符号十六进制整数。输入格式应该像strtoul函数的base实参为16调用时识别的字符序列一样。

p读入一个指针值。读入的字符序列应该与fprintf的%p产生的字符序列形式相同。

n不读入任何字符,而是把到该位置已读入的字符数存储到与之对应的int*指向的位置。本转换说明符如果带有*或者带有域宽信息(如:%*n或%3n等),则后果是未定义的。

参考资料来源:百度百科--C语言

参考资料来源:百度百科--scanf

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
韧劲9
推荐于2017-09-29 · TA获得超过9224个赞
知道小有建树答主
回答量:1638
采纳率:92%
帮助的人:355万
展开全部
功 能: 执行格式化输入
用 法: 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 至此已读入值的等价字符数
%[] 扫描字符集合
%% 读%符号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiangjun1987
推荐于2017-10-08 · TA获得超过8654个赞
知道小有建树答主
回答量:1860
采纳率:0%
帮助的人:678万
展开全部
scanf读到空格时结束!

由于scanf函数在接收数据时,是通过空格来区分数据项的.
如果你:
char c[20];
scanf("%s",c);
输入:this is a c program!
它接收到this后遇到空格,认为对应%s的数据项已结束,后面的(包含空格)不能输入。
你想输入带空格的字符串,只有使用gets(c);
但遗憾的是用gets()函数一次只能输入一个字符串。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式