scanf()函数在循环中的应用 您所在的位置:网站首页 scanf输入两个数组 scanf()函数在循环中的应用

scanf()函数在循环中的应用

2023-07-02 18:17| 来源: 网络整理| 查看: 265

scanf()函数在循环中,特别是多次输入数据时,在数据,空格,和’\n’之间老弄不明白,导致编的程序与自己想的不一样,今天测试了一遍,发现的他们之间的关系: 结论是:多次输入数据(中间有空格),最后是’\n’时,scanf()函数接收数值,对空格不理睬。但如果不小心输入非空格,非数字,scanf()也会接收。特别是scanf(),后面还有scanf()时,两个scanf()会依次接收缓存区你输入的东西,但记住数值scanf()不理睬空格; 举例如下: #include #include int main() { int a[5]; x=0; while(true) { scanf("%d,&a[x]); x++; printf("%d",a[x-1]); } system(“pause”); return 0; } 一,此时输入:1(此处有很多空格)2(最后按Enter键) 此时缓存区为:1 2\n 此时输出:1 2(等待输入),因为第二次循环时scanf()不会理睬1之后,2之前的空格 二,此时输入:q(非数值)(最后按Enter键) 此时缓存区为:q\n 此时输出:循环乱码 三,此时输入:空格(最后按Enter键) 此时缓存区:空格 此时输出:等待输入,因为scanf()不理睬空格 大家经常用到的是两个scanf()(或一个scanf(),一个getchar())在循环中连用,那么还是如第一段所述,scanf()或getchar()依次接收缓存区的内容,如果此时不了解机制,程序就不会按预想的执行。 举例: #include #include int main() { int a[5]; x=0; while(true) { scanf("%d,&a[x]); x++; printf("%d",a[x-1]); if(getchar());

} system(“pause”); return 0; } 这个程序比上一个程序多了一个if(getchar());这个语句用来接收缓存区的东西 此时输入:1q2(最后按Enter键) 缓存区:1q2\n 此时输出:1 2 因为第一次循环1被scanf()接收,q被getchar()接收,第二次循环2被scanf()接收,\n被getchar()接收,记住getchar()会接收任何字符,包括空格和\n。 如果如下程序: #include #include char d; int main() { int a[5]; x=0; do{ while(true) { scanf("%d,&a[x]); x++; printf("%d",a[x-1]); if(getchar()’\n’); break; } printf(“是否继续输入?y\n”); scanf("%c",&d) getchar(); if(tolower(d)‘n’) break; else x=0; }while(tolower(d)==‘y’); system(“pause”); return 0; } 上面的例子注意,scanf()和getchar()连用时,getchar()最后有‘\n’,如果不消除他,他会进入下个scanf(),所以在下个scanf()之前加getchar()接收这个对下个scanf()没用的’\n’。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有