我正在做一個硬件分配和我的教授使用此代碼來測試我們的程序:EOF字符(Ctrl + d)
int main()
{
const int SZ1 = 10;
const int SZ2 = 7;
const int SZ3 = 5;
float array1[SZ1];
float array2[SZ2];
float array3[SZ3];
DisplayValues(SortValues(GetValues(array1, SZ1), SZ1), SZ1);
DisplayValues(SortValues(GetValues(array2, SZ2), SZ2), SZ2);
DisplayValues(SortValues(GetValues(array3, SZ3), SZ3), SZ3);
return EXIT_SUCCESS;
}
float *DisplayValues(float *p, size_t n)
{
float previous = *p, *ptr, *end = p + n;
setiosflags(ios_base::fixed);
for (ptr = p; ptr < end; ++ptr) // get each element
{
cout << *ptr << '\n';
if (ptr != p) // if not first element...
{
if (previous < *ptr) // ...check sort order
{
cerr << "Error - Array sorted incorrectly\n";
return NULL;
}
}
previous = *ptr; // save this element
}
resetiosflags(ios_base::fixed);
return p;
}
#endif
我用
float *GetValues(float *p, size_t n)
{
float input;
float *start = p;
cout << "Enter " << n << " float values separated by whitespace: \n";
while (scanf("%f", &input) == 1) {
*p++ = input;
}
return start;
}
從中獲取輸入按照他的指示終端窗口,然後使用ctrl + d輸入一個EOF字符,以便第一次調用DisplayValues(SortValues(GetValues(array1,SZ1),SZ1),SZ1)。但是,當DisplayValues(SortValues(GetValues(array2,SZ2),SZ2),SZ2)時,程序的其餘部分剛剛結束而不讓我輸入值。叫做。是否有這樣的理由或解決方法?謝謝。
注意您的GetValues在讀取值(在您的scanf循環中)時根本不使用* n *。 – 2010-02-21 07:31:03