簡體   English   中英

C 中的 scanf() 中的格式化字符串

[英]Formatted string in scanf() in C

就像printf()一樣,我試圖在scanf()格式字符串中使用可選說明符。 我嘗試使用寬度和精度說明符。 現在在printf()中,它只是根據這些說明符保留列並打印,但是scanf()會發生什么? 就像這里的%3d%3.3f是什么意思? 這在scanf()的情況下是否相關? 我有一點想法,在這種情況下,寬度表示要以某種特定格式讀取的字符數,但不確定。 下面的代碼進一步解釋了這一點:

#include<stdio.h>
int main()
{
int a;
float b;
printf("Enter Numbers:\n");
scanf("%3d %3.3f",&a,&b);
printf("Entered Numbers are\n");
printf("%d %f",a,b);
return 0;
}

由於您在評論中指定您真正想知道的是'如果我強行嘗試這樣做會怎樣'......這是結果(使用Clang

warning: invalid conversion specifier '.'

warning: data argument not used by format string

然而,程序編譯,因為這些只是警告。

在執行二進制文件並輸入要求的變量時:

  1. a"%d"被正確存儲。
  2. 無論輸入什么值, b" %3.3f "總是存儲0.000000

簡而言之,它做了幾乎所有其他編譯時帶有警告的代碼所沒有的行為 - 沒有按預期運行 這既不是未定義的,也不是未指定的行為,但它是錯誤的。

建議:不要問“如果我嘗試編譯這個會發生什么”性質的問題。 自己試試看吧!

暫無
暫無

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

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