%* [^ \ n](scanf)如何在c中工作?

问题描述 投票:0回答:1

有人可以向我解释%*[^n]的工作原理吗?我理解如果我像scanf("%*[^\n]")那样使用它,则应忽略所有输入,直到遇到换行符为止,但是当我尝试这样的操作时实际会发生什么scanf(" %*[^\n],%10s",str)str是声明的字符串,我认为换行符后的所有输入包括换行符将进入字符串,但是当我尝试打印它时,它只会打印无效字符。

c string scanf
1个回答
0
投票
scanf( "%*[^\n],%10s", str);

试图读取并丢弃直到(但不包括)下一个换行符的所有内容,然后尝试匹配逗号,然后将最多10个非空白字符读入str

那是行不通的,因为如果您读到换行符,则信息流中的下一个字符将是换行符,而不是逗号。您可能会收到匹配失败,并且str的内容未得到更新。检查scanf的返回值以查看是否成功读取了期望的项目编号(在这种情况下为1)。

可能想要

scanf( "%*[^\n]%10s", str ); // no comma in format string.

这将读取并丢弃所有内容,直到下一个换行符,然后将跳过任何空格,并且最多10个非空格字符将b3读入str

© www.soinside.com 2019 - 2024. All rights reserved.