- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在制作一个 C
程序来检查输入字符串是否具有某个给定数字或输入字符串是一个数字。如果是数字,则它是 int
或 float
或 double
。我是 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/
fiddle :http://jsfiddle.net/rtucgv74/ 我正在尝试将第一个字符与 3 位数字匹配。所以下面的代码应该提醒f234。但反而返回 null ? 源代码: var reg
复制代码 代码如下: Dim strOk,strNo strOk = "12312321$12
我想找 {a number} / { a number } / {a string}模式。我可以得到number / number工作,但是当我添加 / string它不是。 我试图找到的例子: 15
我,我正在做一个模式正则表达式来检查字符串是否是: 数字.数字.数字,如下所示: 1.1.1 0.20.2 58.55541.5221 在java中我使用这个: private static Patt
我有一个字符串,我需要检查它是否在字符串的末尾包含一个数字/数字,并且需要将该数字/数字递增到字符串末尾 +1 我会得到下面的字符串 string2 = suppose_name_1 string3
我正在寻找一个正则表达式 (数字/数字),如(1/2) 数字必须是 1-3 位数字。我使用 Java。 我认为我的问题比正则表达式更深。我无法让这个工作 String s ="(1/15)";
谁能帮我理解为什么我在使用以下代码时会出现类型错误: function sumOfTwoNumbersInArray(a: [number, number]) { return a[0] +
我看到有些人过去也遇到过类似的问题,但他们似乎只是不同,所以解决方案也有所不同。所以这里是: 我正在尝试在 Google Apps 脚本中返回工作表的已知尺寸范围,如下所示: var myRange
我试图了解python中的正则表达式模块。我试图让我的程序从用户输入的一行文本中匹配以下模式: 8-13 之间的数字“/” 0-15 之间的数字 例如:8/2、11/13、10/9 等。 我想出的模式
简单地说,我当前正在开发的程序要求我拆分扫描仪输入(例如:2 个火腿和奶酪 5.5)。它应该读取杂货订单并将其分成三个数组。我应该使用 string.split 并能够将此输入分成三部分,而不管中间字
(number) & (-number) 是什么意思?我已经搜索过了,但无法找到含义 我想在 for 循环中使用 i & (-i),例如: for (i = 0; i 110000 .对于i没有高于
需要将图像ID设置为数字 var number = $(this).attr('rel'); number = parseInt(number); $('#carousel .slid
我有一个函数,我想确保它接受一个字符串,后跟一个数字。并且可选地,更多的字符串数字对。就像一个元组,但“无限”次: const fn = (...args: [string, number] | [s
我想复制“可用”输入数字的更改并将其添加或减去到“总计”中 如果此人将“可用”更改为“3”,则“总计”将变为“9”。 如果用户将“可用”更改为“5”,则“总计”将变为“11”。 $('#id1').b
我有一个与 R 中的断线相关的简单问题。 我正在尝试粘贴,但在获取(字符/数字)之间的断线时遇到问题。请注意,这些值包含在向量中(V1=81,V2=55,V3=25)我已经尝试过这段代码: cat(p
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我在 Typescript 中收到以下错误: Argument of type 'number[]' is not assignable to parameter of type 'number' 我
在本教程中,您将通过示例了解JavaScript 数字。 在JavaScript中,数字是基本数据类型。例如, const a = 3; const b = 3.13; 与其他一些编程语言不同
我在 MDN Reintroduction to JavaScript 上阅读JavaScript 数字只是浮点精度类型,JavaScript 中没有整数。然而 JavaScript 有两个函数,pa
我们在 Excel 中管理库存。我知道这有点过时,但我们正在发展商业公司,我们所有的钱都被困在业务上,没有钱投资 IT。 所以我想知道我可以用Excel自动完成产品编号的方式进行编程吗? 这是一个产品
我是一名优秀的程序员,十分优秀!