1
我想寫程序,將從標準輸入讀取整數,並打印他們的gcd。如果兩個整數都是總數,我打印"prime"
。在結束程序打印到stderr
- "DONE"
之前。當用戶輸入錯誤的數據時,我想打印到stderr
- "ERROR"
。所以我寫這個代碼:檢查輸入和stderr
#include "stdio.h"
#include "nd.h"
#include "nsd.h"
int main() {
int in1, in2;
int tmp;
while (1) {
tmp = scanf("%d %d", &in1, &in2);
if (tmp == EOF) {
fprintf(stderr, "DONE\n");
break;
}
if (tmp != 2) {
fprintf(stderr, "ERROR\n");
} else if ((nd(in1) == 1) && (nd(in2) == 1)) printf("prime\n");
// nd(int a) return 1 when a is prime
else printf("%d\n", gcd(in1, in2));
}
return 0;
}
我想在"ERROR"
之後繼續工作。但它不起作用,我試過在fprintf(stderr, "ERROR\n");
之後加continue;
,但它也不起作用。所以,我想:
- program run
5 10
5
1 3
prime
1 0.9
error
// not break here!
10 2
2
...
//EOF
DONE
- program stop
一切都是工作,除了"ERROR"
,我有這樣的:
- program run
5 0.9
ERROR
ERROR
ERROR
ERROR
...
//never stop
據我所知,在循環週期是正確的工作。我的問題是我必須改變從「我擁有的」到「我想要的」。
非常有幫助,謝謝。只有一個額外的問題。 輸入: '0 0,2; 0; //必須按/ n比錯誤; 錯誤;' 但必須是: '0 0,2; 錯誤;' –
所以如果我輸入的是'\ n'而不是'ERROR',但是如果我輸入'2 0.2'然後'0'(0.2不是整數,所以必須是'ERROR') –
@Alexey Sharov'stdin'通常是_line_緩衝的,所以你的代碼在輸入''\ n''之前什麼都看不到。所以''\ n''是必需的。你的第二條評論 - >修正答案。 – chux