字符数组
char str[100];
char str[100][100];
头文件一般为:
#include <stdio.h>//c
#include <iostream>//c++
#include <string.h>
c语法输入输出字符串
1. scanf/printf
char str[100];
int main() {
scanf("%s", str);
printf("%s", str);
return 0;
}
scanf识别空格或者换行符作为字符串结尾,所以不能输出带空格的一串字符,只会输出第一个空格前的字符串,字符串后的换行符或者空格会被存进缓冲区。
下面代码输入为asd\n,输出如下:可见缓冲区里还有一个换行符,如果用完scanf再用gets()记得要先把这个换行符先用getchar()吸收掉。
char str[100];
int main() {
scanf("%s", str);
char ch = getchar();
putchar(ch);
putchar('1');
printf("%s", str);
return 0;
}
2. gets/puts
这个函数由于不安全,在VS2015及以后的IDE中就不存在这个函数,而是用gets_s()函数来代替。
char str[100];
int main() {
gets_s(str);
puts(str);
return 0;
}
输出带空格的一串可以正常输出,识别换行符'\n'结尾。如图:
gets()作为结尾的换行符会被系统从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。之前的scanf使用的时候由于缓冲区里有换行符所以直接被getchar()取得了,这个gets用完后缓冲区里没有遗留,所以会等待输入。
c++语法字符串输入输出
1.cin/cout
遇到第一个空格或换行符结束,缓冲区会保留这个空格或换行符。类似于scanf。可以用string的。
2.cin.get(str,长度)
遇到换行符截至,缓冲区遗留换行符。参数里有长度就可以接收字符串。不能用string的。
输入后原样输出,包括末尾换行符
3.cin.getline(str,长度)
遇到换行符截至,缓冲区没有遗留换行符。挺好的。不能用string的。
4.getline
只能和string配合使用。缓冲区无遗留。