小学scanf()~

小学scanf()~

作者: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
0