2016-09-19 18 views
-4

これは私のコードです。なんらかの理由で、無限ループ(最初のforループ)に詰まってしまいます。このコマンドの目的は、コマンドライン引数を取得するためにそれをコード化し、ユーザーがその多くの引数を入力し、残りのプログラムが最小の番号を出力します。前もって感謝します!argcを使ってforループの範囲を制御する

#include<stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int array[argc]; 
    int smallest; 
    for(int i=0; i < argc; i++) 
    { 
     printf("Welcome to number comparator!\n"); 
     printf("Enter command line # of numbers(enter delimitater):"); 
     scanf("%d",&array[i]); 
    } 
    for(int i=0; i < sizeof(array); i++) 
    { 
     if(i == 0) 
      smallest=array[i]; 
     else if(array[i] < array[i-1]) 
     { 
      smallest=array[i]; 
     } 
    } 
} 
printf("The smallest number is %d", smallest); 

    return 0; 

} 

編集:これは、cmd行から整数の配列を取得するのと同じではありません。 cmd行の引数は、入力する必要がある引数の数を入力するだけです。本質的に、私が./a.out 5.を実行すると、その後に5つの数字を入力し、最小値を返すべきです。

+1

[配列内の要素の数を見つける方法]の複製があります(http://stackoverflow.com/questions/12646821/how-to-find-the-number-of-elements-in-an -array) – kaylum

+2

配列のサイズと配列内の要素数が異なります。 – kaylum

+0

argcは渡されたパラメータの数 –

答えて

3

Cがコマンドライン引数をどのように渡すかについて完全に誤解しました。あなたはまた、大括弧よりも多くの閉じ括弧を持っています。そして、あなたの声明命令は、ある調整を使うことができます。ここで

は、上記の問題に対処するあなたのコードの手直しです:

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

int main(int argc, char *argv[]) 
{ 
    int length = atoi(argv[1]); 

    int array[length]; 

    printf("Welcome to number comparator!\n"); 
    printf("Enter %d number(s): ", length); 

    for (int i = 0; i < length; i++) 
    { 
     (void) scanf("%d", &array[i]); 
    } 

    int smallest = array[0]; 

    for (int i = 1; i < length; i++) 
    { 
     if (array[i] < smallest) 
     { 
      smallest = array[i]; 
     } 
    } 

    printf("The smallest number is %d\n", smallest); 

    return 0; 
} 

これは、完成したコードではありません、あなたはまだいくつかのエラーチェックを実行する必要があります。コマンドラインの値はargc > 1を渡されたことを確認してください。コマンドラインの値が数値であることを確認してください。 scanf()が正常に番号を読み取ることを確認してください。

+0

なぜあなたは '(void)scanf()...'を持っていますか? –

+0

@iharob、 'scanf()'は無視される有用な値を返します。私は自分自身(または他者)に思い出させるために ''(void) ''を入れました。プログラムが失敗したときにエラーチェックができたかもしれないが、そうしなかった、あるいは正しく終了する準備ができました。再訪する弱点です。個人的なハングアップ。 – cdlane

+0

私はあなたの答えが大好きですが、それにコメントを付けてください。私はこの方法で、あなたはまた、いくつかのコンパイラの警告を静かに思う。 –

関連する問題