【发布时间】:2013-02-14 11:15:30
【问题描述】:
我一直在尝试在 scanf 上使用正则表达式,以便读取最多 n 个字符的字符串并丢弃任何其他内容,直到换行符为止。任何空格都应被视为常规字符,因此包含在要读取的字符串中。 我研究了一篇关于正则表达式的维基百科文章,但我无法让 scanf 正常工作。这是我尝试过的一些代码:
scanf("[ ]*%ns[ ]*[\n]", string);
[ ] 应该用于实际的空格字符,* 应该表示一个或多个,n 是要读取的字符数,string 是分配有 malloc 的指针。 我尝试了几种不同的组合;但是我倾向于只阅读句子的第一个单词(停在空格字符处)。此外, * 似乎丢弃了一个字符,而不是表示“零个或多个”...
谁能详细解释scanf如何解释正则表达式?更何况,重复使用 getc 是否有效?
提前致谢:D
【问题讨论】:
-
试试
fgets():fgets(string, sizeof string, stdin); -
问题是任何剩余的字符都会留在输入流中,不是吗?
-
如果有足够的空间,
fgets()会消耗所有内容,直到(包括)'\n'。
标签: c unix scanf expression formatted-input