当前位置: 游戏平台 > 互联网科技 > 正文

c语言中读入带空格的字符串

时间:2019-11-14 03:04来源:互联网科技
c语言中读入带空格的字符串 函数名: scanf  功 能: 执行格式化输入  用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从正规输入设备(键盘)读取输入的音信

c语言中读入带空格的字符串

函数名: scanf 
功 能: 执行格式化输入 
用 法: int scanf(char *format[,argument,...]);

scanf()函数是通用终端格式化输入函数,它从正规输入设备(键盘) 读取输入的音信。能够读入任何固有品种的多寡并活动把数值转变到相符的机内格式。

问题:

其调用格式为:      scanf("<格式化字符串>",<地址表>);

scanf(%s, a);

scanf()函数重临成功赋值的数目项数,出错开上下班时间则赶回EOF。

运营输入hello world 回车 则输入到a的只是空格此前的有些,怎么样把空格之后的有的也出口?

1.scanf``( ``%[^ ]``, str );

#include 
int main(){
    char str[50];
    scanf( %[^
], str );
    printf( %s
, str );
    return 0;
}

more: scanf中的正则表明式
1、定制本身的扫描集 %[abc]、%[a-z]、%[^abc]、%[^a-z],比isdigit()、is阿尔法()越来越灵活。[]内是合作的字符,^表示求反集。
int i;
char str[80], str2[80];
// scanf(%d%[abc]%s, &i, str, str2);
// printf(%d %s %s ,i,str,str2);
// scanf(%[a-zA-Z0-9], str);
// scanf(%[^abce], str);
scanf(%[^a-z], str);
printf(%s ,str);
2、读入三个地址并呈现内部存款和储蓄器地址的剧情
int main(void){
char ch='c';
printf(%p , &ch); // print the address of ch.
char *p;
cout< scanf(%p, &p); //input the address displayed above
printf(Value at location %p is %c ,p,*p);
return 0;
}
3、屏弃不想要的空白符:scanf(%c %c);
4、调节字符串中的非空白符:招致scanf()读入并屏弃输入流中的八个精雕细琢字符。%d,%d;
5、压缩输入:在格式码前增进*,则客商就足以告知scanf()读这些域,但不把它付与任何变量。
scanf(%c%*c, &ch); 使用此措施能够在字符管理时吃掉多余的回车。

2.scanf()

int t[999];
int sum=0;
while(scanf(%c,&t[sum++])!=EOF);

3.gets() gets()

#include   
//char *fgets( char *str, int num, FILE *stream ); 
int main(){
    char buffer[10]; 
    //fgets(buffer,10,stdin); //带有回车符
    gets(buffer);    //没有回车符

    printf(%s,buffer); 
    return 0;
}

more: gets() 不检查字符串体量,有希望越界写多少,客户可不确定给您按套路出牌,可能输入长达300字节以致2k字节的字符串,那样的话很凶险
纵然strlen,strcyp等等那一个函数因为追求高效能也不会检查指针是不是为空,指针是或不是可写,然而那几个函数是C程序猿来操作的,C程序猿有科学生运动用函数的素质。 但是gets() 是客商来输入,客商并不知道字符串上限,何况即使知道,也不必然有素质去按规定选用,要多多在乎
用fgets(str,80,stdin);就不危急了,fgets相比较安全 

难题: scanf(%s, a); 运营输入hello world 回车 则输入到a的只是空格早前...

其调节串由三类字符构成:

 

1。格式化表达符; 
2。空白符; 
3。非空白符 ;

