c sscanf 检查一行中是否有多个参数?

标签 c scanf

某个库中是否已经内置了一些 C 技巧,或者我是否必须编写一些东西来手动检查它? 以下代码帮助我检测读取的参数数量是否太少,但不会太多,因为 sscanf 会在例如 3 处停止,即使该行中有 5 个参数并转到另一行。

 if(sscanf(buffer, "%d", &elements->start_state_) != 1)
 {
   //code
 }

附言请记住,我正在逐行输入。

如果读取 0 个或 1 个参数,该程序将运行良好,但未检测到超过 1 个,这对我来说是个问题。

最佳答案

如果我没理解错的话,你想知道一行中最后使用的参数之后是否有任何内容 - 我假设你是通过调用 fgets.

面对这个问题,我通常所做的只是尝试解码最后一个参数后的单个非空白字符:

char dummy[2]; /* save space for terminating null */
...
if(sscanf(buffer, "%d%1s", &elements->start_state_, dummy) != 1) {
    ...
}

如果 sscanf 行中没有任何内容(参数太少),将返回一个太低的值,如果至少有一个非空参数,它将返回 1 太高。

关于c sscanf 检查一行中是否有多个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35505202/

相关文章:

c - 在循环函数调用中使用省略号 (...)

c - 从 CSV 文件中读取行并分离成值 (sscanf SIGSEGV)

c - 理解scanf

c - 从文件中删除最后两个字节或忽略文件的最后两个字节在 C 中

c - 将ASCII字符存储在C中的数组中

c - 终端:来自文件的程序输入

c - 将整数数组映射到字符串数组时如何进行排列?

c - 如何在C中对单个字符执行scanf

c - 如何从多行读取单独的值?

c - Scanf 输入结转到下一个 scanf