1樓:湛藍水晶
因為第一個程式是while迴圈完了才printf結果,只有一次輸出。
第二個程式是在while迴圈過程中就putchar,所以在輸入過程中會輸出結果。
2樓:暴秋穎
while((c = getchar()) != eof)//這裡是死迴圈 eof是???若判斷是輸入一字元則跳出顯示結果 該是
3樓:與子如初見
第一個是個死迴圈。換行肯定起作用。
第二個把輸出寫到迴圈外面。
4樓:匿名使用者
你好,是這樣的,且聽我細細道來
給你舉個例子你就明白了
while((c = getchar()) != eof)printf("%d", nl);
這個輸出printf是在循序執行完畢之後才有的。所以每次輸入都沒有輸出,到最後輸入完了才出結果
while((c = getchar()) != eof)而這個輸出printf是在循序裡面的。所以每迴圈一次輸入都會輸出。
區別就在於輸出函式是什麼時候執行的,它執行了才會有輸出。
5樓:匿名使用者
一:你的c型別應該設定為char型別,雖然int型別也能用,但有點浪費;
二:enter 是 換行 回車 的組合,即\r \n;
三:我的win7 系統用dos時,兩段**都用過換行,但是沒有出現你說的情況;
四:當你輸入一行單詞完畢後,按enter鍵已經清空快取,所以可能無法實現輸入多行單詞,不過如果輸入很長,它會像文字檔案一樣換行,(所以,改進輸入多行單詞這個問題,很抱歉,幫不了你);
關於c語言中陣列定義問題
6樓:育知同創教育
主函式內定義的陣列在堆疊段中分配記憶體。
全域性變數陣列在資料段中分配記憶體。
一般資料段比堆疊段大很多,
所以堆疊段分配不了的記憶體,資料段可以分配
(1)在堆疊段中分配記憶體,由於太大無法分配,所以錯誤。
(2)在資料段中分配記憶體,資料段可以分配,無錯誤。
(3)陣列比(1)需要的記憶體少,在堆疊段大小範圍內,可以分配,無錯誤(4)同(3)
關於c語言中的換行符和回車符
7樓:
注意有兩個比較特殊的字元
回車符和回車換行符
'\xd'這是個轉義字元
其中的x表示他是一個16進位制數
16進位制的d就是10進位制的13
也就是 '\r' 字元,也就是回車符(注意跟'\n'這個回車換行符比較)
輸入這個字元後,游標會跳到本行首,注意是本行首位,好了看你的**
#include
void main()
第二段**:
#include
void main()
8樓:金色潛鳥
printf("%c",'a'); 在本行第一格,列印字元a
printf("%c",'\xd'); 游標移動到本行第一格 因為 \xd 是16進位制編碼 0x0d, 是控制字元 「回車」。
printf("%c",'b'); 在當前位置上 列印字元b,這就把原來本行第一格處的字元改寫了。
printf("%c",'a'); 在本行第一格,列印字元a
printf("%c",'c'); 在本行第二格,列印字元c
printf("%c",'\xd'); 游標移動到本行第一格
printf("%c",'b'); 在當前位置上 列印字元b,把原來本行第一格處的字元改寫成b
第一格是b,第2格是c
看到是 bc
0x0a -- 新行,換行,new-line, line feed (lf)
0x0d -- 回車,carriage return, (cr)
9樓:匿名使用者
將printf("%c",'\xd');
改為printf("%c",'\x0d');
結果還是一樣嗎
10樓:徐爰箕採萱
文字檔案的行結束符,傳統上
pc機用
crlf
蘋果機用cr
unix用lf
cr--
回車符,c語言'\r'
lf--
換行符,
c語言'\n'
不同計算機上c語言統一規定為:
文字檔案的行結束符一律變成一個符號lf,也就是換行符,也就是newline符,
也就是'\n'.
「回車和換行符轉換成一個換行符」--
對pc機而言,文字檔案行結束符,crlf讀入後,丟掉cr,留lf.
例如fgets()
讀入一行,行尾只有lf,沒有cr.
c語言換行符和回車符的疑問
11樓:瀚漠
這個是和緩衝區有關的,使用者輸入的資料是儲存在緩衝區的,然後執行:scanf、gets等會從緩衝區讀資料。
在執行完scanf之後執行getcha確實接收到了『\n' ,這是因為scanf只接收了數字,緩衝區還有輸入的'\n' ,當呼叫getchar的時候不需要你再輸入它就已經接收到了資料,如果你把if去掉,那gets也不會等待你輸入,直接接收緩衝區的回車符。
在執行完scanf後想接收字元類資料就必須把緩衝區清空(flush)或者像這裡呼叫一次getchar,這樣gets函式才能順利執行。
不知道我這樣講你能不能明白,還有疑問可以接著問......
12樓:匿名使用者
因為 你在輸入資料後會按 鍵盤上的回車鍵(是 '\n')scanf 遇到回車鍵會結束讀取資料,但是不會將 '\n' 從鍵盤緩衝區讀出,便會在鍵盤緩衝區
如果加 getchar(),便會讀出 '\n'
如果沒有, 等到gets()讀取鍵盤緩衝區內容是,發現'\n',認為讀取結束,便返回,雖未讀取任何字元,但是會讀出'\n',對於gets()來說,'\n'不是它要讀取的內容,便會丟棄!
13樓:匿名使用者
問的問題好奇怪,程式既沒有return ,exit,也沒有堆疊溢位,怎麼會失效?
建議你在return 0;之前加一句printf("main end.\n");你就知道程式沒有失效了。
另外關於\r還是\n,系統會自動幫你轉換成\n,按照你這個程式的寫法你只需要在程式裡面判斷\n就可以了,多餘你不用考慮。
14樓:匿名使用者
原因是在這兩個函式上getch()和scanf()上.'\n'和'r'其實都是回車鍵產生的字元.只是scanf()或getchar()遇到回車鍵就會獲得'\n'
而getch()遇到回車就得到'\r',為了檢驗我所說.寫了程式檢驗:
main()
/*結果是10,也就是'\n'*/
main()
/*結果是13,就是'\r'*/
造這個的原因是stdin流.因為getch()不從stdin流中讀取資料,而是讀取使用者即時輸入資料.
15樓:數學之星
c語言中用「printf」輸出時,換行符是'\n',回車符是'\r'。
c語言中用「scanf」獲取輸入值時,獲取的「敲鍵盤回車鍵產生的字元」是換行符。
你把if語句去掉之後,「gets(name) ;puts(name) ;」這兩句語句沒有失效,而是把換行符獲取、輸出了。由於你沒有在這兩句語句後面放置暫停語句,這兩句語句把換行符獲取、輸出後程式直接結束了,沒有讓你看到效果,所以你認為這兩句語句失效了。
關於c語言中指標賦值的問題,關於C語言中指標賦值的問題
計算天下 你這樣想說明你還沒有真正理解記憶體和指標。int a 表示編譯器隨機取出一個空閒的地址分配給a,不妨設為00000000,長度為sizeof int 不同編譯器可能不同。int p 也表示隨機取出一個空閒的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在儲存...
C語言中關於「有效數字」的問題,在c語言中,有效數字和有效數位怎麼解釋?
當你輸入2.2e2時a 4.84,而輸入2.2e 2時a 0.20661157024793388429752066115702.它們的是float型,放在記憶體中是 2.2e2 01000011 0,1011100 00000000 00000000,2.2e 2 00111100 1,010010...
C語言關於邏輯值的問題有加分,c語言中,關係表示式和邏輯表示式的值是什麼?
首先對你的苦惱表示理解和同情。一句話,二值世界中只有0和非0兩個概念,如何再有1?1的引入只是編譯器實現和人類的習慣。c語言標準規定 0為假,非0為真 這是毫無疑問的。但是 非0 並不是一個具體的值,大多編譯器都把 非0 實現為1,照顧人類習慣,但引起了很多誤會。第一題 a毫無疑問 第二題 k k是...