作者:LAMP小白 点击:1893 发布日期:2012-09-26 01:02:00 返回列表
我有的地方没有return 0;这样是不对的,这样操作系统会不知道你的程序是否正常结束
最简单的scanf
#include mio_lt;stdio.hmio_gt; int main(void){ int aa = 0; int bb = 0; int cc = 0; scanf("%d %d %d", mio_amp;aa, mio_amp;bb, mio_amp;cc); printf("you press %d-%d-%d", aa, bb, cc); return 0; }
scanf()函数接收输入数据时,遇以下情况的时候会认为数据输入结束了:
但不会停止scanf,因为scanf直到回车才会结束
1.输入了空格,回车或TAB
2.宽度限制
3.非法输入比如 这些东西
#include mio_lt;stdio.hmio_gt; int main(void){ char str[20] = ""; scanf("%s", str); printf("n%sn", str); }
如果输入 haha heihei 就只会输出haha,但heihei理论上仍然在缓冲区保留,但是这时缓冲区的首尾指针已经相等了,也就是说缓冲区已经清空了.
但scanf()函数是扫描stdin,所以我们还是能在stdin找到残存的信息
#include mio_lt;stdio.hmio_gt; int main(void){ char str1[20] = ""; char str2[20] = ""; char str3[20] = ""; scanf("%s", str1); printf("n%sn", str1); sleep(5); scanf("%s", str2); scanf("%s", str3); printf("n%sn", str2); printf("n%sn", str3); }
输入 haha hoho hehe 后 str1,2,3 分别为haha hoho hehe
但是完全没必要这么麻烦,可以用%[]轻松解决
#include mio_lt;stdio.hmio_gt; int main(void){ char str[30] = ""; scanf("%[^n]", str); printf("%s", str); return 0; }
他会捕获n前面的全部输入(当然你超过声明的30位那就没办法了 - -)
上一篇:由variable-sized may not be initialized想到的 下一篇:快递查询API