scanf解释
https://blog.csdn.net/challenglistic/article/details/121489749?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169348339016800182135459%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=169348339016800182135459&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-2-121489749-null-null.268v1koosearch&utm_term=scanf&spm=1018.2226.3001.4450
所有的输入方式都离不开最基本的原理,只是赋值的方法不一样而已。首先我们需要建立缓冲区的概念,输入容易混淆,出现问题,都是输入中掺杂空格,tab键,回车。
当我们从键盘输入任何东西,有一点不会变,输入什么,缓冲区中就会有什么。
如输入:
“a b
”
缓冲区依次中是’a’‘空格’’tab键‘’\n‘
。这里\n代表回车键
字符输入
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//cin cout会自动过滤输入的空格键、tab键,回车键
//即不计入数组
//只能以回车键作为结束输入字符的标志
//以下所有输入都是以回车键作为结束输入的标志,且该作为结束输入的回车键
//不计入数组
int main(){
char input[6];
for(int i=0;i<5;i++){
cin>>input[i];
}
for(int i=0;i<5;i++){
cout<<input[i];
}
return 0;
}
输入:a’空格键‘b’tab键‘c’\n‘d’\n’e’\n’
输出:abcde
输入:abcd’\n’‘\n’e’tab键’‘\n’
输出:abcde
当且仅当字符char的个数达到5个,且最后有回车键才会结束。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//cin.get()会接受空格,tab,回车
//仅以回车键作为最终结束输入的标志
//即包括字符、空格,tab,回车的输入总个数达到5个,
//只有输入回车键才会结束,其他键无效
int main(){
char input[6];
for(int i=0;i<5;i++){
cin.get(input[i]);
}
for(int i=0;i<5;i++){
cout<<input[i];
}
return 0;
}
输入:a’空格键‘b’tab键‘c’\n‘
输出:a’空格键‘b’tab键‘c
输入:a’空格键‘bc’\n‘
输出:a’空格键‘bc’\n‘
注意,第二次的输出有回车输出。
字符串输入
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstring>
#include <stdio.h>
using namespace std;
//gets可以接受空格、tab
//一按回车键就结束输入
int main(){
char input[6];
gets(input);
int len=strlen(input);
cout<<len;
return 0;
}
输入:a’空格键‘b’tab键‘c’\n‘
输出:5
则input=a’空格键‘b’tab键‘c’
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//getchar()接受空格、tab、回车
//仅以回车键作为结束标志,最后作为结束标志的回车键不计入数组
int main(){
char input[6];
for(int i=0;i<5;i++){
input[i]=getchar();
}
for(int i=0;i<5;i++){
cout<<input[i];
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
char a;
char array[20]={NULL};
cin.get(array,20);
cin.get(a);
cout<<array<<" "<<(int)a<<endl;
return 0;
}
输入:123456789[回车],
输出:123456789 10
#include <iostream>
using namespace std;
int main() {
char array[20]={NULL};
char a;
cin.getline(array,20); //或者指定结束符,使用下面一行
cin.get(a);
cout<<array<<" "<<(int)a<<endl;
return 0;
}
输入:123456789[回车]回车],
输出:123456789 10
注意,cin.getline() 与 cin.get() 的区别是,cin.getline() 不会将行结束符(如换行符)残留在输入缓冲区中。