ACM 基本输入

单次输入

C语言

int a,b;

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

C++语言

int a,b;
cin >> a >> b;

循环输入

C语言

int a,b;

while(scanf("%d %d",&a,&b)!=EOF){

};

C++语言

int a,b;

while(cin >> a >> b){

};

输入字符串

cin 遇到 ' ' 或者 ' ' 结束输入。
getline 总是从第一行开始读取字符串,不管是否已经执行过 cin >> a; 之类的语句

输入一整行字符串

C语言

char ch[100];

gets(ch);

C++语言

char ch[100];

cin.getline(ch);

// or
string str;

getline(cin,ch);

助记: 两个 getline 都需要 cin,一个放外面,一个放里面

输入空格分隔的字符串

C语言

char str[100];

scanf("%s", str);

注意点:scanf 从输入流中获取字符串的时候范围是 [结束符,结束符),读取后将首部的结束符去掉后传给字符串变量。另,结束符可以是多个连续空格
测试案例如下:

#include<stdio.h>

int main(){
	
	char str[20]; // 输入 "

notReadEnterOrSpace
"
	char ch;
	scanf("%s",str); //得到 " notReadEnterOrSpace" ,scanf 读取字符串忽略前后回车或空格
	ch = getchar();
	printf("%s
",str);
	
	// 输入流中连续字符串之后的空格或回车不再读取
	if (ch == '
') {
		printf("\n");
	}else if (ch == ' '){
		printf("_");
	}
	printf("
");
}

注意点: gets 从输入流中获取字符串的时候范围是 (结束符,结束符],读取后将尾部的结束符去掉后传给字符串变量。附带说明一点,getchar 读取到文件结尾时其值为 xff 即 ascII 码中 255 的 16 进制表示,其打印值为 8 进制的 377

测试案例如下:

#include<stdio.h>

int main(){
	
	freopen("/Users/apple/Desktop/input.txt", "r", stdin);
	char str[20];
	char ch;
	gets(str);
	ch = getchar();
	printf("%s
",str);
	
	if (ch == '
') {
		printf("\n");
	}else
		printf("%c",ch);
	
	printf("
");
}
/*/
测试一:读取空行
 
input:
###

notReachHere
###

output:
###

h
###
测试二:读取单行

input:
###
getThisLine
###
ouput:
###
getThisLine
377
###

测试三:读取单行,文件未到结尾

input:
###
getThisLine
anotherLine
###
ouput:
###
getThisLine
a
###
*/

C++语言

见下一节:输入用某个符号分隔的多个字符串。

输入用某个符号分隔的多个字符串

C语言

char str1[100],str2[100];

scanf("%s%s",str1,str2);//字符串之间用一个或多个空格分隔
gets(str1);gets(str2);//字符串之间用一个换行符分隔

C++语言

char str1[100],str2[100];

cin.getline(str1,100,'*');cin.getline(str2,100,'*');//字符串之间用一个'*'分隔

限制输入长度或以某个字符作为结尾

C++语言

char str1[100];
cin.getline(str1,100,'*');//限制长度为100,如果想提前结束就用'*'作为结束符号

string str;

getline(cin,str,'*');// 以'*'为结束符号
原文地址:https://www.cnblogs.com/tangyikejun/p/4234965.html