Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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
为char类型变量输入多个字符的效果 我对C++编码是新的。_C++ - Fatal编程技术网

为char类型变量输入多个字符的效果 我对C++编码是新的。

为char类型变量输入多个字符的效果 我对C++编码是新的。,c++,C++,我注意到,如果我为一个字符变量输入多个字符,那么下面给出的测试程序将进入一个无限循环。我无法正确调试此问题。有人能帮我看看当输入这样的信息时程序的流程是怎样的吗。我怀疑会发生一些不安全的转换 溢出值有可能作为下一个整数变量的输入,但我正在检查循环中的变量,并要求用户 重新输入的值无效。程序不会因获取新的数字输入而停止。相反,它无限打印“输入一个数字”。为什么cin不为其工作 接受新的输入?此程序中是否有一些修改可以纠正此错误 #include <iostream> int main

我注意到,如果我为一个字符变量输入多个字符,那么下面给出的测试程序将进入一个无限循环。我无法正确调试此问题。有人能帮我看看当输入这样的信息时程序的流程是怎样的吗。我怀疑会发生一些不安全的转换

溢出值有可能作为下一个整数变量的输入,但我正在检查循环中的变量,并要求用户 重新输入的值无效。程序不会因获取新的数字输入而停止。相反,它无限打印“输入一个数字”。为什么cin不为其工作 接受新的输入?此程序中是否有一些修改可以纠正此错误

#include <iostream>

int main()
{
    char name;
    int number=-1;
    cout << "Enter a character: \n";
    cin >> name; //Use input like abc here
    cout << "number = " << number;
    while (number == -1)
    {
        cout << "Enter a number: \n";
        cin >> number; // This never waits for user input
    }
    return 0;
}


Output
Enter a character:
ytc
number = -1Enter a number:
Enter a number:
Enter a number:
#包括
int main()
{
字符名;
整数=-1;
cout>name;//在此处使用类似abc的输入

cout当用户在第一次查询中输入多个字符时,只有第一个字符被提取并存储在
name

然后,进入循环。读取第一个字符,它不是一个数字,因此流进入错误状态。所有后续读取都失败,因此
数字
的值永远不会更改,并且您有一个无限循环

以下程序将执行您想要的操作:

#include <iostream>

int main() {
  char name = '\0';
  int number = -1;
  std::cout << "Enter a character: " << std::endl;
  std::cin >> name;
  std::cout << "You entered " << name << std::endl;
  while(number == -1) {
    std::cout << "Enter a number: " << std::endl;
    if(!(std::cin >> number)) {
      if(std::cin.eof()) {
        std::cout << "User pressed CRTL+d" << std::endl;
        break;
      }
      std::cout << "This was not a valid number - try again: " << std::endl;
      std::cin.clear();
      std::cin.get(); // extract one character
    }
    else
      std::cout << "You entered " << number << std::endl;
  }
}
#包括
int main(){
字符名='\0';
整数=-1;
std::cout名称;

std::cout没有保证清除输入流的方法。您可以编写代码来清除输入流,但无法保证它能正常工作。因为在标准C/C++中,输入流是缓冲的。按键是由操作系统而不是程序缓冲的。您可以递归调用cin.get()以确保缓冲区中的所有数据都已使用。请参阅下面的代码段

char name = 0;
int number = -1;
std::cout << "Enter a character: " << std::endl;
std::cin >> name;
std::cout << "You entered " << name << std::endl;

// Clear the stream
while( !std::cin.eof() && std::cin.get() != '\n' );

std::cout << "Enter a number: " << std::endl;
std::cin >> number;
return 0;
charname=0;
整数=-1;
std::cout名称;
标准::cout