C 为什么赢了';难道这不让我扫描我的发现,然后未知?

C 为什么赢了';难道这不让我扫描我的发现,然后未知?,c,char,newline,scanf,C,Char,Newline,Scanf,所以,我正在尝试制作一个suvat解算器(物理方程),我需要阅读他们需要找到的东西(发现),以及他们不知道和不需要知道的东西(未知)。它扫描查找结果,但在询问未知变量之前直接跳过询问变量。为什么? #include <stdio.h> #include <stdlib.h> #include <math.h> int main (int argc, char *argv[]) { printf ("What are you trying to find:\n

所以,我正在尝试制作一个suvat解算器(物理方程),我需要阅读他们需要找到的东西(发现),以及他们不知道和不需要知道的东西(未知)。它扫描查找结果,但在询问未知变量之前直接跳过询问变量。为什么?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (int argc, char *argv[]) {
printf ("What are you trying to find:\nDistance, Inital Velocity, Final Velocity, Accelartion or Time\n(Enter first letter)\n");
char find;
scanf("%c", &find);
char unknown;
printf ("What don't you know: \n");
scanf("%c", &unknown);


int i = 0; //initial velocity
int f = 0; //final velocity
int a = 0; //accelaration
int t = 0; //time
int d = 0; //distance

if (((find != 'i') && (find != 'I')) && ((unknown != 'i') && (unknown != 'I'))){
    printf("What is the Inital Velocity: \n");
    scanf("%d", &i);
}
if (((find != 'd') && (find != 'D')) && ((unknown != 'd') && (unknown != 'D'))){
    printf("What is the Distance: \n");
    scanf("%d", &d);
}
if (((find != 'f') && (find != 'F')) && ((unknown != 'f') && (unknown != 'F'))){
    printf("What is the Final Velocity: \n");
    scanf("%d", &f);
}
if (((find != 'a') && (find != 'A')) && ((unknown != 'a') && (unknown != 'A'))){
    printf("What is the Accelartion: \n");
    scanf("%d", &a);
}
if (((find != 't') && (find != 'T')) && ((unknown != 't') && (unknown != 'T'))){
    printf("What is the Time: \n");
    scanf("%d", &t);
}
//printf("find: %c, i: %d, f: %d, a: %d, d: %d, t: %d", find, i, f, a, d, t);
if ((find == 'i') || (find == 'I')) {
    if ((unknown == 's') || (unknown == 'S')) {
        i = a*t - f;
        printf("%d\n", i);
    }
    else if ((unknown == 'a') || (unknown == 'A')) {
        i = ((2*d)/t) - f; 
        printf("%d\n", i);
    }
    else if ((unknown == 't') || (unknown == 'T')) {
        i = sqrt(pow(f,2)-(2*a*d)); 
        printf("%d\n", i);
    }
    else if ((unknown == 'f') || (unknown == 'F')) {
        i = (d - (0.5*a*pow(t,2)))/t;
        printf("%d\n", i);
    }
}




return EXIT_SUCCESS;
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
printf(“您试图找到什么:\n位置、初始速度、最终速度、加速度或时间\n(输入第一个字母)\n”);
字符查找;
scanf(“%c”,查找(&F));
字符未知;
printf(“你不知道什么:\n”);
scanf(“%c”,未知(&N));
int i=0;//初始速度
int f=0;//最终速度
int a=0;//加速
int t=0;//时间
int d=0;//距离
if(((find!=“i”)&&(find!=“i”)&&((未知!=“i”)&&(未知!=“i”)&&(未知!=“i”)){
printf(“初始速度是多少:\n”);
scanf(“%d”、&i);
}
如果(((查找!='d')&&&(查找!='d'))&&((未知!='d')&&(未知!='d')){
printf(“距离是多少:\n”);
scanf(“%d”、&d);
}
if(((find!=“f”)&&&(find!=“f”)&&((未知!=“f”)&&(未知!=“f”)&&(未知!=“f”)){
printf(“最终速度是多少:\n”);
scanf(“%d”、&f);
}
如果(((查找!=“a”)&&(查找!=“a”)&&((未知!=“a”)&&(未知!=“a”)&&(未知!=“a”)){
printf(“什么是加速度:\n”);
scanf(“%d”和“&a”);
}
if(((find!=“t”)&&&(find!=“t”)&&((未知!=“t”)&&(未知!=“t”)&&(未知!=“t”)){
printf(“几点了:\n”);
scanf(“%d”、&t);
}
//printf(“查找:%c,i:%d,f:%d,a:%d,d:%d,t:%d”,查找,i,f,a,d,t);
if((find=='i')| |(find=='i')){
如果((未知=='s')| |(未知=='s')){
i=a*t-f;
printf(“%d\n”,i);
}
else if((未知=='a')| |(未知=='a')){
i=((2*d)/t)-f;
printf(“%d\n”,i);
}
else if((未知=='t')| |(未知=='t')){
i=sqrt(功率(f,2)-(2*a*d));
printf(“%d\n”,i);
}
else if((未知=='f')| |(未知=='f')){
i=(d-(0.5*a*pow(t,2))/t;
printf(“%d\n”,i);
}
}
返回退出成功;
}

发生这种情况的原因是,在第一个
scanf()
存储在输入缓冲区并向[下一个]
scanf()
提供自动输入后,按ENTER键[a
\n
]

在代码中,您需要更改

scanf("%c", &unknown);

这将忽略所有类似空白的输入(包括
\n
)并读取第一个非空白字符(即预期输入)

建议:

  • 如果您不打算使用
    argc
    argv
    main()
    的建议符号是
    int main(void)

  • 您应该使用
    开关
    案例,而不是延长的
    if-else if-else
    条件链


  • 发生这种情况的原因是,在第一个
    scanf()
    存储在输入缓冲区中并向[下一个]
    scanf()
    提供自动输入后,按ENTER键[a
    \n
    ]

    在代码中,您需要更改

    scanf("%c", &unknown);
    

    这将忽略所有类似空白的输入(包括
    \n
    )并读取第一个非空白字符(即预期输入)

    建议:

  • 如果您不打算使用
    argc
    argv
    main()
    的建议符号是
    int main(void)

  • 您应该使用
    开关
    案例,而不是延长的
    if-else if-else
    条件链


  • 发生这种情况的原因是,在第一个
    scanf()
    存储在输入缓冲区中并向[下一个]
    scanf()
    提供自动输入后,按ENTER键[a
    \n
    ]

    在代码中,您需要更改

    scanf("%c", &unknown);
    

    这将忽略所有类似空白的输入(包括
    \n
    )并读取第一个非空白字符(即预期输入)

    建议:

  • 如果您不打算使用
    argc
    argv
    main()
    的建议符号是
    int main(void)

  • 您应该使用
    开关
    案例,而不是延长的
    if-else if-else
    条件链


  • 发生这种情况的原因是,在第一个
    scanf()
    存储在输入缓冲区中并向[下一个]
    scanf()
    提供自动输入后,按ENTER键[a
    \n
    ]

    在代码中,您需要更改

    scanf("%c", &unknown);
    

    这将忽略所有类似空白的输入(包括
    \n
    )并读取第一个非空白字符(即预期输入)

    建议:

  • 如果您不打算使用
    argc
    argv
    main()
    的建议符号是
    int main(void)

  • 您应该使用
    开关
    案例,而不是延长的
    if-else if-else
    条件链

  • 应该是

    scanf(" %c", &find);
       //  ^ space
    
    在您的程序中,
    scanf
    从回车键中获取
    \n
    作为第二个字符

    应该是

    scanf(" %c", &find);
       //  ^ space
    
    在您的程序中,
    scanf
    从回车键中获取
    \n
    作为第二个字符

    应该是

    scanf(" %c", &find);
       //  ^ space
    
    在您的程序中,
    scanf
    从回车键中获取
    \n
    作为第二个字符

    应该是

    scanf(" %c", &find);
       //  ^ space
    

    在您的程序中,
    scanf
    从您的回车键获取
    \n
    作为第二个字符

    使用scanf或getchar()输入字母是否更好?使用scanf或getchar()输入字母是否更好?使用scanf或getchar()是否更好,为了进入信件?使用scanf或getchar()更好吗?为了进入信件?使用
    getchar()
    而不是
    scanf()
    @PrerakSola,为什么?这不能解决问题。@PrerakSola会的