C語言輸入多組資料------“~”與 “EOF”的抉擇
while(~scanf("%d",&A))
通過這樣這樣也可以獲取多組資料
~ 是按位取反運算子,屬於單目運算子的一種
自己昨天寫的第一篇文章中小小地記錄了一下用EOF如何輸入多組資料
EOF,C語言輸入多組資料
我們也都知道其中while裡面的條件是符合時繼續迴圈
!=EOF
可以看出EOF就大概被定義了一個數值,為-1
EOF—百度百科
概念
在C語言中,或更精確地說成C標準函式庫中表示檔案結束符(end of file)。在while迴圈中以EOF作為檔案結束標誌,這種以EOF作為檔案結束標誌的檔案,必須是文字檔案。在文字檔案中,資料都是以字元的ASCII程式碼值的形式存放。我們知道,ASCII程式碼值的範圍是0~127,不可能出現-1,因此可以用EOF作為檔案結束標誌。
其實可以這樣理解,當scanf成功獲取到值與定義的EOF值-1是相匹配的
關於scanf返回值可以看看這個:
C語言scanf返回值
1.Scanf函式返回值就是讀出的變數個數,如:scanf( “%d %d”, &a, &b ); 如果只有一個整數輸入,返回值是1,如果有兩個整數輸入,返回值是2,如果一個都沒有,則返回值是-1。
2.EOF是一個預定義的常量,等於-1。
這點可能比較難理解,scanf如果取不到值,就返回-1,這個情況是在輸入值的前提條件下,但是我們並沒有給他值,所以跟我們不給他資料,他會一直等著我們輸入,而不是返回-1,這兩個就不矛盾了
弄懂了這個關鍵步驟,文章開頭的也就就能很快的理解了
因為:-1按位取反的值為0,while(0)就不符合條件了,所以跳了出來。
-1是這樣表示的:
-1的絕對值是1,二進位制0000 0001,取反為1111 1110,加1等於1111 1111,所以-1為1111 1111,這個取反當然是0000 0000
作為一個ACMer,這兩種方式很顯然是都可以的,(一般用於多組取值)
但剛才逛論壇找問題答案時也看到了如果是字元的話,可能就不那麼順利,如下:
所以,就看大家自己的喜好
抉擇
(ps:最近爐石玩的火熱~)
用哪種方式嘍~
相關推薦
C語言輸入多組資料------“~”與 “EOF”的抉擇
while(~scanf("%d",&A)) 通過這樣這樣也可以獲取多組資料 ~ 是按位取反運算子,屬於單目運算子的一種 自己昨天寫的第一篇文章中小小地記錄了一下用EOF如何輸入多組資料 EOF,C語言輸入多組資料 我們也都知道其中whi
打鐵就女裝(1) C 如何輸入多組資料
while(~scanf("%d",&A)) ~ 是按位取反運算子,屬於單目運算子 通過這樣這樣也可以獲取多組資料 while(scanf("%d",&A)!=EOF) 這種方式通過檔案結束標誌完成資料的連續輸入 但是這種方法有一個弊端 當輸入為字
C語言輸入一組值,最大的元素與第一個交換,最小的與最後一個交換
#include<stdio.h> //輸入一組值,最大的元素與第一個交換,最小的與最後一個交換void main(){int i,j,k,f[10],max,min,small,big;for(i=0;i<10;i++) scanf("%d",&
c語言cJson數組生成與解析
scu 長度 c語言 數組 != res bject urn dds 1.生成 json char* CreatJsCustNo( BT_BNF_CUST *p, char *strPaperNO) { cJSON *pJsonArry,*pJsonsub;
關於連續輸入多組資料的淺談
這裡是本鹹魚的第一篇部落格,由於被一道水題給搞的要死要活的,心態爆炸,於是去問了下大佬鼠,然後知道了不少東西,在這裡記錄一下,先粘下這個水題 再粘上鹹魚我的錯誤程式碼 #include<bits/stdc++.h> using namespace std; int main
ACM連續輸入多組資料問題
一直對這個不太熟悉,故拿出一些簡單題目進行練習,現在清楚了很多 假設每次要輸入4個數 自己常犯錯誤 用while (true){ 在這裡實現輸入4個數並做後續處理 },這個明顯是死迴圈,程式不會結
c語言對一組資料隨機排序
2014 神州綠盟暑期實習生筆試題-------程式程式設計第一題:第一種方法:使用自己構造的函式來根據每次的位置資訊返回亂序的數字 /* * * 程式功能:對指定的陣列,進行隨機排序,交換陣列中的資料位置 */ #include <stdio.h>
c語言輸入輸出函式printf與scanf的用法格式
一樣多, 各引數之間用","分開, 且順序一一對應, 否則將會出現意想不到的錯誤。 1. 格式化規定符 Turbo C2.0提供的格式化規定符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━ 符號 作用 ───────────────
ACM入門------C語言中如何實現多組資料輸入輸出
在“百度知道”看到的,自己只做相應的筆記整理。 輸入格式:有多個case輸入,直到檔案結束 輸出格式:一行一個結果 Problem Description Your task is to Calculate a + b. Too easy?! Of c
C語言基礎學習基本資料型別-變數的輸出與輸入
變數的輸出 變數如何輸入輸出呢?實際上,在這之前你已經使用過輸出語句(printf語句)了,我們可以使用printf來執行輸出。 printf語句的使用方法如下: printf(格式控制字串, 資料1, 資料2, 資料3.......); 格式控制字串用特定的格式說明符代表輸出的資料型別,這裡的資料可以是變
C#語言中數組與集合的區別(以List集合為例)
類型 添加元素 list 添加 一個 保存 操作方法 適用於 length 數組用於保存固定數量的數據,定長,占用內存少,遍歷速度快; 集合保存的數據數量,可以在程序的執行過程中,不斷發生變化,不定長,占用內存多,遍歷速度慢; 在功能上,數組能實現的所有功能,集合都能實現;
C語言輸入與輸出總結
1. scanf輸入: 特點:除%c外,讀取輸入時會跳過非白字元前的所有空白字元,然後一直讀取字元,直到空白字元或正在讀取字元不匹配的字元.(不匹配的會丟入緩衝區.作為下一次輸入接收的字元). 技巧: ①:把*放在%和轉換字元之間時,可以讓scanf()跳過相應輸出項. 比如:sca
C語言--查詢數組中出現次數最多的元素
次數 最大值 定義 style 取出 ++ main print 存儲 查詢數組中出現次數最多的元素#include <stdio.h> #include <malloc.h> #include <stdlib.h> int max_c
C++輸入多行資料
動機 程式設計題常用需求,比如輸入兩行資料。 解決思路:使用getline 程式 #include <iostream> #include <vector> #include <string> #include <algorithm> using na
C++從鍵盤輸入多行資料
遇到很多筆試題不是事先留好的介面寫函式,而需要自己從鍵盤輸入多行資料。 下面是利用C++類從鍵盤獲取資料: #include <iostream> using namespace std; class Node { public: int a;
《C++語言程式設計基礎》學習類與物件之多檔案結構和預編譯命令
C++程式的一般組織結構: 一個工程可以劃分為多個原始檔,例如: 類宣告檔案(.h檔案) 類實現檔案(.cpp檔案) 類的使用檔案(main()所在的.cpp檔案) 利用工程來組合各個檔案。Point.h class Point { //類的定義 public:
多組資料的輸入和n組資料的輸入
在新接觸一門語言時,特別是這種抽象的語言,我覺得在入門階段是最難的,可能到現在我也沒有入門吧,我記得剛開學時打oj,困擾我許久的問題是多組資料的輸入,還有n組資料的輸入。 下面是輸入不定組資料,直到檔案終止,即EOF(end of files),EOF也是-1,而
C語言實現(摘自資料結構與演算法分析 C語言描述)
一、概述: 棧(stack)是限制插入和刪除只能在一個位置上進行的表,該位置是表的末端,叫做棧的頂(top)。對棧的基本操作有Push(進棧)和Pop(出棧),前者相當於插入,後者則是刪除最後插入的元素。 棧有時又叫做LIFO(後進先出)表。在圖1中描述的模型只象徵著Pus
(一個檔案多組資料輸入的)韓信點兵問題
韓信點兵問題 網上找到的答案都是隻能輸入一組資料立即給出結果的,這裡是能輸入多組資料然後一次性輸出全部結果的。 描述 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入包含多組資料,每組資料
輸入多組字串 方法getline()與vector
方法一: 利用getline()函式 getline函式對空白符的處理:不忽略空白符,即把空白符也當成元素儲存到string物件中,讀取字元一直到換行符(回車),讀取終止且丟棄換行符(換行符從輸入流中丟去且不儲存在string物件中) cin函式對空白符的處理:讀取並忽略