相关疑难解决方法(0)

使用fflush(stdin)

因此,谷歌快速搜索fflush(stdin)清除输入缓冲区会发现许多网站警告不要使用它.然而,这正是我的CS教授教授课程的原因.

使用有多糟糕fflush(stdin)?即使我的教授正在使用它并且似乎完美无缺地工作,我是否真的应该放弃使用它?

c stdin fflush

69
推荐指数
6
解决办法
4万
查看次数

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万
查看次数

为什么在输入字符之前需要%d?

我已经尝试过以下代码,在输入字符之前需要%d.这是代码中的后切换循环.

#include<stdio.h>
#include<conio.h>
void sum();
void mul();
void main()
{
char ch;
int c;
clrscr();
do
{
    printf("\n\n Enetr choice ");
    printf("\n\n\t 1: SUM \n\n\t 2: MUL");
    scanf("\n\n\t %d",&c);
    switch(c)
    {
        case 1:
            sum();
            break;
        case 2:
            mul();
            break;
        default:
            printf("\n\n hhhh..... ");
    }
    printf("\n\n Want u calcualte again");
    //scanf("%d");
    scanf("%c",&ch);
    printf("\n ch value is %c",ch);
}while(ch=='y'|| ch=='Y');
getch();
}
void sum()
{
int s;
s=10+50;
printf(" SUM: %d",s);
}
void mul()
{
int s;
s=10*50;
printf(" SUM: %d",s);
} …
Run Code Online (Sandbox Code Playgroud)

c

2
推荐指数
1
解决办法
359
查看次数

标签 统计

c ×3

fflush ×1

scanf ×1

stdin ×1