我对 C 有点陌生,输入读取真的让我感到困惑。我试图初始化一个大小为 4 的数组,但有时用户会输入 3 的有效输入。在 Java 中,我可以检查输入的长度并添加条件,但我不确定这在 C 中如何工作。
main(void){
char str[N];
int i;
for(i = 0; i < N; i++){
scanf("%c", &str[i]);
}
for(i = 0; i < N; i++){
printf("%c\n", str[i]);
}
}
现在,如果我输入 4 个或更多,它就可以正常工作。如果我输入3,它就会中断。我希望它能够处理 3 个或 4 个字符。
实际上,问题的根源是:我试图找出一种用 C 语言读取 24 小时制时间的方法,并将其添加到 24 小时制持续时间中。我应该以完全不同的方式来解决这个问题吗?
谢谢
最佳答案
简短的回答是:你不能。
如果您想读取字符串 (%s
),则使用 scanf()
特别危险;如果用户输入的输入超出了缓冲区所能容纳的数量,那么您就会遇到缓冲区溢出问题。
fgets()
允许您指定要读取的最大字节数,防止缓冲区溢出。
这是一个关于如何为某些输入编写函数的快速示例,该函数验证输入是否在指定长度内并且是一个完整的行(以 \n
结尾 - 此例程会丢弃来自输入的 \n
):
void getInput(char *question, char *inputBuffer, int bufferLength)
{
printf("%s (Max %d characters)\n", question, bufferLength - 1);
fgets(inputBuffer, bufferLength, stdin);
if (inputBuffer[strlen(inputBuffer) -1] != '\n')
{
int dropped = 0;
while (fgetc(stdin) != '\n')
dropped++;
if (dropped > 0) // if they input exactly (bufferLength - 1)
// characters, there's only the \n to chop off
{
printf("Woah there partner, your input was over the limit by %d characters, try again!\n", dropped );
getInput(question, inputBuffer, bufferLength);
}
}
else
{
inputBuffer[strlen(inputBuffer) -1] = '\0';
}
}
int main()
{
char firstAnswer[10];
getInput("Go ahead and enter some stuff:", firstAnswer, 10);
printf("Okay, I got: %s\n",firstAnswer);
}
关于c - 如何在 C 中检查用户输入的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7880141/