c - 如何中断使用 fgets()、使用 scanf ("%s"读取的字符串,..)

标签 c buffer scanf fgets

我正在开发一个程序,该程序采用数学表达式,将其转换为后缀表示法,然后求解它。

首先,我检查表达式以查看其格式是否正确(左括号和括号与右括号匹配)。为了进行检查,我使用了 fgets() 来获取字符串,因为据我所知它会忽略空格。

现在,当出现空格时,我必须中断字符串,但是对于这部分,使用 do while 使用 scanf( "%s"的缓冲区) 会更容易,...)

有什么方法可以让我使用 scanf 技巧来破坏字符串,部分地处理 int 而无需再次读取它?

最佳答案

您可以使用 sscanf() 前进通过 fgets() 读取的缓冲区
%n 将接收扫描使用的字符数。添加 using 到偏移量将使扫描提前通过缓冲区。

int offset = 0;
int used = 0;
char line[1000];
char item[200];
fgets ( line, sizeof ( line), stdin);
while ( ( sscanf ( line + offset, "%199s%n", item, &used)) == 1) {
    offset += used;
    // do something with item
}

关于c - 如何中断使用 fgets()、使用 scanf ("%s"读取的字符串,..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30080022/

相关文章:

c++ - 如何避免在高内存使用应用程序中耗尽内存? C/C++

c - fputs和fflush,写入和缓冲过程

c - C 的 Sscanf 问题

c - 验证用户输入时如何处理缓冲区错误

c++ - 如果前导0后面的数字是8或9,Scanf不会读取前导0。

c - 有没有成熟的解决方案来创建带有 ELF 符号和 C 语法命令解析器的即时 shell?

c - 在 C 中处理具有长度的字符串

c - 求解n个线性方程

bash - 尾-f 文件1 | perl -pe '$_' > file2 不向 file2 输出任何内容

json - 将 JSON 对象转换为 Buffer 并将 Buffer 转换为 JSON 对象