相关疑难解决方法(0)

C:多个scanf,当我输入一个scanf的值时,它会跳过第二个scanf

我有这个代码块(函数省略,因为逻辑是家庭作业的一部分):

#include <stdio.h>

int main()
{
    char c = 'q';
    int size; 

    printf("\nShape (l/s/t):");
    scanf("%c",&c);

    printf("Length:"); 
    scanf("%d",&size);

    while(c!='q')
    {
        switch(c)
        {
            case 'l': line(size); break; 
            case 's': square(size); break;
            case 't': triangle(size); break; 
        }


        printf("\nShape (l/s/t):");
        scanf("%c",&c);

        printf("\nLength:"); 
        scanf("%d",&size);
    }

    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

前两个Scanf的工作很好,没有问题,一旦我们进入while循环,我有一个问题,当你应该被提示输入一个新的形状char时,它会跳转到printfLength的长度并等待输入从那里获取一个char,然后是循环的下一次迭代的小数.

Preloop迭代:

Scanf:形状.Works Great
Scanf:长度.没问题

循环1.

Scanf:形状.跳过此
Scanf:长度.问题,这个scanf映射到形状char.

循环2
Scanf:形状.跳过此
Scanf:长度.问题,这个scanf现在映射到int大小.

它为什么这样做?

c scanf

20
推荐指数
4
解决办法
8万
查看次数

getch()和scanf()函数之间的区别

执行以下代码时遇到了困难.完成一次执行后,变量't'取空值.通过使用getch()而不是scanf()解决了这个问题.但我不知道为什么会这样.任何解释?这是不起作用的程序.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char t;
void main()
{
    while(1)
    {
        scanf("%c",&t);
        printf("\nValue of t = %c",t);
        printf("\nContinue (Y/N):");
        char a=getche();
        if(a=='n' || a=='N')
        exit(0);
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,这是正确执行的程序.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char t;
void main()
{
    while(1)
    {
         t=getch();
         printf("\nValue of t = %c",t);
         printf("\nContinue (Y/N):");
         char a=getche();
         if(a=='n' || a=='N')
         exit(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

c c++ scanf getch

-1
推荐指数
1
解决办法
5302
查看次数

标签 统计

c ×2

scanf ×2

c++ ×1

getch ×1