我有一个结构
struct number{
int value;
};
number numbers[1000];
当用户决定离开添加面板时,我有一个for循环输入值和中断,该功能正常工作。我有另一个for循环用于显示输入的数据,它完成了工作(种类),因为它需要我使用系统(“暂停”);否则循环会不断地输入函数中的所有内容,包括循环外的couts。
void ListNumbers(){
system("cls");
cout << "\t\t\tArray: Numbers" << endl;;
cout << "Value" << endl;
for (int i = 0; i < 1000; i++){
if (NULL == numbers[i].value)
break;
cout << numbers[i].value << endl;
}
cout << "\n\nAmount of records: " << sizeof(numbers) / sizeof(numbers[0]) << endl;
system("pause");
我希望程序列出表中当前填充数据的记录/索引量。目前,它显示数据库中的记录总量(为1000)。另外,如果可能的话,非常感谢用于固定显示循环以便我不需要使用系统暂停的方法。
答案 0 :(得分:1)
您不应该将整数值检查检查为:
if (NULL == numbers[i].value)
有明确定义的意图,如:
if (0 == numbers[i].value)
使用std :: vectors创建动态数组,不要将自己限制为1000。
声明:
cout << "\n\nAmount of records: " <<sizeof(numbers) / sizeof(numbers[0])
您正在将sizeof数组除以第一个数字元素的sizeof。这种划分是不变的,只会根据sizeof(int)而变化。
答案 1 :(得分:0)
对于初学者来说,在找到与您所说的内容不一致的第一个NULL后,您会跳出循环。您应该使用if..else为每个非NULL值递增计数器。您不希望中断,因为您希望循环检查表中的每个条目。在循环外部的cout中,显示您正在递增的计数器。您可以使用一些基本数学来确定NULL变量的数量。你对sizeof的使用看起来很奇怪,因为你已经知道数组是1000.这只是一个产生数字1000的奇特方法,你可以将它存储在一个常数中并重复使用。
我无法理解为什么你认为你需要系统暂停。我无法看到程序的其余部分,因此我假设您想在控制台窗口关闭之前暂停。那么你可以启动一个命令提示符,只需从cmd窗口运行exe。然后它不会关闭。它会关闭,因为当您从调试器运行时,IDE将在完成程序运行后关闭控制台。根据您的IDE,可能有一个解决方案,但您需要告诉我们您正在使用的IDE或只是谷歌搜索您的搜索中的IDE名称的问题。
答案 2 :(得分:0)
据我了解,您需要以下内容:
我通常会实现我认为你想要的东西:
#include <iterator>
#include <algorithm>
#include <iostream>
struct number
{
int value;
};
std::ostream& operator << ( std::ostream& os, const number& n )
{
return os << n.value;
}
number numbers[] = { {1}, {0}, {2}, {0}, {3}, {0}, {4}, {0} };
template <class T, std::size_t N>
T* begin( T (&array)[N] )
{
return array;
}
template <class T, std::size_t N>
T* end( T (&array)[N] )
{
return array+N;
}
template <class T, std::size_t N>
std::size_t itemCount( T (&array)[N] )
{
return N;
}
bool is_zero( const number& n ){ return( n.value == 0 ); }
bool is_not_zero( const number& n ){ return( !is_zero( n ) ); }
void listNumbers()
{
std::cout << "Valid values are:" << std::endl;
std::remove_copy_if( begin( numbers ), end( numbers ),
std::ostream_iterator<number>(std::cout, "\t" ), is_zero );
std::cout << std::endl;
std::iterator_traits<number*>::difference_type count =
std::count_if( begin( numbers ), end( numbers ), is_not_zero );
std::cout << "There is " << count
<< " items with valid values out of a possible sequence of "
<< itemCount( numbers ) << "." << std::endl;
}
int main( int argc, char* argv[] )
{
listNumbers();
return 0;
}
我抛出了一些您可能会考虑的典型c ++概念,例如使用标准算法为您完成工作。我个人会使用向量而不是数组,以及带有成员函数(或lambda)的绑定器来检查值是否为零(反之亦然),但我已经使用了数组和一些非成员函数来获取这个想法。