在c中获取循环内的用户输入时,通过将char*buffer分配给“\n”来清除缓冲区是否错误?

在c中获取循环内的用户输入时,通过将char*buffer分配给“\n”来清除缓冲区是否错误?,c,fgets,input-buffer,C,Fgets,Input Buffer,我试图解决这个问题,当我想在循环中获得用户输入时,我会面临这个问题。 编辑*:问题是->清除缓冲区以读取下一个输入 这容易出错吗 #include <stdio.h> int main(){ char buffer[10]; while(1){ fgets(buffer,10,stdin); // use buffer for whatever i need... THEN! *

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

这容易出错吗

 #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'无用,有意义…

它不容易出错,但毫无意义

清除缓冲区很少有任何意义,而且从来没有明确定义过清除意味着什么


当fget将覆盖缓冲区时,无论其内容如何,为什么您觉得需要清除缓冲区?如果行为令人困惑,则应确保fgets在依赖结果之前成功。

忽略缓冲区的用途以及首先清除缓冲区的原因:

如何清除缓冲区:

memset(buffer, 0, sizeof(buffer));

根据上下文,代码处理字符串。所以一个清空的缓冲区是一个包含空字符串的缓冲区

所以你应该写

buffer[0] = '\0';
如果您指的是由函数fgets读取的空字符串,那么在本例中,空的已清除缓冲区如下所示

buffer[0] = '\n';
buffer[1] = '\0';

语句*buffer='\n'中没有错误;独自一人,但您试图解决的问题是什么?*buffer='\n';-->缓冲区[9]='\0';如果要清除缓冲区*buffer='\n',很可能要将其设置为'\0';不清除缓冲区,它会覆盖第一个元素。缓冲区是一个字符[10],不是指针。当我试图在循环中获取输入时,它不会被覆盖。@覆盖后,zuxi立即调用fgets,它根本不关心缓冲区中已经存在的内容,只是用尽可能多的输入覆盖它。所以是的。它不会被覆盖,如果输入大于缓冲区,它会导致循环跳转到下一个。注意,在这种情况下,您可以用sizeofchar*10替换sizeofbuffer。@FlorianCastellane这是个坏主意,首先您复制了一个幻数,然后sizeofchar定义为1。我建议缓冲区的大小,因为只有一个类型才需要括号。@FlorianCastellane:这是不好的做法。使用幻数,添加冗余,sizeofchar保证为1。原稿很好。@WeatherVane:别忘了冗余:如果缓冲区发生变化怎么办?我个人总是使用带括号的sizeof,所以我的眼睛不需要识别两种不同的模式。这正是我的喜好。使用10是一个非常糟糕的主意。