2016-12-04 7 views
0

私はいくつかの例とビデオを見てきましたが、私が見ていないところで私の部分に基本的な誤解があるように感じます。コードを2つの別々の関数に分割して文字列長を返すようにCプログラムをコードしようとしています

#include <stdio.h> 
#include <stdlib.h> 
int main (void) 
{ 
    char String; 
    char *sendString; 
    char getString[100]; 
    int counter; 

    *sendString = String; 

    printf("\nPlease enter string:\n"); 
    fgets(getString, 100, stdin); 

    int calcLength(counter); 

    printf("los1111: %d", counter); 

    return 0; 
} 

int calcLength() 
{ 
    char *sendString[100]; 
    int counter; 
    for(counter = 0; *sendString[counter] != '\0'; counter++); 

    printf("los: %d", counter); 
    return counter; 
} 

コードがどこで壊れているかを確認するためにいくつかのテスト 'los' printf関数がありますが、残念ながら私には何ももたらされません。どんな助けでも大歓迎です。

+0

学術的な "strlen()"を使用する代わりに、独自の文字列長関数をコーディングしていますか?それを仮定すると、使用前(main()の前)に "calcLength"を "プロトタイプ"する必要があります。また、あなたのcalcLength関数に問題があります。つまり、具体的には、その仕事は何ですか?ヌルで終了する文字列の10分の1を特定するためです...しかし、それはどのように文字列を取得しますか?さらに、calcLengthを引数として "counter"を渡して "コール"しますが、実際のcalcLength関数では引数を指定しません。最後に、あなたが本当に渡したいと思っている "カウンター"ですか?考えていることだけ – TonyB

+0

これを読んだ後、私は多くの情報を除外していることに気付きました。私は、 'main'関数の文字列入力の長さを別々に計算する2番目の関数を参照するクラス用のプログラムをコーディングしようとしています。私は、参照渡しが最も簡単だと思っていますが、適切な書式設定は私を逃してしまいます。 –

+1

私はあなたにプロトタイプとその呼び出しを示します。多分関数を理解することができます:プロトタイプ:int calcLength(char *);呼び出し:counter = calcLength(getString);これがあなたを軌道に乗せることを願っています... – TonyB

答えて

0

私はあなたを少し複雑に思っています。このコードブロックで

char String; 
char *sendString; 
char getString[100]; 
int counter; 

*sendString = String; 

だけfgetsから文字列の長さを計算する場合は、これらのchar宣言のほとんどを必要としません。

だけ fgetsに文字列バッファ、および、最終的な文字列の長さを計算するために使用される整数宣言 myStrLenを与える必要が
char getstring[100]; 
int myStrLen; 

これは単純に減らすことができます。

さらに、calcLength()機能にいくつかの問題があります。 char []パラメーターをこの関数に渡す必要があるため、長さの計算に必要な文字列を知っています。それは本当にこのような単純なする必要があります:このコードを向上させることができるが、それはポイントにあなたを助ける必要があります。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define BUFFSIZE 100 

int calcLength(char sendstring[]); 

int 
main(void) { 
    char getstring[BUFFSIZE]; 
    int myStrLen; 

    printf("\nPlease enter string:\n"); 
    if (fgets(getstring, BUFFSIZE, stdin) != NULL) { 
     getstring[strlen(getstring)-1] = '\0'; // To remove '\n' character from fgets() 
    } 

    myStrLen = calcLength(getstring); 

    printf("String length = %d\n", myStrLen); 

    return 0; 
} 

int 
calcLength(char sendstring[]) { 
    int counter, len = 0; 

    // Every valid character found, increment a counter 
    for (counter = 0; sendstring[counter] != '\0'; counter++) { 
     len++; 
    } 
    return len; 
} 

注:これらの推奨事項のすべてに

int 
calcLength(char sendstring[]) { 
    int counter, len = 0; 

    for (counter = 0; sendstring[counter] != '\0'; counter++) { 
     len++; 
    } 
    return len; 
} 

、あなたのコードは次のようになります。正しい方向に。私は、明確化のためにコードにいくつかのコメントを追加しました。

+0

@Nicholas Brasher、私は助けることができてうれしいです:) – RoadRunner

関連する問題