1. 程式人生 > 其它 >C語言再認識

C語言再認識

C語言再認識

從printf()看輸出

  • 1、 請求printf()函式列印資料的指令要與待列印資料的型別相匹配,這是我們剛開始接觸到printf()函式時就學習到的,即一個待列印項對應一個列印說明。
  • 2、printf()函式的返回值
    我們大部分時間都將printf()函式當做一個輸出指令來呼叫,但它其實同樣是C中的一個內建函式,同樣有返回值。printf()返回列印字元的個數(通俗來講就是列印輸出中的字串長度)
  • 巢狀printf()函式的應用
    理解了第二點之後,這個就很好理解了。我們來舉一個例子:
printf
("%d\n",printf("hello!\n")); 首先我們理解的是先將printf中的內容帶入到%d中, 然後再輸出printf中的內容。但是其中帶有巢狀, 所以%d接收到的值其實是內層printf函式的返回值。

從scanf()角度來看待輸入

我們在剛接觸C語言時,最常用的就是printf()函式和scanf()函式,但是我們在剛使用的時候,知其然不知其所以然。所以我將在這裡對scanf()進行更深層次的講解。

  • 我們假設scanf()根據一個%d轉換說明讀取一個整數,scanf()每次讀取一個字元,跳過所有的空白字元,知道遇到第一個非空白字元才開始讀取。因為要讀取整數,所以scanf()希望發現一個數字字元或者是一個(+,-)符號。如果找到一個字元或者符號,它便儲存該字元,並讀取下一個字元。如果下一個字元依舊是數字字元的話,則儲存該數字並繼續讀取下一個字元。一次遍歷讀取和儲存數字類字元,直到遇到非數字類字元。當遇到非數字類字元時,它便認為讀到了數字的末尾,即這次讀取結束。然後,scanf()把非數字型別的字元放回輸入。意味著程式在下一次讀取輸入時,首先讀到的是上一次讀取丟棄的非數字類字元。
  • ===>這裡非常重要,我們在程式設計的時候經常會遇到在遇到多次輸入的時候回跳過某些scanf()函式,這正是因為“\n或者\t”同樣算是一個字元,若是與“\n或者\t”型別不同的輸入型別,則scanf()會將它存入緩衝區,下一個scanf()接收到的值則是緩衝區中已經存在的“\n或者\t”而不是程式暫停等待你的輸入。
  • 2、為什麼scanf()中讀取基本變數型別的值時要加&?
    變數名不代表地址,除非陣列。
    輸入是要對 變數所分配的記憶體區域賦值,便要找到相應的記憶體位置,便要地址(類似地址傳遞)。
    輸出只要變數的值,進行資料(類似值傳遞)就行。

如何終止while迴圈

1、這種方法最為簡單:while迴圈一直執行,知道判斷條件為假,自然就會終止

2、使用break語句跳出或者continue語句加速while的結束
3、這裡解釋一個概念:整數溢位:
首先我們先看一個例子

#include <stdio.h>
int main() {
	int i = 2147483647;
	unsigned int j = 4294967295;
	printf("%d %d %d \n", i, i + 1, i + 2);
	printf("%u %u %u\n", j, j + 1, j + 2);
	return 0;
}

在這裡插入圖片描述
在這裡我們可以把無符號整數看成汽車的里程錶。當達到它能表示的最大值時,會重新從起點開始計數。int型別的整數也是如此:它會從-2147483648開始表示。(當整數發生溢位時,程式並不會報錯來阻止執行,但是依然會有警告,所以不要忽視warning)
後面學到的後面再補充了嘻嘻