[問題] 老手了卻還是不懂scanf
http://blog.yam.com/gookaa/article/3473147
這個網站說如果用完scanf 要清空緩衝區,可以用:
scanf("%d",&a);
while(getche() != '/n');
我的測試code長這樣: ( http://codepad.org/7ns9mHdO )
#include <iostream>
#include<conio.h>
using namespace std;
int main()
{
int a;
char ch[6],tmp;
memset(&ch,'*',6);
scanf("99%c",&ch);
//while(getche()!='\n');
for(int i=0;i<6;i++)
{
printf("%d:\'%c\'\n",i,ch[i]);
}
cout<<ch<<'\n';
while(tmp=getchar())
{
printf("\'%c\'",tmp);
}
scanf("88%c",&ch);
cout<<'\n';
for(int i=0;i<6;i++)
{
printf("%d:\'%c\'\n",i,ch[i]);
}
system("pause");
return 0;
}
==========================================
執行第10行scanf("99%c",&ch);時,我故意輸入"88o",這時根據cplusplus文件
(http://www.cplusplus.com/reference/clibrary/cstdio/scanf/)
預設讀到99%c,實際讀到88o,第一個字元不符合,便離開這個scanf,而"88o"就進入
緩衝區裡面。
12~15行我把ch字元陣列的元素個個印出來。
16行輸入"整個ch"字元陣列,理論上會輸出"******",但用codeblocks卻輸出"******@"
(奇怪的是,同樣的原始碼用dev C++,就只輸出"******")
16行接著再輸出"(char)10",根據ASCII表(http://tinyurl.com/y9o4bp8),
10為換行
18行,理論上會清空緩衝區(雖然我不曉得為什麼會這樣),但實際上卻一直停留在這一行
,一直讓我們輸入,卻無法進入下一行的 cout<<"in scanf:\n";
用了這麼久scanf,但真的來研究的時候,卻發現自己懂的好少。
有大神精通scanf的嗎?或是透漏一下有什麼說明清楚的文件可以看。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.230.240
推
12/13 16:46, , 1F
12/13 16:46, 1F
推
12/13 16:52, , 2F
12/13 16:52, 2F
→
12/13 16:53, , 3F
12/13 16:53, 3F
→
12/13 16:53, , 4F
12/13 16:53, 4F
→
12/13 16:54, , 5F
12/13 16:54, 5F
→
12/13 16:56, , 6F
12/13 16:56, 6F
推
12/13 17:13, , 7F
12/13 17:13, 7F
→
12/13 17:46, , 8F
12/13 17:46, 8F
→
12/13 17:53, , 9F
12/13 17:53, 9F
→
12/13 19:00, , 10F
12/13 19:00, 10F
推
12/13 22:28, , 11F
12/13 22:28, 11F
→
12/13 22:28, , 12F
12/13 22:28, 12F
推
12/14 13:23, , 13F
12/14 13:23, 13F
推
12/18 02:16, , 14F
12/18 02:16, 14F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
問題
6
14