-4

我试图解决当我想在循环中获取用户输入时遇到的问题*。编辑 *:问题是这个 -> 清除缓冲区以读取下一个输入。

这容易出错吗?

 #include <stdio.h>
      int main(){
        char buffer[10];
        while(1){
          fgets(buffer,10,stdin);
          // use buffer for whatever i need... THEN!
          *buffer = '\n';
        }
    }

编辑:这是我遇到错误的代码。没有分配给 '\n' 我得到了错误的循环计数和输入。删除那些行没有错:/

#include <stdio.h>
#include <stdlib.h>
int main(){
        int numbers[100];
        int quant;
        char buffer[10];
        printf("how many numbers do i need to ask? MAX = 99\n");
        fgets(buffer,10,stdin);
        quant = atoi(buffer);
        *buffer = '\n';
        printf("%d times enter numbers! MAX 9 digit long !\n",quant);
        for(int i=0;i<quant;i++){
                printf("%d. number: ",i);
                fgets(buffer,10,stdin);
                numbers[i] = atoi(buffer);
                *buffer = '\n';

        }

        printf("Numbers: \n");
        for(int i=0;i<quant;i++){
                printf("%d ",numbers[i]);
        }

edit2:错误基于内存溢出以及 fgets 如何处理输入。

#include <stdio.h>

int main(){
        int ch;
        char buffer[10];

        for(int i=0; i<3; i++){

                fgets(buffer,10,stdin);
                printf("%s -- %d. time\n",buffer,i+1);
                //while ((ch = getchar()) != '\n' && ch != EOF);
                *buffer= '\n';
        }
        return 0;
}

如果我输入超过 9 个数字作为输入(我不小心输入了),则跳转到下一个循环。如果我使用 while 循环清除缓冲区,则不会发生任何错误。*buffer = '\n' 没用,没意义...

4

3 回答 3

1

根据上下文,代码处理字符串。因此,空(已清除)缓冲区是包含空字符串的缓冲区。

所以你应该写

buffer[0] = '\0';

如果您的意思是函数读取的空字符串,fgets那么在这种情况下,空(已清除)缓冲区可能看起来像

buffer[0] = '\n';
buffer[1] = '\0';
于 2017-09-11T11:13:10.430 回答
0

这不是“容易出错”,但毫无意义。

“清除”缓冲区很少有任何意义,并且从未明确定义“清除”的含义。

为什么你觉得缓冲区需要被清除,当它被覆盖时fget(),不管它的内容是什么?fgets()如果行为令人困惑,您应该在依赖结果之前确保成功。

于 2017-09-11T11:07:55.157 回答
0

忽略您使用缓冲区的目的以及为什么要首先清除它:

如何清除缓冲区:

memset(buffer, 0, sizeof(buffer));
于 2017-09-11T11:11:04.233 回答