scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody>| معرفة في ملف <stdio.h>
|
||
| (1) | ||
int scanf( const char *format, ... ); |
(حتى C99) | |
int scanf( const char *restrict format, ... ); |
(منذ C99) | |
| (2) | ||
int fscanf( FILE *stream, const char *format, ... ); |
(حتى C99) | |
int fscanf( FILE *restrict stream, const char *restrict format, ... ); |
(منذ C99) | |
| (3) | ||
int sscanf( const char *buffer, const char *format, ... ); |
(حتى C99) | |
int sscanf( const char *restrict buffer, const char *restrict format, ... ); |
(منذ C99) | |
تقرأ من المواضع المحددة وتترجمها حسب الشروط في format ثم تخزنها في الأماكن المعطاه.
stream'\0' المسماة buffer.
الوصول إلى نهاية السلسة يعدل الوصول لنهاية الملف في fscanfالمعطيات
| stream | - | تيار الإدخال الذي ستتم منه القراءة | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| buffer | - | مؤشر إلى سلسلة من الحروف منتهية بـ'\0' ستتم القراءة منها
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| format | - | مؤشر إلى سلسلة من الحروف منتهية بـ'\0' توضح التنسيق (طريقة فهم النص).
The format string consists of whitespace characters (any single whitespace character in the format string consumes all available consecutive whitespace characters from the input), non-whitespace characters except % (each such character in the format string consumes exactly one identical character from the input) and conversion specifications. Each conversion specification has the following format:
The following format specifiers are available:
All conversion specifiers other than The conversion specifiers The conversion specifiers The correct conversion specifications for the fixed-width character types (int8_t, etc) are defined in the header <cinttypes>.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ... | - | المعطيات التي سيتم التخزين فيها | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
القيمة المُرجعة
ملحوظات
Because most conversion specifiers first consume all consecutive whitespace, code such as
scanf("%d", &a);
scanf("%d", &b);
will read two integers that are entered on different lines (second %d will consume the newline left over by the first) or on the same line, separated by spaces or tabs (second %d will consume the spaces or tabs).
The conversion specifiers that do not consume leading whitespace, such as %c, can be made to do so by using a whitespace character in the format string:
scanf("%d", &a);
scanf(" %c", &c); // ignore the endline after %d, then read a char
مثال
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <stddef.h>
#include <locale.h>
int main(void)
{
int i, j;
float x, y;
char str1[10], str2[4];
wchar_t warr[2];
setlocale(LC_ALL, "en_US.utf8");
char input[] = "25 54.32E-1 Thompson 56789 0123 56ß水";
/* parse as follows:
%d: an integer
%f: a floating-point value
%9s: a string of at most 9 non-whitespace characters
%2d: two-digit integer (digits 5 and 6)
%f: a floating-point value (digits 7, 8, 9)
%*d: an integer which isn't stored anywhere
' ': all consecutive whitespace
%3[0-9]: a string of at most 3 decimal digits (digits 5 and 6)
%2lc: two wide characters, using multibyte to wide conversion */
int ret = sscanf(input, "%d%f%9s%2d%f%*d %3[0-9]%2lc",
&i, &x, str1, &j, &y, str2, warr);
printf("Converted %d fields:\ni = %d\nx = %f\nstr1 = %s\n"
"j = %d\ny = %f\nstr2 = %s\n"
"warr[0] = U+%x warr[1] = U+%x\n",
ret, i, x, str1, j, y, str2, warr[0], warr[1]);
#ifdef __STDC_LIB_EXT1__
int n = sscanf_s(input, "%d%f%s", &i, &x, str1, (rsize_t)sizeof str1);
// writes 25 to i, 5.432 to x, the 9 bytes "thompson\0" to str1, and 3 to n.
#endif
}
الخرج:
Converted 7 fields:
i = 25
x = 5.432000
str1 = Thompson
j = 56
y = 789.000000
str2 = 56
warr[0] = U+df warr[1] = U+6c34
أنظر أيضا
(C99)(C99)(C99) |
تقرأ مدخل من stdin أو تيار ملف (FILE*) أو مصفوفة مستخدمة variable arguments list (دالة) |
| تقرأ سلسلة من الحروف من تيار ملف (دالة) | |
| تطبع خرج منسق في stdout أو تيار ملف أو Buffer (دالة) | |
مقالة مرجع C++ عن scanf, fscanf, sscanf
| |