gpt4 book ai didi

c - 如何检查输入字符串是数字还是包含 C 中某个给定名称的输入字符串

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:53 24 4
gpt4 key购买 nike

我正在制作一个 C 程序来检查输入字符串是否具有某个给定数字或输入字符串是一个数字。如果是数字,则它是 intfloatdouble。我是 C 的新手。所以如果我在代码中犯了任何错误,请不要取笑我。请。这是我的代码:

#include<stdio.h>
#include <string.h>

int main(){
char str[100];
printf("Enter Your Input:\n");
scanf("%s",&str);
if(strcmp(str, "John") == 0 || strcmp(str, "smith") == 0 ||
strcmp(str, "kat") == 0){
printf("Name\n");
}
else if(str == anynumber){ //I am facing problem here. so please help me about this

printf("number\n");
}
else if(str = double or float){// help me here to

}


return 0;
}

请帮帮我。

最佳答案

就 (1) 我们有字符串吗?或 (2) 是数字吗? (2a.) 如果它是一个数字,它是一个 float 吗?或者(2b)它是一个整数值吗?并且未被询问,但是 (3) 我们是否有跟在用户输入的数字后面的字符?

所有这些问题都可以通过尝试使用 strtod 转换为 double 来回答。 strtod 接受两个参数。第一个 nptr 是指向包含数字的字符串的指针,endptr 是指向 char 的指针,在转换字符串中的数字时设置为 one 最后转换的数字之后的字符(如果没有转换任何数字,则设置为 nptr)。这会立即回答用户是否在他(或她)输入的开头输入了数字。

验证未完成。如果转换了数字,您仍然需要检查 errno 以验证转换是否为 double 范围内的有效数字。如果转换没问题,那么如果输入的是整数,则需要检查 float 是否确实有小数部分。 (下面使用了一个简单的转换,但您可以使用 modf 完全验证小数部分是否存在,它允许检查 NaN 或正/负无穷大)

最后,关于数字输入,您需要检查 endptr 是否指向 nul-terminating 字符或 '\n' .否则,附加字符将保留在 str 中的数字之后(从 endptr 开始)。

如果以上都不适用,则用户输入不是以数字开头,而是一个字符串。

总而言之,您可以执行类似以下操作:

#include <stdio.h>
#include <stdlib.h> /* for strtod */
#include <string.h> /* for strlen, strcmp */
#include <errno.h>

#ifndef BUFSIZ /* if you need a constant, define one */
#define BUFSIZ 4096 /* don't skimp on buffer size */
#endif

int main (void) {

char str[BUFSIZ] = "", *p = str; /* p for strtod endptr */
long longnum = 0;
double dblnum = 0.0;
size_t len = 0;

printf ("Enter your input: ");
if (fgets (str, BUFSIZ, stdin) == NULL) { /* validate read */
fprintf (stderr, "error: invalid input or user canceled.\n");
return 1;
}

errno = 0;
dblnum = strtod (str, &p); /* attempt convert to double */
if (p != str) { /* digits were converted */
if (!errno) { /* a valid conversion took place */
longnum = (long)dblnum; /* trim fractional part */
if (longnum != dblnum) /* do we have a double? */
printf ("you entered a floating-point: %f\n", dblnum);
else
printf ("you entered an integer value: %ld\n", longnum);
if (*p && *p != '\n') /* characters follow number */
printf ("characters exist following number: %s", p);
}
else
perror ("strtod failed");

return errno ? 1 : 0;
}

/* we have a string, now trim the trailing '\n' before comparison */
len = strlen (str); /* get str length */
if (len && str[len - 1] == '\n') /* check last char '\n' */
str[--len] = 0; /* overwrite with nul-character */
else /* warn if input too long */
fprintf (stderr, "warning: input too long.\n");

printf ("input was not a number: %s\n", str); /* it was a string */
if (strcmp (str, "John") == 0 || strcmp (str, "smith") == 0 ||
strcmp (str, "kat") == 0)
printf ("the input matched a name: '%s'\n", str);

return 0;
}

示例使用/输出

字符串输入:

$ ./bin/fgets_str_or_num
Enter your input: my dog has fleas.
input was not a number: my dog has fleas.

一个 float (读作 double 还是 float 由你决定):

$ ./bin/fgets_str_or_num
Enter your input: 123.456
you entered a floating-point: 123.456000

一个整数值:

$ ./bin/fgets_str_or_num
Enter your input: 123
you entered an integer value: 123

数字后跟更多文本:

$ ./bin/fgets_str_or_num
Enter your input: 123.456 - that's the number of fleas.
you entered a floating-point: 123.456000
characters exist following number: - that's the number of fleas.

与您的测试匹配的输入:

$ ./bin/fgets_str_or_num_names
Enter your input: John
input was not a number: John
the input matched a name: 'John'

关于c - 如何检查输入字符串是数字还是包含 C 中某个给定名称的输入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47523279/

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