有人可以向我解释%*[^n]
的工作原理吗?我理解如果我像scanf("%*[^\n]")
那样使用它,则应忽略所有输入,直到遇到换行符为止,但是当我尝试这样的操作时实际会发生什么scanf(" %*[^\n],%10s",str)
str是声明的字符串,我认为换行符后的所有输入包括换行符将进入字符串,但是当我尝试打印它时,它只会打印无效字符。
scanf( "%*[^\n],%10s", str);
试图读取并丢弃直到(但不包括)下一个换行符的所有内容,然后尝试匹配逗号,然后将最多10个非空白字符读入str
。
那是行不通的,因为如果您读到换行符,则信息流中的下一个字符将是换行符,而不是逗号。您可能会收到匹配失败,并且str
的内容未得到更新。检查scanf
的返回值以查看是否成功读取了期望的项目编号(在这种情况下为1)。
您可能想要
scanf( "%*[^\n]%10s", str ); // no comma in format string.
这将读取并丢弃所有内容,直到下一个换行符,然后将跳过任何空格,并且最多10个非空格字符将b3读入str
。