我的代碼沒有問題。我嘗試使'while'循環讀取我所有的輸入值,然後停止當我點擊EOF。我已經讀過Windows中的EOF是CTRL + Z等,但我的'while'不想停止,並且在所有輸入值和CTRL + Z之後,它保持並等待下一個值。 這是我的代碼,希望您能幫幫我謝謝):如何在EOF後停止讀取值
#include <stdio.h>
#include <stdbool.h>
#define gc getchar
inline int scan_integer();
inline void zaprzeczenie(bool*);
int main() {
bool rosnie=true;
int poprzednia;
register int terazniejsza;
terazniejsza = scan_integer();
poprzednia = terazniejsza;
int sumaAktualnego=terazniejsza;
int sumaNajwiekszego=terazniejsza;
int iloscAktualnego=1;
int iloscNajwiekszego=0;
int staly=1;
int sumaStalego=0;
while(!feof(stdin))
{
printf("%d ",terazniejsza);
terazniejsza = scan_integer();
if(terazniejsza<poprzednia){
if(rosnie){
if(iloscAktualnego>iloscNajwiekszego){
iloscNajwiekszego=iloscAktualnego;
sumaNajwiekszego=sumaAktualnego;
}
iloscAktualnego=1;
sumaAktualnego=terazniejsza;
if(staly>1){
iloscAktualnego+=staly;
sumaAktualnego+=sumaStalego;
staly=1;
sumaStalego=0;
}
zaprzeczenie(&rosnie);
}
else{
sumaAktualnego+=terazniejsza;
iloscAktualnego++;
}
}
else if(terazniejsza>poprzednia){
if(rosnie){
sumaAktualnego+=terazniejsza;
iloscAktualnego++;
}
else{
if(iloscAktualnego>iloscNajwiekszego){
iloscNajwiekszego=iloscAktualnego;
sumaNajwiekszego=sumaAktualnego;
}
iloscAktualnego=1;
sumaAktualnego=terazniejsza;
if(staly>0){
iloscAktualnego+=staly;
sumaAktualnego+=sumaStalego;
staly=1;
sumaStalego=0;
}
zaprzeczenie(&rosnie);
}
}
else if(terazniejsza==poprzednia){
staly++;
sumaStalego+=poprzednia;
sumaStalego+=terazniejsza;
sumaAktualnego+=terazniejsza;
iloscAktualnego++;
}
poprzednia=terazniejsza;
}
if(iloscAktualnego>iloscNajwiekszego){
iloscNajwiekszego=iloscAktualnego;
sumaNajwiekszego=sumaAktualnego;
}
printf("%d %d",iloscNajwiekszego, sumaNajwiekszego);
}
inline int scan_integer()
{
register int c = gc();
int wejsciowa = 0;
for(; ((c<48 || c>57)); c = gc());
for(;c>47 && c<58; c = gc()) {
wejsciowa = (wejsciowa << 1) + (wejsciowa << 3) + c - 48;
}
return wejsciowa;
}
inline void zaprzeczenie(bool* boo){
boo=!boo;
}
PS:對不起,拋光變量)
請正確格式化您的代碼。 –
[爲什麼「while(!feof(file))」總是出錯?](http://stackoverflow.com/q/5431941/1679849) –
需要測試'gc()'返回'EOF'的時候。 – chux