C 輸入獲取未知長度的行輸入陣列 與 輸出控制

2021-08-07 16:11:00 字數 2009 閱讀 6448

標頭檔案#include

程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入

cin >> n;                       //enter、space、tab作為結束條件(會將其丟出緩衝區)

ch = cin.get() | cin.get(ch) //enter作為結束符(不丟棄緩衝區中的enter,即下次輸入的是enter)

cin.getline(陣列名,長度,結束符) 大體與 cin.get(陣列名,長度,結束符)類似。

cin.get()當輸入的字串超長時,不會引起cin函式的錯誤,後面的cin操作會繼續執行,只是直接從緩衝區中取資料。但是cin.getline()當輸入超長時,會引起cin函式的錯誤,後面的cin操作將不再執行。

當輸入資料的長度不固定時,即以輸入結束符結束時:

abcd...balabla+enter

ctrl + z

enter

此時要獲取緩衝區中的字元或者陣列可以通過以下方式:

char ch;

ch = cin.get();

示例:

#include 

#include

#include

using

namespace

std;

void getin(vector

&vec)

if(ch == '-')

flag = 0;

if(minus == true)else

}if(flag == 0)

vec.push_back(val);

}int main()

cout

<< endl;

return

0;}

需要注意的是: 如果使用了控制符,在程式單位的開頭除了要加iostream標頭檔案外,還要加iomanip標頭檔案。

舉例: 輸出雙精度數。

double a=123.456789012345;                                      //對a賦初值

(1) cout

(2) cout

<9)(3) cout

<6); //恢復預設格式(精度為6)

(4) cout

<< setiosflags(ios∷fixed); //輸出: 123.456789

(5) cout

<8)(6) cout

(7) cout

<4)

int b=123456;                               //對b賦初值

(1) cout

(2) cout

(3) cout

(4) cout

<10)<','

(5) cout

<'*')<10)

(6) cout

例3.1 各行小數點對齊。

#include 

#include

using

namespace

std;

int main( )

輸出如下:

123.46 (字段寬度為10,右對齊,取兩位小數)

3.14

-3214.67

先統一設定定點形式輸出、取兩位小數、右對齊。這些設定對其後的輸出均有效(除非重新設定),而setw只對其後乙個輸出項有效,因此必須在輸出a,b,c之前都要寫setw(10)。

C 函式中獲取輸入的靜態陣列長度

假設有這麼一種情況 程式中定義了乙個靜態陣列,然後將這個陣列作為引數傳遞給某個函式,如何在該函式中確定陣列長度呢?int arr f arr 如何在函式 f 中確定 arr 的長度?c 語言中遇到這種情況,一般是直接將陣列長度作為引數傳遞給f voidf int arr,int n int arr ...

c語言輸入一行未知個數數字存入陣列

include includeint main for i 0 i n i return 0 c庫函式isdigit 是標頭檔案ctype.h中宣告的乙個函式。原型為 int isdigit int c 作用 判斷c指定的字元是否為數字字元,即 0 9 如果是,返回1 否則,返回0。isdigit函...

c語言輸入一行未知個數數字存入陣列

一直有個疑問輸入一行數字存入陣列時若不知道數字的個數怎麼辦,最容易想到的辦法就是接收字元然後轉化為數字,但這樣太過麻煩。今天上網查了下,說可以用ungetc 函式將字元送回輸入流,在這裡總結歸納一下 此外還意外的解決了另外一些以前遇到的問題,也是在除錯 時發現的,用此段 可以用除了空格以外的字元作為...