هل يأخذ Scanf () ' n' كبقايا إدخال من Scanf () السابقة؟

StackOverflow https://stackoverflow.com/questions/1815986

  •  08-07-2019
  •  | 
  •  

سؤال

في رمز C التالي:

char name[20];
int a;
int b;

for(i=0;i<10;i++)
{
    printf("\nEnter name, a & b: ");
    scanf("%s %d %d",name,&a,&b);
}

يفعل scanf اقرأ في '\n' دخلت في نهاية scanf() في التكرار الأول ، لمدخلات التكرار الثانية؟

هل كانت مفيدة؟

المحلول

scanf يترك دفق الإدخال يشير إلى \n. في حالتك لا تحدث فرقًا: في كل مرة يطلق عليها ، scanf سوف يتحرك حتى يجد الشخصية التالية غير المتسابقين. لذا فإن إعطائها 10 خطوط من name, a, b كما ستعمل المدخلات كما تتوقع.

لكن النظر في هذا:

scanf("%d", &a);
fgets(str, 20, stdin);

fgets يقرأ حتى يجد أول حرف جديد ، لذلك str سوف تحصل فقط على قيمة \n, ، و fgets إرادة ليس اقرأ السطر التالي من الإدخال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top