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 遇到 '\n' 或者 ' ' 结束输入。
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]; // 输入 "\n\nnotReadEnterOrSpace\n" char ch; scanf("%s",str); //得到 " notReadEnterOrSpace" ,scanf 读取字符串忽略前后回车或空格 ch = getchar(); printf("%s\n",str); // 输入流中连续字符串之后的空格或回车不再读取 if (ch == '\n') { printf("\\n"); }else if (ch == ' '){ printf("_"); } printf("\n"); }
注意点: 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\n",str); if (ch == '\n') { printf("\\n"); }else printf("%c",ch); printf("\n"); } /*/ 测试一:读取空行 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,'*');// 以'*'为结束符号