我有一个字符串数组
我想要做的是检查字符串是否只包含数字,如果没有给出错误:你输入了字符串
void checkTriangle(char *side1[],char *side2[],char *side3[])
{
int i;
for(i=0;i<20;i++)
if(isdigit(side1[i]) == 0)
{
printf("You entered string");
break;
}
}
什么都不打印?
答案 0 :(得分:1)
您的参数是指针数组,而不是字符串。 side1
的类型应为char*
,而不是char*[]
。
void checkTriangle(char *side1, /* ... */)
{
/* ... */
}
要处理浮点值,您可以检查字符串的格式。
#include <ctype.h>
#include <stddef.h>
int checkTriangle(const char *s, size_t n)
{
size_t i;
int p1 = 1;
for (i = 0; i < n; ++i) {
if (s[i] == '.')
p1 = 0;
else if (!isdigit(s[i]) && !p1)
return 0;
}
return 1;
}
顺便说一下,你的功能设计得不是很好。您应该在调用者中打印并且与字符串的大小无关。
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int checkTriangle(const char *s, size_t n)
{
size_t i;
for (i = 0; i < n; ++i)
if (!isdigit(s[i]))
return 0;
return 1;
}
int main(void)
{
char s[32];
size_t n;
fgets(s, sizeof s, stdin);
n = strlen(s) - 1;
s[n] = '\0';
if (!checkTriangle(s, n))
puts("You entered string");
return 0;
}
如果允许您完全使用标准C库,也可以使用strtod
。
答案 1 :(得分:1)
我认为你还没有掌握数组和指针的概念
你对char *side1[]
的声明与说char **side1
是一回事,{{1}}实际上是指针的指针,我猜你的不是你想要的
我认为在开始使用引用参数传递创建函数之前,您应首先使用pass by value。一般来说,学习语言和编程的基础是更好的
答案 2 :(得分:1)
#include <string.h>
#include <stdio.h>
void checkTriangle(char *side1)
{
int i;
int found_letter = 0;
int len = strlen(side1);
for( i = 0; i < len; i++)
{
if(side1[i] < '0' || side1[i] > '9')
{
found_letter = 1; // this variable works as a boolean
break;
}
}
if(found_letter) // value 0 means false, any other value means true
printf("You entered a string");
else
printf("You entered only numbers");
}
参数“char * side1”也可以作为“char side1 []”
传递