gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:23:21 25 4
gpt4 key购买 nike

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

这容易出错吗?

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

最佳答案

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

所以你应该写

buffer[0] = '\0';

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

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

关于c - 在 c 中的循环内获取用户输入时,通过将 char * buffer 分配给 '\n' 来清除缓冲区是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46154221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com