我刚开始学习c而且我正在阅读有关输入的内容。让我们说我想要一个c程序来识别你输入的是一个数字或字符串(不只是一个字符),然后打印出来。像这样的Somethihng:
int input, is_digit;
is_digit = scanf("%d", input);
printf("Please enter a digit or a string and then a newline\n");
if (is_digit)
printf("You entered the digit: %d", &input);
else
printf("You entered the string: %s", &input);
这并不像预期的那样有效,但我写了这篇文章是为了让我知道我想要完成的事情。
你将如何在C中做到这一点?
答案 0 :(得分:1)
您需要先将所有输入作为字符串,然后解析此输入以检查它是否为数字。如果条件失败,您可以确定输入是字符串 -
看看下面的演示代码 -
fgets(s, sizeof(s), stdin);
valid = TRUE;
for (i = 0; i < strlen(s); ++i)
{
if (!isdigit(s[i]))
{
valid = FALSE;
break;
}
}
答案 1 :(得分:0)
首先,当使用scanf以%d格式扫描时,您将获得以下其中一项:
如果要扫描用户输入,则应使用其他一些功能,如getchar。
isdigit()
库中有一个函数<ctype.h>
可帮助您迭代字符串并确定char是否表示int here。
示例:
char* str = "abc1";
int counter=0;
while(counter < 4){
if(isdigit(*(str+counter))){
printf("digit")
};
counter++;
}
答案 2 :(得分:0)
您可以使用getchar()
和ungetc()
的组合查看stdin上的第一个字符,使用isdigit()
确定它是否为数字,然后将其放回流中阅读相应的scanf
。
答案 3 :(得分:0)
首先,在阅读用户输入之前,您必须先询问用户,然后:
BASE/share/autoconf/autoconf/c.m4
其次,printf("Please enter a digit or a string and then a newline\n");
is_digit = scanf("%d", &input);
想要一个指向int的指针,如果是%d格式,那么
scanf
第三,scanf("%d", &input);
,要打印一个int,想要值,然后:
printf
第四,你无法打印传递printf("You entered the digit: %d\n", input);
变量的字符串(%s
),那么你的代码就完全错了。
一个简单的解决方案可能是,使用isdigit标准函数,这个
int
答案 4 :(得分:0)
您从scanf收到的输入采用ascii格式,请参阅Ascii Table。
所有数字(0-9)都在ascii值之间:48-57(十进制)。
您应该首先输入一个数字/字符并以整数格式(%d)打印出来。将它与ascii表进行比较。只是为了感受它。
完成后,您应该继续完成任务。考虑到你希望能够解释字符和数字,我会用字符串而不是数字来读。有关如何阅读字符串的信息,请参阅scanf。
声明具有预定大小的char。并且一定不要用scanf溢出它。
然后应考虑以下事项:
简单地说,您创建一个while循环(或for循环),只要找到null终止符就会中断。这是字符串的结尾。
在循环中,你有一个int,每轮递增(从0开始)。此int是一次读取一个字符的索引。继续读取字符,只要ascii值不是数字(参见上面的ascii值),你设置一个标志来表明它是一个字符串。这将使你走上正轨。