FGETS()不采用输入

fgets() is not taking the input

本文关键字:输入 FGETS      更新时间:2023-10-16

im使用fgets(Learner.name,21,stdin(输入学生的名称,但是当我运行程序时,它显示了&quot"输入您的姓名"并跳过"在5个科目中输入您的分数"。&quot

有人可以解释我为什么会发生这种情况吗?因为cin.getline((函数相同。

get_s((函数不起作用的编译器显示"在此范围"

"中没有声明" get_s"
#include<iostream>
#include<stdio.h>
#include<cstdlib>
using namespace std;
struct Student
{
    int rollno;
    char name[21];
    float marks[5];
    char grade;
};
Student learner ;
int main()
{
    cout<<"n"<<"Enter Roll number: ";
    cin>>learner.rollno;
    cout<<"n"<<"Enter your name: ";
    fgets(learner.name,21,stdin);
    cout<<"n"<<"Enter your marks in 5 subjects: "<<"n";
    for(int i = 0;i <5;++i)
    {
        cout<<"n"<<"Subject"<<i+1<<":";
        cin>>learner.marks[i];
    }
    float avg ,total;
    total =  (learner.marks[0]+learner.marks[1]+learner.marks[2]+learner.marks[3]+learner.marks[4]);
    avg = total/5;
    if(avg<50)
        learner.grade = 'D';
    else if(avg<60)
        learner.grade = 'C';
    else if(avg<80) 
        learner.grade = 'B';
    else
        learner.grade = 'A';
    cout<<"n"<<"n"<<"Student result: n";
    cout<<"Roll Number: "<<learner.rollno<<"t";
    cout<<"Name: ";
    cout.write(learner.name,21);
    cout<<"n"<<"Total Marks: "<<total;
    cout<<"t"<<"Grade: "<<learner.grade<<endl;
    system("pause");
    return 0;
}

这是输出:

  Enter Roll number: 22
  Enter your name:
  Enter your marks in 5 subjects:
  Subject1:

的原因是,当您输入否定并按Enter键时,cin仅读取数字,而不是newline(这是默认行为。(。此newline保留在输入流中,当您执行fgets((时,它会带有newline字符。
要更改此问题,您可以使用cin >> noskipws >> learner.rollno;

stdincin>>learner.rollno;之后未清除缓冲区,请使用getchar()清除/冲洗stdin缓冲区,然后将cin.getline()用作

cin.getline(learner.name,'n');