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

How to break a string, that was read using fgets(), using scanf("%s",..)

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

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

现在我必须在出现白色 space 时断开字符串,但是对于这部分,使用 do 会更容易,而 使用 a 的缓冲区scanf( "%s" ,...)

有什么方法可以使用 scanf 技巧来断开字符串,逐个处理 int 而无需再次读取它?

您可以使用一个缓冲区来存储第一次使用fgets()读取的所有数据;功能。

因此,如果表达式格式正确,则您已经拥有数据,不需要读取它

算法将是: 使用 fgets() 获取表达式的每个部分 存储在缓冲区变量中,然后使用 space 或其他字符分隔 如果表达式格式正确,则获取缓冲区 读取缓冲区中用 space 分隔的每个部分,然后放入一个新的 int 变量(或数组)中 使用此变量(或数组)

计算表达式

看看这2个函数,或许能帮到你

http://www.cplusplus.com/reference/string/string/find/ http://www.cplusplus.com/reference/string/string/substr/

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

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
}