引例
在输入数据时,我们有时会碰到以下形式:
1,刘三,3
由于数字和字符串之间使用的是逗号而不是空格,我们不能直接使用scanf函数的%s,对字符串进
行输入,这样会导致后面的数字3也被读入进去。
我们可以采用两种方法来对上面的数据进行输入操作:
1.cin输入
#include<bits/stdc++.h>
struct student
{
int id;
string name;
int ps;
}
int main()
{
struct student p;
char ch;
cin>>p.id;
ch=getchar();
cin.getline(p.name,10,',');
cin>>p.ps;
return 0;
}
2.scanf输入
{
scanf("%d,%[^,],%d",&p.id,&p.name,&p.ps);//除scanf函数以外,其余部分省略
}
那么这里可以看到,scanf函数的使用更为方便。
总结
1.scanf()中*的用法
C Primer Plus中的描述:
举个例子,我们想要跳过输入的前两个数字,可以这样操作:
#include<bits/stdc++.h>
int main()
{
int n;
scanf("%*d %*d %d",&n);
printf("%d",n);
return 0;
}//此时输入2 5 3,程序会跳过2 5,只会输入3
2.scanf函数中的转换说明
注:scanf("%c",&ch)会读取每一个字符,包括空白。
3.scanf中的[]
scanf中的[]是扫描特定的字符集合。引例中使用的scanf("%[^,]"),是可以输入除逗号以外的所有字符,^符号表示除……之外。