C-使用scanf(“%s"”,.)使用fgets()读取的字符串,



我正在处理一个采用数学表达式的程序,将其转换为posfix符号,然后求解它。

首先,我正在检查表达式以查看是否形成得很好(开放括号和括号与关闭相匹配)。为了进行检查的一部分,我使用fgets()获取字符串,因为据我所知,它忽略了白色空间。

现在,当空白显示时,我必须打破字符串,但是在此部分中,使用 scanf( "%s" ,...)

的缓冲区时使用 do do

有什么办法可以使用scanf技巧打破字符串,在int部分工作,而无需再次阅读?

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

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
}

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

因此,如果表达式很好,您已经拥有数据,而无需阅读

算法是: 使用fgets()获取表达式的每个部分 存储在缓冲区变量分开,然后使用空间或其他字符 如果表达式很好,请获取缓冲区 读取缓冲区的每个部分与空间分开,然后放入新的int变量(或数组)中 使用此变量(或数组)

计算表达式

看这个2个功能,它们可能会帮助您

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

最新更新