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
  #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 に答える
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 に答える