目錄
前言
printf、fprintf、sprintf
printf
?fprintf
sprintf
scanf、fscanf、sscanf
?scanf
fscanf
sscanf
前言
這幾個函數曾出現在面試中,因為函數名都差不多,所以很讓人迷惑啊~
下面我們逐個分析。
printf、fprintf、sprintf
這三個函數的主要區別在于:輸出的目標不同。
printf:將格式化數據輸出到標準輸出流(一般是屏幕)
fprintf:用于向文件中寫入格式化數據(適用于所有輸出流)
sprintf:將數據格式化為字符串并存儲在指定區域
printf
int printf( const char *format [, argument]... );
因為printf的第一個參數是const char*,所以下面這兩種寫法是等價的。
printf("hello world\n");char arr[] = "hello world\n";
printf(arr);
?fprintf
int fprintf( FILE *stream, const char *format [, argument ]...);
相比于printf的參數列表,fprintf僅多了一個文件指針的參數,這個參數就指明了它要輸出的地方。
fprintf(stdout, "hello world\n");
?前面說到,fprintf適用于所有文件輸出流,所以它是可以完成printf的功能的。以下這兩總寫法是等價的。
printf("hello world\n");
fprintf(stdout, "hello world\n");
sprintf
int sprintf( char *buffer, const char *format [, argument] ... );
?下面看看如何使用。
int year = 2024;
char* hope = "world peace";char arr[20];
sprintf(arr, "%d %s", year, hope);
printf("%s\n", arr);//2024 world peace
scanf、fscanf、sscanf
這三個函數的主要區別在于:讀取數據的來源不同。
scanf:從標準輸入流(鍵盤)讀取格式化數據
fscanf:從文件流中讀取格式化數據(適用于所有流)
sscanf:從字符串中讀取格式化數據
?scanf
int scanf( const char *format [,argument]... );
?在使用時,左邊區域是格式化控制,右邊是指定存放的位置(地址)。
int input;
scanf("%d", &input);
scanf("%d", input);//error
fscanf
int fscanf( FILE *stream, const char *format [, argument ]... );
前面說過,fscanf適用于所有流,所以它可以實現scanf的功能。
int input;
scanf("%d", &input);
fscanf(stdin, "%d", &input);
上面這兩行代碼是等價的。
sscanf
int sscanf( const char *buffer, const char *format [, argument ] ... );
從字符串中讀取格式化數據,下面演示一下:
char arr[] = "hello 2024";
int year;
char str[20];
sscanf(arr, "%s %d", str, &year);
printf("%s ", str);
printf("%d\n", year);
//hello 2024
完~