天天看點

杭電oj----1000+scanf("%d%d",&num1,&num2)!=EOF的了解

@君照流華

杭電第1000道,對程式結束條件産生迷惑,然後試着研究了一下scanf函數

題目比較水,但是剛開始看英文對程式結束條件十分疑惑,

後來看了小夥伴貼的代碼發現程式不需要結束條件,隻要求對輸入能夠輸出結果

解決代碼如下

#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int num1,num2;
//C++
//  while(cin>>num1>>num2)  
    while(scanf("%d%d",&num1,&num2)!=EOF)		//C
        cout<<num1+num2<<endl;
    return 0;
}
           
  1. EOF = “end of file”,在程式中對應的是有符号數-1。

    而ASCII代碼值的範圍是0~127,不可能出現-1,是以可以用EOF作為檔案結束标志。

    很多檔案處理函數處錯誤後的傳回值也是EOF,是以常被用來判斷調用一個函數是否成功。

  2. scanf函數有傳回值,當其成功讀入幾個值,傳回值就為幾。 是以代碼判斷條件scanf("%d%d",&num1,&num2)!=EOF中,

    成功讀入一個結果為1;讀入兩個為2;讀入失敗則為0;不會等于EOF對應的-1。

    !!!注意:EOF的使用需要調用stdio.h的庫