c语言:关于scanf()语句与while循环的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言:关于scanf()语句与while循环的问题相关的知识,希望对你有一定的参考价值。

在你输入y回车后,键盘的缓冲区中会存在一个y和一个'\n'(回车符)。所以第第一次你的a会读入字符y,然而第二次输入y时,缓冲区中还有一个回车符在,所以第二次读入的是第一次残留在缓冲区的回车符,而不是新输入的y。所以不满足条件,退出循环。
修改方法:
在scanf语句前加一句:fflush(stdin);这句的作用是清空缓冲区(就是所谓的流)中内容,这样你再次输入y的时候就不会读到上次剩余的回车符了。
参考技术A 三点:
1.
scanf从缓冲区读取:你输入的字符串会保存在一个缓冲区内,scanf在正确的时候是到这个缓冲区中读取字符,并且从缓冲区中删除字符。但如果是%d格式碰到了字母,则不会读取也不会删除,之后abc还在缓冲区内。
2.
scanf不停止:如果缓冲区内有内容,scanf是不会停下来等你输入的,因为abc一直在缓冲区内,所以造成了一直不停重复循环。
3.
scanf的返回值:scanf如果成功返回的是输入的个数,当你输入abc的时候,scanf失败,返回0,则条件一直成立,所以造成了死循环

24)C语言之for循环与do{}while();循环

for循环

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//for 循环弥补while循环的缺陷

int main()

{

    int i = 0;

    for (i = 1; i <= 10; i++)//i=1执行一次->判断部分->语句块->i++->i<=10-》语句块->i++->i<=10->语句块->......

    {

       if (4 == i)

           continue;//跳过本次循环,跳到i++

       if (i == 7)

           break;//终止for循环

       printf("%d ", i);

    }

    return 0;

}

/*

    for(表达式1;表达式2;表达式3)

    循环语句;

    //表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断

    //循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。

    //表达式1,表达式2,表达式3都可以不写

*/

//while循环的缺陷

/*

    int main()

    {

       int i=1;//初始化

       ......

       ......

       while(i<=10)//缺点:初始化部分有时候离判断部分太远

       {

           printf("%d",i);

           i++;//调整部分//缺点:调整部分离判断部分太远

       }

       return 0;

    }

*/

do while循环

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//do while循环,至少循环一次

int main()

{

    int i = 0;

    do //先执行语句再进行判断

    {

       if (4 == i)

       {

           i++;

           continue;//结束本层循环跳到while(i<10)进行判断

       }

       if (7 == i)

       {

           break;//结束do while循环

       }

       printf("%d ", i);

       i++;

    } while (i < 10);

    return 0;

}

25)C语言之goto语句

以上是关于c语言:关于scanf()语句与while循环的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于c语言循环与布尔运算的问题

c语言请问while循环为啥执行不了?

C语言scanf语句导致无法进入循环?

C语言while(scanf("%d",&num)==1);语句的一个问题

C语言基础

C语言do while问题