3 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
printf("Please enter an output filename: "); scanf("%s",&outfilename);
當(dāng)您輸入第二個(gè)字符串并按ENTER鍵時(shí),一個(gè)字符串和一個(gè)字符將被放置在輸入緩沖區(qū)中,它們分別是:輸入的字符串和換行符。該字符串被消耗,scanf
但換行符仍保留在輸入緩沖區(qū)中。
進(jìn)一步,
scanf("%c",&yn);
下一個(gè)scanf
用于讀取字符的字符僅讀取/使用換行符,因此從不等待用戶輸入。
解決方案是使用以下命令消耗多余的換行符:
scanf(" %c", &yn); ^^^ <------------Note the space
或使用 getchar()
您可能需要在這里查看我的答案,以逐步詳細(xì)地解釋問(wèn)題。

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
采用
scanf("%20s",&filename);
并記住stdin是行緩沖的,在Linux上遵循tty準(zhǔn)則
如果需要更詳細(xì)的控制,可以使用GNU readline或ncurses。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
scanf("%s", ...)
使\ n終止輸入中的行。它不會(huì)引起下一個(gè)問(wèn)題,因?yàn)閟canf(“%s”,...)以跳過(guò)白色開(kāi)始。 scanf("%c", ...)
不會(huì),因此您閱讀了\n
。
順便說(shuō)一句,您可能還會(huì)遇到其他問(wèn)題,即在文件名中放置空格(%s
不讀取它們),并且如果輸入的名稱太長(zhǎng)(%s沒(méi)有輸入長(zhǎng)度限制)。
解決您抱怨的問(wèn)題的一種方法(而不是另一種方法)是使用scanf(" %c", ...)
(請(qǐng)參閱%c
?之前的空格scanf
很難使用),該方法首先跳過(guò)空白。
- 3 回答
- 0 關(guān)注
- 715 瀏覽
添加回答
舉報(bào)