簡體   English   中英

使用scanf的多種輸入格式

[英]Multiple input formats with scanf

我希望通過stdinscanf()從用戶讀取幾個數據點。

但是,如果用戶希望用*表示無效數據,則將違反預期的格式( %f%d等),並且據我所知,導致scanf()返回錯誤。

我設想的處理方式是將stdin作為一系列字符串讀取,檢查它們是否為* ,然后對其進行編碼處理。 這看起來非常幼稚和混亂,我想知道是否有更干凈的方法來完成此任務。

請注意,我在非常有限的環境中工作,因此POSIX /第三方解決方案將不適用。 僅限ANSI C :(

通常,我建議使用fgets()作為輸入,但是...

如果您強制用戶對無效數據使用“ nan”,則有一個簡單的scanf()解決方案。 通過輸入“ nan”(非數字),您可以解決3個問題:這個已發布的問題,如何在代碼中表示無效數據以及如何打印出無效數據。

示例:每行讀取2個數據點

#include<math.h>
#include<stdio.h>
#include<stdlib.h>
...
double f1, f2;
int i;
f1 = f2 = atof("NaN");
i = scanf("%lf %lf\n", &f1, &f2);
if (i != 2) {
  // Handle input error
}
if (isnan(f1)) { 
  // Handle invalid f1
}
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM