字符串输⼊与输出和常⽤函数
⼀、如何输⼊输出字符串
1.scanf()函数
scanf()函数⽤%s读取字符串。但是从空格读⼊到空格结束,碰到缓冲区⾥⾯的空字符(空格,tab,回车,换⾏就会截断并添加\0)
。因此,scanf()读取的字符串中不会包含空格,读取的更像是单词。
例如:
char a[10],b[10];
scanf("%s %s",&a,&b);
//输⼊what is
printf("%s",a);
//输出what
所以⽆法输⼊带空格的⼀整个英语句⼦。
gets()函数读取⼀整⾏包括空格,直到换⾏符,保留换⾏字符前⾯的全部字符,并在最后添加⼀个’\0’之成为字符串。
例如:
char a[10];
gets(a);
puts(a);
参数:
仅有⼀个参数,表⽰输⼊字符串的⾸地址
注意事项:
gets()函数⽤于读取整⾏数据(不包括末尾的换⾏符’\n’),但是,gets()函数有⼀个问题。输⼊的时候⼤⼩可能会超出这个限制,造成缓冲区溢出,因此它是不安全的。
C11标准中已经废除了该函数,但为了兼容以前的代码,有些编译器还是提供了⽀持。因此,可使⽤fgets()和gets_s()函数替代gets()函数。
3.fgets()函数
fgets()函数有三个参数,分别是起始地址,字符串⼤⼩,输⼊⽅式。
例如:
char str[20];
fgets(str,20,stdin);
参数:
第⼀个参数表⽰其实地址
第⼆个参数表⽰读取多少个字符,如果是n则读⼊n-1个字符,或者遇到第⼀个换⾏符为⽌。但是,该
换⾏符也会存储在字符串中,不会被丢弃。
第三个参数stdin,表⽰标准输⼊,从键盘输⼊
对于多余的字符将会保留在缓冲区中,作为下⼀次的输⼊。
返回值
fgets()函数返回指向char的指针,返回的地址与第⼀个参数地址相同。
C11新增gets_s()函数,该函数与fgets()函数类似,⽤参数限制读⼊的字符数。
gets_s()与fgets的区别:
fgets()函数不同的是,gets_s()函数只从标准输⼊中读取数据,因此不需要第3个参数,且读取到换⾏符时会直接丢弃⽽不是储,gets_s()函数与gets()更像。
如果gets_s()函数读到最⼤字符数仍然没有读到换⾏符,则会把⽬标数组中的⾸字符改为空字符,读取并丢弃随后的输⼊,返回空指针,这就需要编写特殊的处理函数。这种情况下,该函数没有fgets()函
数⽅便。
5.cin 和 >>
当 cin 读取数据时,它会传递并忽略任何前导⽩⾊空格字符(空格、制表符或换⾏符)。⼀旦它接触到第⼀个⾮空格字符即开始阅读,当它读取到下⼀个空⽩字符时,它将停⽌读取。
fgets和fgetc的区别例如:
cin >> namel;
可以输⼊ “Mark” 或 “Twain”,但不能输⼊ “Mark Twain”,因为 cin 不能输⼊包含嵌⼊空格的字符串。
此函数可读取整⾏,包括前导和嵌⼊的空格,并将其存储在字符串对象中。
例如:
string name;
getline(cin, name);
输出
puts()函数
字符串地址作为参数,在遇到空字符串时则停⽌输出。该函数显⽰字符串时会⾃动在末尾添加⼀个换⾏符。
fputs()函数
上⽂中也使⽤了fputs()函数,该函数第2个参数指明要写⼊的⽂件,如果要打印在屏幕上,把第2个参数设置为stdout即可,表⽰标准输出。与puts()函数不同的是,fputs()函数不会在输出末尾添加换⾏符,但可以保留输⼊时字符串中的换⾏符。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论