gpt4 book ai didi

c - scanf 读取可变数量的字符

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:43 27 4
gpt4 key购买 nike

我想知道如何让 scanf 在我按下 enter 时跳过读取字符...我的代码如下:

#include <stdio.h>

int main(void)

{
int a, status;
char b;
printf("Please enter a positive number immediately"
"followed by at most one lower-case letter:\n\n");
status = scanf("%i%c", &a, &b);
if (status == 1 && getchar() == '\n') {
printf("\nThank you!\n");
}
return 0;
}

当我只输入一个数字而没有输入其他内容时,我需要再次按回车键以触发 scanf 中的 %c&b。我如何避免这种情况并让程序只接受 1 个数字以跳转到 printf
我试过:

if (status == 1 && getchar() == '\n')

但这行不通。

最佳答案

如评论中所述,您最好的做法是使用 fgets 只读入一个字符串,然后解析并验证它。 This Thread将为您提供足够的资源,让您自学如何使用 fgets

这是您可以采用的一种方法。请注意,此代码不会尝试验证用户可以提供的每一个可能的输入,而是为您提供一个合理的方向,如果输入被认为是正确的,您可以采取该方向来解决您的问题。我将把验证任务留给你。下面的代码应该提供足够的工具来完成您的其余任务。查看使用 for 循环遍历 buffer 并确保输入正确。使用 isalpha()isdigit() 来测试每个字符。您还可以实现自己的功能来测试每个字符,就像完成的一样
this answer .

#include <stdio.h>
#include <stdlib.h> //for atoi()
#include <string.h> //for strlen()
#include <ctype.h> //for isalpha()
#define MAX_INPUTLENGTH 500
int main(void)
{
//Always a good idea to initialize variables to avoid Undefined Behaviour!
char buffer[MAX_INPUTLENGTH] = { '\0' };
int a = 0, status = 1, length = 0;
char b = '\0';

printf("Please enter a positive number immediately"
"followed by at most one lower-case letter:\n\n");

//this gets you a string you can work with
fgets(buffer, sizeof(buffer), stdin);
length = strlen(buffer);
buffer[length - 1] = '\0';//remove the trailing '\n'
length--;

//now see if last character is a letter
if (isalpha(buffer[length - 1])) {
b = buffer[length - 1];//then assign and..
buffer[length - 1] = '\0';//trim the letter
}

//this function converts the remaining string to an int
a = atoi(buffer);

//Use the debugger and observe how these functions work in order
//to validate the input. for now, status is always 1!
if (status == 1) {
printf("\nThank you!\n");
}
return 0;
}

正如@Jonathan 在下面的评论中指出的那样,要方便地获取数组的计数,应该使用 sizeof(buffer)/sizeof(buffer[0])。由于您使用的是 char[]sizeof(buffer[0]) 的计算结果为 1,因此在调用 时可以省略fgets.

关于c - scanf 读取可变数量的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47189161/

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