2

我有一个字符串数组

我想要做的是检查字符串是否只包含数字,如果没有给出错误:你输入了字符串

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;
        }

}

什么都不打印,为什么?

4

3 回答 3

2

我认为您还没有掌握数组和指针的概念

你的声明char *side1[]与说char **side1这实际上是一个指向我猜不是你想要的指针的指针是一样的

我认为在您开始使用按引用传递参数创建函数之前,您应该首先使用按值传递。一般来说,学习语言和编程的基础知识会更好

于 2012-10-21T10:35:04.027 回答
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.

于 2012-10-21T10:26:52.387 回答
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[]”传递

于 2012-10-21T11:31:07.887 回答