C输入字符过滤回车的四种方法(以及不同形式%d输出)

目录

一、列举一下避免回车的四种方法:

二、其他形式%d


一、列举一下避免回车的四种方法

❤1、手动\n。

在scanf()中使用’\n’屏蔽回车符号。
scanf("%c", &c);


❤2、scanf空格。

在scanf()括号首位添加空格,过滤回车字符。
scanf(" %c", &c);                         //%c 前面加空格,过滤回车。


3、getchar()。

接收字符前,使用getchar()来读取一次回车符号。
scanf("%d", &n);
getchar();                                   // 读取上次输入的回车字符
scanf("%c", &c);


4、fflush。

接收字符前,使用fflush()清空输入流中缓冲区中的内容。(位于头文件#include<stdlib.h>)
scanf("%d", &n);
fflush(stdin);//清空输入流缓冲区的字符,
scanf("%c", &c);


————————————————

附几处出的错:

————————————————

1、打完中文后写了中文分号。

2、算式中的2a应写成2*a,漏了‘*’。

3、判断语句中==写成=。

4、热知:设置宽度后默认输出右对齐(C语言可以printf(“%-8d”,a)也就是加个负号)

二、其他形式%d

%-8d:左对齐,宽8位

%08d:宽度小于8时前面用0补位

%8.2f:保留小数点后两位

—————————————————(见文末代码,题目:日期菜单)

#include <stdio.h>
#include <math.h>
int main()
{
void menu1(int a);
void menu2(int a,int b,int c);
    char start;
    int year,a,b,c;
    while(1){
        printf("主菜单\n");
        printf("(1) 闰年计算,请输入a\n");
        printf("(2) 星期计算,请输入b\n");
        printf("(3) 退出程序请输入q\n");
        scanf(" %c",&start);/此处有空格!不然无法忽视回车!
        switch(start){
            case 'a':
                printf("子菜单(1)\n");
                printf("1)请输入年份:");
                printf("2)退到主菜单请输入 -1\n");
                menu1(year);
                break;

            case 'b':
                printf("子菜单(2)\n");
                printf("请输入年月日 ");
                printf("2)退到主菜单请输入 -1;-1;-1\n");
                menu2(a,b,c);
                break;
                
            case '\n':;
                break;

            case 'q':
                printf("嘻嘻,结束喽\n");
                return 0;
                
            default:
                printf("?xc么\n");
                break;
        }
    }
    return 0;
}
void menu1(int a){
    scanf(" %d",&a);
    if(a==-1);
    else if(a%400==0||(a%4==0&&a%100!=0)) printf("是\n");
    else printf("否\n");
}
void menu2(int y,int m,int d){
    int w,c;
    scanf(" %d%d%d",&y,&m,&d);
    c=y/100;
    if(y==-1&&m==-1&&d==-1);
    else if(y<1582||(y=1582&&m<10)||(y=1582&&m==10&&d<=4))
    w=(c/4-2*c+y+y/4+13*(m+1)/5+d-1)%7;
    else if(y>1582||(y=1582&&m>10)||(y=1582&&m==10&&d>=15))
    w=(y+y/4+c/4-2*c+13*(m+1)/5+d+2)%7;
    switch(w){
case 1:printf("星期一\n");break;
case 2:printf("星期二\n");break;
case 3:printf("星期三\n");break;
case 4:printf("星期四\n");break;
case 5:printf("星期五\n");break;
case 6:printf("星期六\n");break;
case 0:printf("星期日\n");break;
    }
}
 

  • 33
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值