输入缓冲区以获取输入,C程序设计

时间:2018-11-18 13:32:37

标签: c input buffer

我正处于C编程的第一步,遇到了找不到解决方案的任务。
任务很简单:从用户那里获取角色。
之后,您会收到用户的字符串,直到用户键入*字符为止。
然后打印用户键入第一个字符的次数。

当我放置最大输入大小为255个字节(#define SIZE 255)时,我可以使用char [SIZE]ת解决问题。
尽管如此,我的老师告诉我,尽管解决方案运行良好,但这不是练习的目的,而且,我也无法假定最大字符串大小。

他要求我们使用输入缓冲区。
本练习中不使用动态内存分配,只允许使用stdio.h库。

我对输入缓冲区有很多了解,但是我仍然没有找到解决该练习的可能性-如何在不知道其大小的情况下从用户那里吸收价值?

我很乐意获得帮助以及有关如何正确使用输入缓冲区的提示。
或更专注的是,如何将值(字符串)输入到输入缓冲区,然后分别遍历此字符串中的每个字符并进行处理。

谢谢

1 个答案:

答案 0 :(得分:1)

无需存储所有字符。读取字符后,可以将其丢弃,而只需增加一个计数器即可。像这样:

#include <stdio.h>

int main() {
    char c, first;
    int counter=0;
    printf("Enter first character: ");
    scanf("%c", &first);
    do {
        scanf("%c", &c);
        if(c == first)
            counter++;
    } while (c != '*');
    printf("You entered '%c' %d times\n", first, counter);
}

输出:

Enter first character: a
aaaaa*
5

Enter first character: a
aabbaa*
You entered 'a' 4 times

注意:

正如评论中所指出的那样,scanf并不是解决这类问题的好工具。我建议不要使用它,除非您知道它是正确的工具。但这不是重点。这里的目的是向您显示您不需要存储整个输入缓冲区。如果要查看替代输入法(如William Pursell在评论中建议的那样),则可以查看fgetcgetcgetchar来读取单个字符。 fread也是您应该熟悉的工具。