2016-04-18 36 views
-2

ここでは、ユーザが/ nの印刷に名前と などをスキャンすると、このプログラムに自分自身の に関する情報を表示するプログラムですが、gccの印刷なしまったく。 私はargvとargcを使ってパラメータをスキャンする必要があります。 どうすれば解決できますか?argvとargcを使用した印刷

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define SIZE 10 

int main(int argc, char** argv) 
{ 
    for (int i = 1; i < SIZE; i++) 
    { 
     if (argv[i] == ' ') 
     { 
      break; 
     } 
     if (argv[i] == 'n' || argv[i] == 'b' || argv[i] == 'f' || argv[i] == '?' && argv[i - 1] == '/') 
     { 
      switch (i) 
      { 

      case 'n': 
       printf("my name is : Daniel Zingerman \n"); 
       break; 
      case 'b': 
       printf("my birth date is: 2/11 \n"); 
       break; 
      case 'f': 
       printf("my favorite food is: ice cream \n"); 
       break; 
      case '?': 
       printf("the instruction of the program:"); 
       printf("There is a lot of parameters you can scan into the program:"); 
       printf("1. /n - printing the name"); 
       printf("2. /b - printing the birth date"); 
       printf("3. /n - printing the favorite food"); 
       printf("4. /? - printing the instructions"); 

       break; 
      } 
     } 


    } 
    system("pause"); 
    return(0); 
} 
+0

あなたがこのプログラムに会った最初の驚きは何ですか? – fluter

+0

は、string.hのstrcmpを使用して文字列を比較します。そして、argcはSIZEではなく、forループを制限するべきです。 – jboockmann

+0

正確には 'case '/ n':'? –

答えて

0

あなたは最後の引数が何であるかを知るためのargc値を使用する必要があります。または、argv[i] == NULLをテストする必要があります。あなたはargvchar **であることを理解していないようですので、argv[i]char *であり、charではありません。

また、getopt()、またはgetopt_long()の使用方法も学んでください。

0

argv[]アレイはargv[0]にプログラム名から作成され、スペースで
/N/B/F分離し、コマンドライン引数がないargv[1]

で単一の「文字列」として、 argv[1], argv[2] & argv[3]に返されます

使用argcあなたが境界の外に出ないように、あなたがテストどのように多くのargv[]の要素を制限する:
for (int i = 1; i < argc; i++) {

今あなたが、有効なコマンドライン引数を持っていることを確認する必要があります。
if ((strcmp(argv[i], "/n") == 0) || ...

あなたはケースのテストのための整数値を必要とすると、[i]はARGVの2番目の要素を使用します。
switch (argv[i][1]) {

関連する問題