Bootstrap

c/c++字符数组的输入输出

字符数组

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配合使用。缓冲区无遗留。

;