相关疑难解决方法(0)

fflush(stdin)函数不起作用

我似乎无法弄清楚这段代码出了什么问题:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>


#define MAX 100
#define TRUE 1
#define FALSE 0

char sect_cat;
char customer_name[MAX];
char customer_number[MAX];      /* error handling is easier */

int prev_unit = 0;
int current_unit = 0;
int consumed = 0;
int set = FALSE;

float init_bill;
float tax;
float total_bill;


    void get_userinfo()
    {

            printf("Enter sector category: ");
            scanf("%c", &sect_cat);
        printf("Enter customer name: ");
        fflush(stdin);
        scanf("%sn", &customer_name);

        set = FALSE;
        while (set == FALSE)
        {
            printf("Enter customer number: "); …
Run Code Online (Sandbox Code Playgroud)

c stdin fflush

4
推荐指数
2
解决办法
7478
查看次数

为什么我的for循环不接受9个输入?

我的代码只需要5个值作为输入.我究竟做错了什么?

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char arr[3][3];
    int i,j,n;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%c",&arr[i][j]);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我该如何纠正呢?

c loops for-loop

4
推荐指数
1
解决办法
229
查看次数

C - 跳过用户输入?

我想要一个菜单​​,你可以从中选择一些动作.

问题是,当我们选择一个,并按下"返回"键时,将跳过应该是下一步的用户输入命令.这是为什么 ?

代码是:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int choice;

    do
    {
     printf("Menu\n\n");
     printf("1. Do this\n");
     printf("2. Do that\n");
     printf("3. Leave\n");
     scanf("%d",&choice);

     switch (choice)
     {
        case 1:
            do_this();
            break;
        case 2:
            // do_that();
            break;
     }

    } while (choice != 3);

    return(0);
}

int do_this()
{
    char name[31];

    printf("Please enter a name (within 30 char) : \n");
    gets(name); // I know using gets is bad but I'm just using it

    // fgets(name,31,stdin); // gives the …
Run Code Online (Sandbox Code Playgroud)

c printf flush switch-statement

4
推荐指数
1
解决办法
460
查看次数

为什么这个C程序将T + 1输入改为T?

#include <stdio.h>
int main (void) 
{
  int T, y, z;
  scanf ("%i\n", &T);
  for (T; T > 0 ; --T) 
  {
   scanf ("%i\n", &y);
  }
return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果输入4,是否应该再输入4个?相反,它允许我输入5个整数!也尝试过其他数字.

c

3
推荐指数
2
解决办法
167
查看次数

scanf()函数不起作用?

这可能是一个简单的问题,但我搜索了很多,仍然没有想出来.我用gcc编译下面的剪辑代码并从终端运行程序.在正确的情况下,它允许输入int和char,但它不允许.它不等待进入char?

这里的任何人都可以帮助我.提前致谢!

#include <stdio.h>

int main()
{

  char c;
  int i;

  // a
  printf("i: ");
  fflush(stdin); scanf("%d", &i);

  // b
  printf("c: ");
  fflush(stdin); scanf("%c", &c);

  return 0;
Run Code Online (Sandbox Code Playgroud)

}

c

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

为什么fflush()不被认为是安全的?

为什么fflush()不安全?我被告知它显示未定义的行为?如果是这样,fflush()的替代方法是什么?

c file

3
推荐指数
2
解决办法
571
查看次数

c语言scanf - fflush(stdin) - 不起作用

当我多次使用scanf时,程序不会等待另一个输入.相反,它退出

我了解到我可以在scanf函数中的转换说明符之前放置一个空格 - 是的,这解决了问题,我想这与输入流有关,即 - 如果它是输入流中的换行符,scanf将消耗它立刻.

scanf(" %f", &value);
Run Code Online (Sandbox Code Playgroud)

但如果是这样 - 为什么我不能使用fflush(stdin)呢?我试过但它不起作用.

#include <stdio.h>

int main(void)
{
    float value;
    char ch;

    printf("input value: ");
    scanf("%f", &value);
    fflush(stdin);
    printf("input char: ");
    scanf("%c", &ch);

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

c stdin scanf fflush

3
推荐指数
2
解决办法
3364
查看次数

为什么带有 \n 的 printf() 在 Windows 上仍然无法刷新?

我的 Windows 程序(使用 MSYS2 MINGW64 编译)stdout以大块输出其数据。使用aprintf()的调用\n无法正确刷新输出。

作为这个问题的变体,在什么条件下printf()不冲洗?


例如,以下代码在 MSYS2 MINGW64 上的块中输出:

#include <stdio.h>

int main() {
        while(1) {
                printf("test\n");
                Sleep(1);
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

c windows flush mingw-w64 msys2

3
推荐指数
1
解决办法
1634
查看次数

用C冲洗输入

我是一名软件工程专业的学生,​​我正在休假,为了在下学期学习更好,我一直在编写各种控制台应用程序来练习.但是我遇到了一个问题,我需要从用户那里得到整数输入.我一直在使用fgets来获取字符串stdin然后使用sscanf来获取整数(已经工作正常)但是如果用户输入的数量超过了我的缓冲区大小,则会在流中保留尾随字符(包括跳过我的下一个调用的换行符)fgets).我环顾四周,发现大多数人似乎都认为while(getchar() != '\n');这会导致我出现问题,因为如果没有换行字符,就会发生不必要的输入扫描.

例:

int ch;
char* buffer = (char*)malloc(BUFSIZ*sizeof(char));
while((ch = getchar()) != '\n' && ch != EOF);
fgets(buffer,BUFSIZ*sizeof(char),stdin);
Run Code Online (Sandbox Code Playgroud)

如果缓冲区不是太小而流中没有尾随字符,则会getchar()导致输入不必要.

输出:

A

A

You typed A

Intended Output:

A

You typed A
Run Code Online (Sandbox Code Playgroud)

我希望我说得够清楚,我感谢任何帮助.

c input flush getchar

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

C - 得到角色问题

当我运行以下代码时:

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


int main()
{
    int n;
    char y;

    printf("Message\n");
    fscanf(stdin, "%c", &y);

    printf("Message\n");
    fscanf(stdin, "%c", &y);

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

我明白了:

Message
{enter character}
Message
Run Code Online (Sandbox Code Playgroud)

问题是,即使有2个scanf函数,也不会要求我输入两次字符.输出应该是这样的:

Message
{enter character}
Message
{enter character}
Run Code Online (Sandbox Code Playgroud)



我也有这个问题getc():

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


int main()
{
    int n;
    char y;

    printf("Message\n");
    y=getc(stdin);

    printf("Message\n");
    y=getc(stdin);

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

另外,fflush()没有帮助:

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


int main()
{
    int n;
    char y;

    printf("Message\n");
    y=getc(stdin);

    fflush(stdin);
    fflush(stdout);

    printf("Message\n");
    y=getc(stdin);

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

我试图fflush …

c codeblocks

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

标签 统计

c ×10

flush ×3

fflush ×2

stdin ×2

codeblocks ×1

file ×1

for-loop ×1

getchar ×1

input ×1

loops ×1

mingw-w64 ×1

msys2 ×1

printf ×1

scanf ×1

switch-statement ×1

windows ×1