初始C语言02-分支与循环(上)

举报
芒果_Mango 发表于 2022/01/29 21:45:22 2022/01/29
【摘要】 前言:有人可能觉得笔者写的东西很简单,没有写的必要!但是我想说的是,存在即合理!夯实基础才是yyds!知识分享yyds!不喜勿喷,谢谢各位!如有错误,欢迎斧正! 1.C语言是结构化的程序设计语言c语言中有3中结构:顺序结构,选择结构,循环结构空语句: ; //只有一个分号 2.C语言中非0表示真,0表示假判断:C语言中,1表示真,0表示假错: 非0表示真 3.else和if的匹配就近原...
前言:有人可能觉得笔者写的东西很简单,没有写的必要!但是我想说的是,存在即合理!夯实基础才是yyds!知识分享yyds!

不喜勿喷,谢谢各位!
如有错误,欢迎斧正!


1.C语言是结构化的程序设计语言

c语言中有3中结构:顺序结构,选择结构,循环结构

空语句:  ;			//只有一个分号

2.C语言中非0表示真,0表示假

判断:C语言中,1表示真,0表示假
错: 非0表示真

3.else和if的匹配

就近原则:else与最近的if匹配

#include<stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
		if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}
//什么也不打印
//因为if和最近的else匹配,因为不满足 a == 0所以不进入第一个if循环,所以不打印
//相当于		//增加了程序的可读性
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
    {
	  if(b == 2)
         printf("hehe\n");
       else
        printf("haha\n");
    }
    return 0;
}		

程序题:打印1-100的奇数并计算个数

//方法1:故意营造奇数出来打印,效率更高
int main()
{
    int count = 0;
    int i = 1;
    //while循环的写法
    /*
    while(i < 100)
    {
       printf("%d ",i);
        i += 2;
        count++;
    }
    */
    
    //for循环写法
    for(i = 1; i < 100; i+=2)
    {
        printf("%d ",i);
        i += 2;
        count++;
    }
    printf("1-100的奇数个数为:%d\n",count);
}
//写法2:产生1-100的数,奇数:除2余数为1
int main()
{
     int count = 0;
     int i = 1;
    while(i  < 100)
    {
        if(i % 2 == 1)
        {
          printf("%d ",i);
        }
          i++;
    }
	return 0;
}

4.EOF-end of file 文件结束标志

EOF-> 代表的值为-1


getchar() : 读取失败的时候返回EOF

  1. 返回的字符,本质是字符也是ASCII码值,是整数

  2. getchar 函数不仅仅是返回正常字符,还会返回EOF 是-1,所以放到整形变量中

    遇到ctrl+z时结束循环输入

循环输入的方法

//写法1
while( (c = getchar()) !=EOF)		//用括号括起来
    
while( scanf("%d",&a) != EOF)
  
//写法2
 while( ~(c = getchar()) )
 
  while( ~(scanf("%d",&a)) )
-1:
原码:10000000 00000000 00000000 00000001
反码:11111111 11111111 11111111 11111110
补码:11111111	11111111 11111111 11111111  
   内存中存放的是补码
    EOF-1  
    按位取反-1的补码 ->0序列  即为0

程序题:密码确认题 (缓冲区)

输入缓冲区:内存空间

scanf ,getchar:从键盘上输入东西到输入缓冲区, 从输入缓冲区拿东西

//err程序
int main()
{
    int ch = 0;
    char password[20] = {0};
    printf("请输入密码>:");
    scanf("%S",password);//数组名是首元素地址,不用加取地址
    printf("请确认密码(Y/N)>:");
    ch = getchar();
    if(ch == 'Y')
    {
        printf("确认成功\n");
    }
    else
    {
         printf("确认失败\n");
    }
    return 0;
}

image.png


   从键盘中输入字符到缓冲区,然后scanf,getchar拿东西,getchar一次只能读取一个字符,%s只能读到空白字符前的字符
    空白字符:空格,换行)
    因为最后一个是换行符(\n),所以我们要把缓冲区的字符清理干净,当getchar读取到\n使,说明缓冲区已经清理干净了
//正解
int main()
{
	int ch = 0;
	char password[20] = { 0 };
	printf("请输入密码>:");
	scanf("%s", password);//数组名是首元素地址,不用加取地址
	printf("请确认密码(Y/N)>:");
    //清理缓冲区字符
	while (getchar() != '\n')
	{
		;		//空语句,不处理
	}
	ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	return 0;
}

若想要读取有空格的作为密码:使用gets()函数

使用gets()则不用考虑缓冲区的问题

int main()
{
	int ch = 0;
	char password[20] = { 0 };
	printf("请输入密码>:");
	gets(password);			
	printf("请确认密码(Y/N)>:");
	ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	return 0;
}
今天就先到这吧~感谢你能看到这里!希望对你有所帮助!欢迎老铁们点个关注订阅这个专题! 同时欢迎大佬们批评指正!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。