在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个数字就会退出程序而没有进入打印循环。
答案 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)
正确使用isdigit
char ch1 = '5';
char ch2 = 'a';
isdigit (ch1) // true
isdigit (ch2) // false
删除isdigit()检查int是没有意义的。
现在while循环仅依赖于cin>>num
,您没有任何终止条件。
如果数字列表足够小,可能的方法是读取多个数字,可以读取空格分隔的整数并转换为数组。
否则,从文件流中读取或更改读取依赖单个输入的多个数字的设计。
答案 2 :(得分:0)
正如其他isdigit
所提及的那样,不会为您的目的服务。
您需要检查输入行的长度。如果长度为零,则用户按下输入,否则需要转换为整数。