首 页 行业热点 新车 试驾评测 养车用车 车型库

c语言中的scanf 函数的用法

发布网友

我来回答

15个回答

懂视网

产品型号:ASUS S340MC

系统版本:Windows 10

scanf使用总共需要4步操作,具体的操作步骤如下:

1、首先写上c语言文件的开头,然后写上main函数。

2、接着定义一个变量price,使用printf输出一个提示。

3、再使用scanf,第一个参数是输入参数的类型,这里使用%d,后面将这个输入的值赋值给price。

4、最后编译运行这个程序。

总结

1、首先写上c语言文件的开头,然后写上main函数。

2、接着定义一个变量price,使用printf输出一个提示。

3、再使用scanf,第一个参数是输入参数的类型,这里使用%d,后面将这个输入的值赋值给price。

4、最后编译运行这个程序。

热心网友

scanf 函数最主要的用法是:

scanf("输入控制符", 输入参数);

功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。

用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。

如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。

扩展资料:

使用scanf()函数需要注意的问题:

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

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

3.scanf函数中没有类似printf的精度控制。

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

4.scanf中要求给出变量地址,如给出变量名则会出错

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

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

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

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

参考资料:

百度百科-scanf()函数

百度百科-gets()函数

热心网友

1、空白符问题

#include<stdio.h>

main()

{   

int a;

printf("input the data ");

scanf("%d ",&a);//这里多了一个回车符

printf("%d",a);

return 0;

}

2、回车符也占位。

#include <stdio.h>

main()

{

int n = 5;

char c[n];

for(int i = 0; i < n; i++)

c[i] = scanf("%c",&c[i]); 

printf(c);

return 0;

}

3、scanf()函数的参数输入类型不匹配问题

#include<stdio.h>

main()

{

int a=123;

char c='t';

printf("input ");

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

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

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

printf("%d %c ",a,c);

return 0;

}

扩展资料:

scanf函数用%s读取一个字符串时,其实它只能读取一个单词,因为遇到空格时,它会认为输入已结束。因此一般使用fgets来读取一个字符串。如果想用scanf函数读取带有空格的字符串时,需要使用参数%[ ]来完成,它的意思是读入一个字符集合。

[ ]是个集合的标志,%[ ]特指读入此集合所限定的那些字符,比如%[A-Z]是输入大写字母,一旦遇到不在此集合的字符便停止。如果集合的第一个字符是“^”,这说明读取不在"^"后面集合的字符,既遇到"^"后面集合的字符便停止(这就是scanf函数里的正则表达式应用)。

热心网友

输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&。

scanf("%s",s);改为scanf("%s",&s);

scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);

格式控制字符串包含:格式控制说明,普通字符。

1、格式控制字符串表示输入的格式,(int型用%d,float用%f,double型用%lf)

2、普通字符:在输出数据的时候,按照原样输出的字符,如:"fahr=%d,celsius=%d\n"中的fahr=,celsius=。

3、输入的参数是变量的地址,所以要在变量前面加&。

扩展资料

调用scanf()函数输入数据,变量名x前面要加&,%lf中的l是long的首字母,scanf函数的输入参数必须和格式控制字符串中的格式控制说明相对应,并且它们的类型,个数和位置要一一对应。

如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。

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

热心网友

输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&。

scanf("%s",s);改为scanf("%s",&s);

scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);

格式控制字符串包含:格式控制说明,普通字符。

1、格式控制字符串表示输入的格式,(int型用%d,float用%f,double型用%lf)

2、普通字符:在输出数据的时候,按照原样输出的字符,如:"fahr=%d,celsius=%d\n"中的fahr=,celsius=。

3、输入的参数是变量的地址,所以要在变量前面加&。

扩展资料

“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。这句话同样对 scanf 有效,即“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”一定要一一对应。比如:

# include <stdio.h>

int main(void)

{

char ch;

int i;

scanf("%c%d", &ch);

printf("ch = %c, i = %d\n", ch, i);

return 0;

}

参考资料:百度百科 - scanf

热心网友

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函数

热心网友

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函数

热心网友

首先需要#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

热心网友

scanf读到空格时结束!

由于scanf函数在接收数据时,是通过空格来区分数据项的.
如果你:
char c[20];
scanf("%s",c);
输入:this is a c program!
它接收到this后遇到空格,认为对应%s的数据项已结束,后面的(包含空格)不能输入。
你想输入带空格的字符串,只有使用gets(c);
但遗憾的是用gets()函数一次只能输入一个字符串。

热心网友

功 能: 执行格式化输入
用 法: 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 至此已读入值的等价字符数
%[] 扫描字符集合
%% 读%符号

热心网友

同学,您犯了一个很严重的错误。
我先给你正确答案,然后解释。
#inclde<stdio.h>
void main ()
{
char s[80];
scanf("%s",&s);
printf("%s",s);
}
可能你也看出来了,你的问题和答案的差距就在scanf里的&符号上。
原因是用scanf进行输入时,你必须在你写了占位符之后要加上&符号以表示您输入的值赋给S这个字符变量。它表示你的变量s的地址。
而输出printf则不用。

热心网友


能:
执行格式化输入

法:
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
至此已读入值的等价字符数
%[]
扫描字符集合
%%
读%符号

热心网友

scanf 输入参数时,参数之间用空格分开
scanf("%s %s",s1,s2)就可以得到2个字符串了

热心网友

scanf读到空格时结束

如果想输入空格,可将要输入的字符串加引号

热心网友

#inclde<stdio.h>
void main ()
{ char s[80];
gets(s);
printf("%s",s);
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com