首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

scanf("%*s %d" g, &h); 中的%*s怎么理解

2012-03-26 
scanf(%*s %d, g, &h) 中的%*s如何理解C/C++ code/*我输入:catch 22输出:22分析:scanf(%*s %d, g, &h

scanf("%*s %d", g, &h); 中的%*s如何理解

C/C++ code
/*   我输入:catch 22     输出:22   分析:   scanf("%*s %d", g, &h);   程序跳过%*s,即“catch”,然后把22保存在   g数组第一个元素里面。   printf("%d\n", g[0]);   程序打印出g数组第一个元素的值,即g[0],22*/#include <stdio.h>int main(){    char g[10];    int h;    scanf("%*s %d", g, &h);    printf("%d\n", g[0]);    return 0;}

请问我分析的对吗?

[解决办法]
这样应该不行吗, %*S,这个S要取多少呢?
一般要忽略串时应该用%*[]这样的格式,
[解决办法]
C/C++ code
#include <stdio.h>int main(){    int  h;    sscanf("abc 3", "%*s %d", &h);    printf("%d\n", h);}
[解决办法]
%*s控制sscanf读入字符串不进行处理
[解决办法]
scanf("%*s %d", g, &h);
应改为
scanf("%*s%d",&h);

跳过一个不含空白符的字符串。其中空白符可以是' ','\t','\n'之一。
[解决办法]
分析的一部分是对的。
其中%*s确实是使scanf跳过了catch,但%d指定scanf把22存储在g数组的前四个字节中了,而不是只存在了g[0]里,之所以printf打印g[0]得到了22,也是因为%d又指定printf从g[0]开始的地址读了4个字节,从而得到了22。
[解决办法]
抑制字符*的作用是在按格式说明读入数据后不送给任何变量,即“虚读”,举例,scanf("%3d%*2d%3d"),输入12345678后,a=123 b=678,即中间的45,虚读。

热点排行