C scanf请求格式

我需要在我的C程序中scanf输入。 我是这样做的:

 scanf("{[ %lf; %lf],[ %lf; %lf],[ %lf; %lf]}", ...) 

但它对某些预期的输入无效。 它必须工作

{[0; 0],[10; 10],[15; 15]}

以及

{[4; -1],[7; 1.5],[4; 4]}

要么

在此处输入图像描述

但它需要printf("Bad input.\n")如果有些{ } ; , [ ] { } ; , [ ]缺少或额外。

听起来你只想忽略空格,所以在格式中添加空格可能会发生:

 scanf(" { [%lf ;%lf ] , [%lf ;%lf ] , [%lf ;%lf ] }", ...) 

唯一不需要它的地方就在%lf之前,因为该说明符会自动跳过并忽略空格。 请务必检查返回值以确保匹配6个值。 不幸的是,这不会告诉你是否缺少尾随]} 。 为此,您可以在末尾添加额外的%n说明符,并检查以确保它已设置:

 int end = 0; if (scanf(" { [%lf ;%lf ] , [%lf ;%lf ] , [%lf ;%lf ] }%n", ..., &end), end > 0) { // successful read } else { // error }