玄学C语言之scanf,printf

时间:2022-09-05 22:06:00
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a,c,d;
    char b[200];
    scanf("%d.",&a);
    scanf("%[^e]%ne%d",b,&c,&d);
    if(b[0]=='0'&&c==1&&d==0)
        printf("%d",a);
    else if(d>=c)
    printf("%d%s%.*d",a,b,d-c,0);
    else
    printf("%d%.*s.%s",a,d,b,b+d);
    return 0;
}

这个科学记数法的代码真的简洁。。。 可以计算 2.(100 位)e(0<=&&<=100)

%[^e]代表读入字符至e停止  23wsase->23wsas

%[e]代表只读入e 遇到非e停止  如2eee3 -> 空  eee22e3-> eee

%n就是在本scanf里到%n之前一共读入的字符个数

%*代表的是输入但不存储 吃掉某些东西

e或者任意字符 代表匹配

22es30 读入两个整型可以用%des%d

%*.* 第一个*代表宽度 第二个*代表精度

举个栗子

printf("%.*s\n", 1, "abc");        // 输出a
printf("%.*s\n", 2, "abc");        // 输出ab
printf("%.*s\n", 3, "abc");        // 输出abc >3是一样的效果 因为输出类型type = s,遇到'\0'会结束

printf("%.*s\n", 100, "abc");   //输入abc