C编程新手,随时纠正我。
int main()
{
char sent[]="mugiwara is 18 years old";
char str[20];
int i;
sscanf(sent,"%s%*s%d",str,&i);
printf("\n%s->%d",str,i);
return 0;
}
在上面的c程序中,世界%*s
在sscanf
语句中做了什么?我尝试删除它,然后当我尝试运行程序时出现垃圾值,请善解释。
答案 0 :(得分:4)
%*s
中的 sscanf
将从流中读取数据,然后将其丢弃。它不会将读取数据存储到任何变量中,因此,不需要在sscanf
中为该sepcifier传递任何参数。
(可选)赋值抑制字符*。如果存在此选项,则该函数不会将转换结果分配给任何接收参数。
答案 1 :(得分:0)
“我尝试删除它,然后当我尝试运行程序时出现垃圾值。”
C提供了许多函数的返回值,良好的代码使用这些函数来防止此类问题。 doesNotUnderstand:
返回成功保存的值(或EOF)的计数。如果不是2,则未成功扫描sscanf()
。
i
// sscanf(sent,"%s%*s%d",str,&i);
if (sscanf(sent,"%s%*s%d",str,&i) == 2) {
printf("\n%s->%d",str,i);
} else {
printf("\nFailed to scan <%s>\n",sent);
}
指示"%s"
1)消耗而不保存空白。 2)消耗并保存非空格字符,直到3)检测到空白区域,EOF或输入错误。
sscanf()
执行相同操作,但步骤2中未保存任何数据。此外:此指令的成功或失败不会导致返回值。