(A卡塔 尔(英语:State of Qatar)                格式化表达符

格式字符           表明

%a                 读入三个浮点值(仅C99有效) 
%A                 同上
%c                 读入一个字符
%d                 读入十进制整数
%i                 读入十进制,八进制,十一进制整数
%o                 读入八进制整数
%x                 读入十五进制整数
%X                 同上
%c                 读入贰个字符
%s                 读入叁个

%f                 读入几个浮点数
%F                 同上
%e                 同上
%E                 同上
%g                 同上
%G                 同上
%p                 读入三个指针
%u                 读入三个无符号十进制整数
%n                 至此已读入值的等价字符数
%[]                扫描字符集合
%%                 读%符号
  %*                钦定项指标数目但不保留

比如:

百分号(%)与格式符之间的星号(*)表示读内定项指标数量但不保留。由此,
scanf( "%d %*c %d", &x, &y ); 
对 10/20 的读入操作中,10 归入变量 x,20 放入 y。       

 

       
叠合格式表明字符表

修饰符                       说明

L/l 长度修饰符               输入"长"数据
h 长度修饰符                 输入"短"数据
W 整型常数                   钦命输入数据所占宽度
* 星号                       空读叁个数据 
hh,ll同上h,l但仅对C99有效。

(B卡塔 尔(阿拉伯语:قطر‎         空白字符

空白字符会使scanf()函数在读操作中略去输入中的三个或三个空白字符,空白符可以是space,tab,newline等等,直到第叁个非空白符出现了断。

(C卡塔尔        非空白字符

一个非空白字符会使scanf()函数在读入时剔除掉与这些非空白字符雷同的字符。但在输入时必需输入这么些字符。不然就能够出错 。

注:scanf()调整串知识就介绍到那边(应该相比完善了^_^),如有脱漏后一次补上。下边将结合实际例程,后生可畏后生可畏演说.

三、      scanf()函数的垄断串的使用

例1.

#include "stdio.h" 
int main(void) 

int a,b,c; 

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

return 0;
}  

运转时按如下方式输入七个值:

3□4□5 ↙(输入a,b,c的值)

3,4,5 (printf输出的a,b,c的值)

   (1卡塔尔 &a、&b、&c中的&是地址运算符,分别取得那四个变量的内部存储器地址。
   (2卡塔 尔(阿拉伯语:قطر‎"%d%d%d"是按十进值格式输入三个数值。输入时,在四个数据里面能够用叁个或八个空格、tab键、回车键分隔。
      以下是合法输入形式: 
      ① 3□□4□□□□5↙
      ② 3↙
         4□5↙
      ③ 3(tab键)4↙
         5↙

例2.

#include "stdio.h" 
int main(void) 

int a,b,c;

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

return 0;
}  

运作时按如下格局输入几个值:

3,4,5 ↙(输入a,b,c的值)

或者

3,□4,□5 ↙(输入a,b,c的值)

3,□□□4,□5 ↙(输入a,b,c的值)
......
都以官方的,不过","一定要跟在数字背后,如:
3□,4,□5 ↙就私行了,程序出错。(消除形式与原因后边讲卡塔尔国

再如:

1、sacnf()中的变量必需使用地方。

         int a, b;
scanf("%d%d",a,b); //错误
scanf("%d%d",&a,&b);

2、scanf()的格式调整串能够采纳任何非空白字符,但在输入时必须输入这一个字符。

例:
scanf("%d,%d",&a,&b); 
输入: 3,4 ↙(逗号与"%d,%d"中的逗号对应卡塔 尔(英语:State of Qatar) 
scanf("a=%d,b=%d",&a,&b); 
输入: a=3,b=4 ↙("a=","b=",逗号与"%d,%d"中的"a=","b="及逗号对应卡塔尔

3、在用"%c"输入时,空格和“转义字符”均作为有效字符。

例:
scanf("%c%c%c",&c1,&c2,&c3); 
输入:a□b□c↙ 
结果:a→c1,□→c2,b→c3 (其他被丢掉)

scanf()函数接纳输入数据时,遇以下景况截至叁个数目标输入:(不是实现该scanf函数,scanf函数仅在每多个数据域均有数据,并按回车的前面得了卡塔尔。
        ① 遇空格、“回车”、“跳格”键。
        ② 遇宽度截止。
        ③ 遇非法输入。

难题二:scanf()函数不可能正确选拔有空格的字符串?如: I love you!

#include <stdio.h>
int main()
{
    char str[80];
    
    scanf("%s",str);
    printf("%s",str);

    return 0;
}

输入:I live you!
输出:I

       scanf()函数选取输入数据时,遇以下境况结束四个数量的输入:(不是终结该scanf函数,scanf函数仅在每一个数据域均有多少,并按回车的前边得了卡塔尔。
        ① 遇空格、“回车”、“跳格”键。
        ② 遇宽度甘休。
        ③ 遇违规输入。

编辑:互联网科技 本文来源:c语言中读入带空格的字符串

关键词: