正在通过将 char * 缓冲区分配给 '\n' 来清除缓冲区,同时在 c 中的循环中获取用户输入错误?
is clearing the buffer by assigning char * buffer to '\n' while getting user input inside a loop in c wrong?
我试图解决我想在循环中获取用户输入时遇到的问题*。
编辑 *:问题是这个 -> 清除缓冲区以读取下一个输入。
这个容易出错吗?
#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' 无用,无意义...
不是"error-prone",但没有意义。
"clearing" 缓冲区中很少有任何点,而且 "clearing" 的含义从来没有明确定义。
当缓冲区将被 fget()
覆盖时,无论其内容如何,您为什么觉得需要清除缓冲区?如果行为令人困惑,您应该确保 fgets()
在依赖结果之前成功。
先不管缓冲区的用途和清除缓冲区的原因:
如何清除缓冲区:
memset(buffer, 0, sizeof(buffer));
根据上下文,代码处理字符串。因此,空(已清除)缓冲区是包含空字符串的缓冲区。
所以你应该写
buffer[0] = '[=10=]';
如果您指的是函数 fgets
读取的空字符串,那么在这种情况下,空(已清除)缓冲区可能类似于
buffer[0] = '\n';
buffer[1] = '[=11=]';
我试图解决我想在循环中获取用户输入时遇到的问题*。 编辑 *:问题是这个 -> 清除缓冲区以读取下一个输入。
这个容易出错吗?
#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' 无用,无意义...
不是"error-prone",但没有意义。
"clearing" 缓冲区中很少有任何点,而且 "clearing" 的含义从来没有明确定义。
当缓冲区将被 fget()
覆盖时,无论其内容如何,您为什么觉得需要清除缓冲区?如果行为令人困惑,您应该确保 fgets()
在依赖结果之前成功。
先不管缓冲区的用途和清除缓冲区的原因:
如何清除缓冲区:
memset(buffer, 0, sizeof(buffer));
根据上下文,代码处理字符串。因此,空(已清除)缓冲区是包含空字符串的缓冲区。
所以你应该写
buffer[0] = '[=10=]';
如果您指的是函数 fgets
读取的空字符串,那么在这种情况下,空(已清除)缓冲区可能类似于
buffer[0] = '\n';
buffer[1] = '[=11=]';