سؤال عن التابعين printf / fprintf في لغة السي

السلام عليكم:

     int fscanf(FILE* stream, char* format, ......);

It means that the invocation like this:

    scanf("%d", &number);

is the same as the invocation:

    fscanf(stdin, "%d", &number);
    int fprintf(FILE* stream, char* format, ......);

This implies that the invocation:

    printf("%d", number);

is a functional equivalent of the following invocation:

    fprintf(stdout, "%d", number);

السؤال: في كلا الحالتين الوسيط الثاني هو مؤشر من النوع char, فلماذا في التابع scanf or fscanf قمنا بتمرير العنوان باستخدام & لانه مؤشر و في حالة printf or fprintf لم نستخدم &؟؟

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

وعليكم السلام ورحمة الله

لماذا في التابع scanf or fscanf قمنا بتمرير العنوان باستخدام & لانه مؤشر و في حالة printf or fprintf لم نستخدم &؟؟

fscanf تريد عنوان لتكتب فيه المدخلات

fprintf تريد قيمة ترسلها إلى الشاشة

إذا كتبنا دالة fprintf هكذا

fprintf(stdout, "%d", &number);

سيطبع لنا عنوان المتغير في الذاكرة لا قيمته

أما fscanf ستعتبر قيمة Number مؤشر يشير إلى ذاكرة

number = 100;
fscanf(stdin, "%d", number);

ستعتبر دالة fscanf رقم 100 عنوانًا في الذاكرة وقد يسبب ذلك مشكلة لكامل النظام

التطبيق

int number=0;
int t= (int) &number;
printf("Enter: ");
scanf("%d", t);
printf("%d\n", t);
printf("%d\n", number);