相关疑难解决方法(0)

根据字长打印直方图(C)

这是K&R演习(1-13)......

"编写一个程序,在其输入中打印单词长度的直方图.可以很容易地绘制水平条形图的直方图;垂直方向更具挑战性."

该部分是关于数组的,说实话,我不确定我是否完全理解它.到目前为止,一切都很容易掌握,但事实并非如此.

无论如何我首先尝试用水平条做直方图.一旦我把它弄下来,我会尝试垂直,但是现在我甚至不确定从哪个版本开始.(我睡在上面,醒了,仍然无法得到它.)

我画了一个程序输出内容的例子:

----------------------------------------------------------------
001|XX
002|XXXX
003|X
004|XXXXXXXXXX
005|XXXXXXXXXXXXXXXXXXXXXXXXX
006|XXXX
007|X
008|
009|XXXXXXXXX
010|XXX
>10|XXXX
----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

并试图将它(程序)分成几部分.这就是我想出的:

  1. 打印顶部边框
  2. 打印类别,打印X每个时间条件都是正确的,打印NEWLINE,REPEAT.
  3. 打印底部边框

但我想的越多,我认为它的工作方式就越少(因为它一次只能getchar()通过一个角色,而且无法重新将X放入正确的类别.)或者...... .

......我真的很困惑,我将如何解决这个问题.据我所知,我已经能够获得代码明智:

#include <stdio.h>

#define MAXWORDLENGTH 10

// print a histogram of the length of words in input. horizontal bar version

int main(void)
{
  int c;
  while ((c = getchar()) != EOF) {

  }

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

有人可以帮助启发我吗?不一定是代码,可能只是伪代码,或者一些"智者的话",关于我需要做什么,想什么,或者其他什么.这只是路上真正的大石头,我想通过它:/.

(我会在30分钟后回来查看)

c

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

每次输入后刷新stdin - 哪种方法不是错误的?

Mark Lakata指出,垃圾无法正常在我的问题我定义想出了这一点.我会保持更新,以避免混淆.


我试图获得一个函数,我可以在提示用户输入之前调用,如printf("Enter your choice:);跟随a,scanf并确保只有在提示后输入的内容才会被scanf作为有效输入扫描.

据我所知,所需的功能是完全冲洗标准输入的东西.这就是我想要的.因此,对于此功能而言"garbage",用户输入中的所有内容,即在该用户提示之前的整个用户输入.


scanf()在C中使用时,总是存在输入缓冲区中存在额外输入的问题.所以我在寻找一个我在每次scanf调用后调用的函数来解决这个问题.我用这个,这个,这个这个来得到这些答案

//First approach
scanf("%*[^\n]\n");

//2ndapproach
scanf("%*[^\n]%*c");

//3rd approach
int c;
while((c = getchar()) != EOF) 
    if (c == '\n') 
        break;
Run Code Online (Sandbox Code Playgroud)

所有这三个都是通过命中试验和参考文献找到的.但是在我的所有代码中使用任何这些代码之前,我想知道这些代码中是否有任何错误?

编辑:

感谢Mark Lakata的第3个错误.我在问题中纠正了它.

EDIT2:

Jerry Coffin回答之后,我在代码中使用该程序测试了前两种方法:使用GNU GCC编译器阻止IDE 12.11(版本未在编译器设置中声明).

#include<stdio.h>

int main()
{
    int x = 3; //Some arbitrary value
    //1st one
    scanf("%*[^\n]\n");
    scanf("%d", &x);
    printf("%d\n", x);

    x = 3;
    //2nd …
Run Code Online (Sandbox Code Playgroud)

c flush

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

fflush()函数不能与stdin一起使用

对不起这个愚蠢的问题我很抱歉.我有C程序提示用户输入年龄和名称,然后将年龄和名称打印到屏幕上.这是我从书中读到的练习.

这个程序:

#include <stdio.h>

int main (void) {
   int age;
   char name[20];

   puts("Enter your age:");
   scanf("%d",&age);

   fflush(stdin);

   puts("Enter your name:");
   scanf("%s",name);

   printf("Your age is %d\n",age);
   printf("Your name is %s\n",name);

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

当我向第一个输入额外的字符时,scanf()程序终止并将额外的字符分配给下一个scanf()

然后我更改了代码,并添加了命名函数clear_buff()并使用其中的fgets函数clear_buff()来读取流上的剩余字符.代码按照我的预期工作.

#include <stdio.h>

#define MAXLEN 80

void clear_buff(void);

int main (void) {
  int age;
  char name[20];

  puts("Enter your age:");
  scanf("%d",&age);

  clear_buff();

  puts("Enter your name:");
  scanf("%s",name);

  printf("Your age is %d\n",age);
  printf("Your name is %s\n",name);

  return 0;
}

void clear_buff(void){ …
Run Code Online (Sandbox Code Playgroud)

c stdin fflush

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

标签 统计

c ×3

fflush ×1

flush ×1

stdin ×1