2017-02-01 54 views
-1

我剛剛開始學習C的課程,並在命令行參數中遇到問題。分配是這樣的(還有更多,但是這是關於在開始的命令行參數的部分):
- 您的程序必須接受一個命令行參數,一個非負整數。
- 如果您的程序在沒有任何命令行參數或多個命令行參數的情況下執行,您的程序應打印出您選擇的錯誤消息並返回1.
- 您可以假設,如果用戶確實提供了一個命令行參數,它將是一個非負整數(例如1)。不需要檢查它確實是數字。命令行參數條件pset2凱撒

所以我想出了這個代碼:

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


    int main(int key, string plain[]) { 

     if (key < 0 || plain[key] > 1) 
     { 
      printf("error\n"); 
      return 1; 
     } 
     else 

等..代碼繼續。

現在我已經嘗試了幾件事情,但是我正在碰壁。編譯器不想接受我提出的if條件,並說指針和整數之間有一個比較錯誤指的是作業列表中的粗體條件。所以我明白命令行參數的argv部分是用戶輸入的字符串數組。所以我的想法是告訴編譯器,當用戶給出多個字符串時,它應該給出錯誤消息,所以我寫了「plain [key]> 1)」。或者,我對命令行參數的理解完全在這裏?謝謝。

+2

'plain [key]'將是'string'不是'int' –

+0

'plain [key]'可能是越界的。你應該檢查傳遞給'main'的參數。 – Gerhardh

+0

C沒有'string'類型。那是什麼? 'main'的簽名應該是'int main(int,int * [])',或者最後一個參數可以是'int **',它們是相同的。 – Olaf

回答

0

您誤解了參數main的用途。第一個參數int(通常名爲argc)是數組參數中的項目數。

而數組參數(通常稱爲argv)包含作爲文本的程序的所有參數(包括可執行文件的名稱)。

所以,如果你的可執行文件名爲foo,你調用它作爲foo 1 a bar,main的參數將作如下安排:

int argc == 4 
char **argv => {"foo", "1", "a", "bar"} 

所以,如果你的程序必須接受一個參數,它必須認爲argc == 2argv[1]是參數,您必須從字符串轉換爲數字。

0

plain[key]訪問plain字符串指針數組(argv)的關鍵元素。

該數組的大小由鍵(argc)表示。

所以,你想要的是

if (key > 1) 
{ 
    //.. 
} 

而且平原最後一個元素是key-1,「原因是基於0指數。