C scanf请求的格式

时间:2018-11-04 22:06:40

标签: c validation input scanf

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

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

,但不适用于某些预期的输入。它必须工作

  

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

以及

  

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

enter image description here

但是如果某些printf("Bad input.\n")丢失或多余,则需要{ } ; , [ ]

1 个答案:

答案 0 :(得分:4)

像您这样的声音只想忽略空格,因此请在格式中添加可能出现空格的地方:

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
}