Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cin.get()的运行时错误_C++ - Fatal编程技术网

C++ cin.get()的运行时错误

C++ cin.get()的运行时错误,c++,C++,但是如果我在不同的文件中运行cstyle\u string(),那么我不会得到任何错误,因为代码工作得很好 我想知道为什么会发生这种情况?有两个问题 冗余\n cin的状态 cpp\u字符串中的最后一个cin是cin>>age 它将保留未提取的\n 在cstyle\u字符串的第一个中,字符串是cin.get(fNm,20.get() 如果找到定界字符,则不会从输入序列中提取该字符,而是作为要从流中提取的下一个字符保留在该序列中 cin.get(FNm,20)将解析\n之前的空输入,并且实际上流中

但是如果我在不同的文件中运行
cstyle\u string()
,那么我不会得到任何错误,因为代码工作得很好


我想知道为什么会发生这种情况?

有两个问题

  • 冗余
    \n

  • cin的状态

  • cpp\u字符串中的最后一个
    cin
    cin>>age

    它将保留未提取的
    \n

    cstyle\u字符串的第一个中,字符串是
    cin.get(fNm,20.get()

    如果找到定界字符,则不会从输入序列中提取该字符,而是作为要从流中提取的下一个字符保留在该序列中

    cin.get(FNm,20)
    将解析
    \n
    之前的空输入,并且实际上流中没有可用字符。在这种情况下,将设置failbit标志,接下来所有
    cin>
    操作员将失败


    您只能调用
    cstyle\u string
    并直接按enter键,同样的情况也会发生。

    您正在调用
    cpp\u string()
    cstyle\u string()
    。一次只能打一个电话。因为它们使用输入。它们都在不同的时间运行……我的意思是第一个cpp_string()将运行,然后在它返回后,cstyle_string()将运行。当我没有在cpp_string()中使用cin.get()时,它工作得很好。在此之前,我使用cin>>fname进行输入,效果很好,但它只需要一个单词,所以我使用get()来获取一行字符。现在代码不起作用了。谢谢,新行必须被忽略。因此使用了这一行cin.ignore(numeric_limits::max(),'\n');在首次使用cstyle_string()之前,现在它工作正常。
    #include<iostream>
    #include<string>
    #include<cstring>
    
    using namespace std;
    void cpp_string();
    void cstyle_string();
    
    int main()
    {
      cpp_string();
      cstyle_string();
    
      system("pause");
      return 0;
    }
    
    void cpp_string()
    {
      string fName, lName;
      char grade;
      int age;
    
      cout << "What is your first name?";
      getline(cin, fName);
      cout << "What is your last name?";
      getline(cin, lName);
      cout << "What letter grade do you deserve?";
      cin >> grade;
      cout << "What is your age?";
      cin >> age;
    
      cout << "Name: " << fName << ", " << lName << endl;
      cout << "Grade: " << grade << endl;
      cout << "Age: " << age << endl;
    
      return;
    }
    
    void cstyle_string()
    {
      char fNm[20], lNm[20];
      char grade;
      int age;
    
      cout << "What is your first name?";
      cin.get(fNm, 20).get();
      cin.clear();
      cout << "What is your last name?";
      cin.get(lNm, 20).get();
      cout << "What letter grade do you deserve?";
      cin >> grade;
      cout << "What is your age?";
      cin >> age;
    
      cout << "Name: " << fNm << ", " << lNm << endl;
      cout << "Grade: " << grade << endl;
      cout << "Age: " << age << endl;
    
      return;
    }