在C ++中的向量中输入数字没有任何限制

时间:2018-02-20 02:05:11

标签: c++ c++11 vector

在C ++中的矢量中输入数字没有任何限制。当用户按下回车而不是数字时,它应该打印到目前为止输入的所有数字。

vector <int> numbers;
vector <int>::iterator i;
int num;
while(cin>>num && isdigit(num))
    numbers.push_back(num);

for(i=numbers.begin();i!=numbers.end();++i)
{
    cout<<*i<<'\n';
}

我正在做这件事,但是一旦用户按下输入后,假设n个数字就会退出程序而没有进入打印循环。

3 个答案:

答案 0 :(得分:0)

如果查看函数isdigit,您会看到它接受一个字符。

您的输入是一个int。

<!--System.Windows.Interactivity.WPF nuget package--> xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" <DataGrid ItemsSource="{Binding Accounts}" SelectedItem="{Binding SelectedAccount}"> <i:Interaction.Triggers> <i:EventTrigger EventName="Loaded"> <i:InvokeCommandAction Command="{Binding LoadedCommand}" /> </i:EventTrigger> </i:Interaction.Triggers> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding AccountNumber}"/> <DataGridTextColumn Binding="{Binding LastName}" /> <DataGridTextColumn Binding="{Binding FirstName}" /> </DataGrid.Columns> </DataGrid> 检查您的isdigit是否在0&#39; 0&#39;范围内。 (48)到&#39; 9&#39; (57)。

完全没必要使用isdigit。

如果您输入49 50 51 52 [返回] [Ctrl + D]或您认为输入结束的任何内容,您的程序将按原样运行。或者如果您希望num失败,只需输入51 52 53 acbd(不能作为int解析)[Return]。

答案 1 :(得分:0)

显然,您阅读多个数字的方法需要不同的实现。

使用cin >> num读取单个整数&amp;按Enter键允许缓冲区在num中保存为int。因此,您必须按Enter键才能显示每个数字。

isdigit(num)失败并杀死了while循环。事实上,isdigit使用不当。

为什么要检查int是否为数字。

isdigit将char类型转换为int&amp;发现它落在数字48到57(0,... 9)

的ASCII范围内

正确使用isdigit

char ch1 = '5';
char ch2 = 'a';
isdigit (ch1) // true
isdigit (ch2) // false

删除isdigit()检查int是没有意义的。

现在while循环仅依赖于cin>>num,您没有任何终止条件。

如果数字列表足够小,可能的方法是读取多个数字,可以读取空格分隔的整数并转换为数组。

否则,从文件流中读取或更改读取依赖单个输入的多个数字的设计。

答案 2 :(得分:0)

正如其他isdigit所提及的那样,不会为您的目的服务。 您需要检查输入行的长度。如果长度为零,则用户按下输入,否则需要转换为整数。

Live Example