scanf("%*s"),其中*是表示输入的"以空格符结束的字符串"不传入任何变量,也就是舍弃的意思,因为这里sanf函数读入的是不正确的数据,当然就需要舍弃了,以免影响下一次的读入
如果我没猜错的话 楼主现在正在看C Primer Plus(第五版)吧
因为我依稀记得这个代码出自这里
解释:scanf("%*s")
首先我们跳到代码:(status = scanf("%d", &code)) != 1 这是判断输入是否正常
想必这个楼主应该理解了吧
再看
if (status != 1)
scanf("%*s");
当status不是1 说明输入的内容不是和变量code的类型一致
那么这是我们需要将输入的错误信息读取掉 否则scanf函数会把错误信息保留 影响下次的读入
实践了一下,如下:
#include <iostream>
using namespace std;
int main(){
int i,j,k,status;
status=scanf("%d %d",&i,&j);
cout<<i<<" "<<j<<" "<<status;
return 0;
}
/*
case 1:
input : 3 4
output : 3 4 2
case 2:
input : 3 ]
output : 3 0 1
case 3:
input : ` \
output : 0 0 0
*/
好了 回归主题:先看scanf("%s") 这是读入一个字符串 以空格结束 -->解释了为什么"来跳至下一空白字符"
星号*的作用就是表示读入字符串的宽度 这里没用具体的数字就是表明需要读入的字符串的宽度是不确定的