vscanf ()- 讀取格式化資料
格式
#include <stdarg.h>
#include <stdio.h>
int vscanf(const char *format, va_list arg_ptr);語言層次
ANSI
安全執行緒
是
區分語言環境
此函數的行為可能受到現行語言環境的 LC_CTYPE 及 LC_NUMERIC 種類的影響。 如果在編譯指令上指定 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,則現行語言環境的 LC_UNI_CTYPE 種類也可能影響行為。 如需相關資訊,請參閱 瞭解 CCSID 及語言環境。
說明
vscanf() 函數會將資料從 stdin 讀取至可變引數數目指定的位置。 vscanf() 函數的運作方式與 scanf() 函數類似,不同之處在於 arg_ptr 指向引數清單,這些引數的數目可能因程式中的呼叫而有所不同。 這些引數應該由每一個呼叫的 va_start 起始設定。 相反地, scanf() 函數可以有一份引數清單,但當您編譯程式時,該清單中的引數數目是固定的。
每一個引數都必須是變數的指標,其類型對應於 format-string 中的類型指定元。 format 具有與 scanf() 函數的格式字串相同的格式及函數。
回覆值
vscanf() 函數會傳回已順利轉換並指派的欄位數。 回覆值不包括已讀取但未指派的欄位。 如果未執行轉換,則嘗試在檔案結尾讀取的回覆值為 EOF。 回覆值 0 表示未指派任何欄位。
範例
此範例使用
vscanf() 函數從 stdin 讀取整數、浮點值、字元及字串,然後顯示這些值。#include <stdio.h>
#include <stdarg.h>
int vread(char *fmt, ...)
{
int rc;
va_list arg_ptr;
va_start(arg_ptr, fmt);
rc = vscanf(fmt, arg_ptr);
va_end(arg_ptr);
return(rc);
}
int main(void)
{
int i, rc;
float fp;
char c, s[81];
printf("Enter an integer, a real number, a character "
"and a string : \n");
rc = vread("%d %f %c %s", &i, &fp, &c, s);
if (rc != 4)
printf("Not all fields are assigned\n");
else
{
printf("integer = %d\n", i);
printf("real number = %f\n", fp);
printf("character = %c\n", c);
printf("string = %s\n",s);
}
}
/***************** If input is: 12 2.5 a yes, *******************
************** then output should be similar to: ****************
Enter an integer, a real number, a character and a string :
integer = 12
real number = 2.500000
character = a
string = yes
*/
相關資訊
- fscanf ()-讀取格式化資料
- fwprintf ()-將資料格式化為寬字元並寫入串流
- fwscanf ()-使用寬字元從串流讀取資料
- scanf ()-讀取資料
- sscanf ()-讀取資料
- swprintf ()-格式及寫入寬字元至緩衝區
- swscanf ()-讀取寬字元資料
- vfscanf ()-讀取格式化資料
- vfwscanf ()-讀取格式化寬字元資料
- vscanf ()-讀取格式化資料
- vsscanf ()-讀取格式化資料
- vswscanf ()-讀取格式化寬字元資料
- vwscanf ()-讀取格式化寬字元資料
- wprintf ()-將資料格式化為寬字元並列印
- wscanf ()-使用寬字元格式字串來讀取資料
- <wchar.h>