在C中,使用带参数的scanf()
,scanf("%d %*d", &a, &b)
的行为有所不同。它只为一个变量输入值而不是两个!scanf()跳过变量
请解释一下!
scanf("%d %*d", &a, &b);
在C中,使用带参数的scanf()
,scanf("%d %*d", &a, &b)
的行为有所不同。它只为一个变量输入值而不是两个!scanf()跳过变量
请解释一下!
scanf("%d %*d", &a, &b);
的*
基本上意味着说明符被忽略(整数被读取,但是未分配)。
从man scanf报价:
* Suppresses assignment. The conversion that follows occurs as usual, but no pointer is used; the result of the conversion is simply discarded.
http://en.wikipedia.org/wiki/Scanf#Format_string_specifications
可选星号(*)之后的百分比符号表示由该格式说明读出的数据将不被存储在一个变量。
星号(*)表示将读取格式的值,但不会写入变量。 scanf
不希望此值的参数列表中包含变量指针。你应该写:
scanf("%d %*d",&a);
有没有办法在我们想用'fscanf'读取的字符之后忽略所有字符?即直到行结束时忽略所有事情?我一直在寻找那个相当长的一段时间。 – Bionix1441
@ Bionix1441'scanf'只读取'stdin'(和'fscanf'文件中的字符)以满足格式字符串的需要。如果您的变量中出现不正确的值,则表示您遇到与该格式匹配的错误。检查返回值。如果它没有帮助,我想你需要用例子发布一个适当的问题。 –
但是,如果我放弃一个实际上不存在于文件上的整数,看起来fscanf不会失败。 – Bionix1441