2011-01-06 90 views
0

我剛剛開始學習C,它很慢......我想編寫一個程序,它接受一個整數參數並返回它的加倍值(也就是取整數,乘以2,和printf那個值)。基本C編程問題

我故意不想使用scanf函數。這裏是我到目前爲止,什麼是不編譯...

#include <stdio.h> 

int main(int index) 
{ 
    if (!(index)) { 
     printf("No index given"); 
     return 1; 
    } 
    a = index*2; 
    printf("Mult by 2 %d",a); 

    return 0; 

} 

執行程序時,所以基本上我想要提供的索引的整數。所以,在cygwin中,我會寫./a 10之類的東西,並將10存儲到索引變量中。 此外,我想編程返回「沒有索引給出」,如果沒有索引值提供,退出...

任何關心幫助我做錯了什麼?

編輯:

此代碼在編譯時返回1個錯誤,基於幫助通過@詹姆斯:

#include <stdio.h> 

int main(int 1, char index) 
{ 
    int index, a; 
    if (!(index)) { 
     printf("No index given"); 
     return 1; 
    } 
    a = index*2; 
    printf("Mult by 2 %d",a); 

    return 0; 

} 

編輯2:考慮一個簡單的程序,其中的值剛剛拍攝和回顯(如下所示)

#include <stdio.h> 

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

    printf("Index is %d, ", index); 
    /*if (!(index)) { 
     printf("No index given"); 
     return 1; 
    } 
    a = index*2; 
    printf("Mult by 2 %d",a);*/ 

    return 0; 

} 

該程序未能編譯...任何想法?!?啊。

編輯3:這是最終編譯和工作的代碼。謝謝大家!

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

int main(int argc, char* argv[]) 
{ 
    if (argc <= 1) 
    { 
     printf("No index given"); 
     return 1; 
    } 
    int i; 
     i = atoi(argv[1]); // convert string in argv[1] to integer 
    int a; 
     a = i*2; 
    printf("Mult by 2: %d",a); 
    return 0; 
} 

謝謝! 阿米特

+0

一旦你得到了整理出來的參數,就像James所暗示的那樣,你會發現參數是字符串「10」,所以你仍然需要把它轉換成int – 2011-01-06 04:43:08

+1

@Amit:關於你的編輯, `int 1`無效。每個參數都是函數內部的一個變量。 `1`不是一個變量,它是一個值。確保你有[一本好的初學C書](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)。 – 2011-01-06 04:50:11

+1

問題是`1`不能是參數的名字,而且你還沒有完全正確的簽名。在你的代碼中,在該行嚴重輸入「int main(int argc,char * argv [])``。 – 2011-01-06 04:50:52

回答

7

只有兩個保證到工作的原型爲main功能:一個不帶任何參數(int main(void)),另外有兩個參數,看起來像這樣:

int main(int argc, char* argv[]) 

argc是多少傳遞給程序的參數,argv是包含傳遞給程序的參數的數組。

如果你想,當你運行的程序(而不是提示用戶輸入數據)來傳遞參數,您將需要

  • 使用main以參數的形式,
  • 檢查,以確保argc大於一(argv[0]是程序的名稱,或者應該是),
  • 轉換argv[1]從字符串表示的整數,使用strtolsscanf,或其他一些庫函數(避免atoi:它沒有提供可用的錯誤報告),
  • 然後使用該整數。
1

正如你可能知道,主要的()是一個「特殊」功能,預計0或兩個參數:int argcchar **argv,其中argc是自動分配參數數組argv中的參數個數。所以,無論您傳遞給main()的參數都將存儲在argv中,那就是您需要訪問參數的地方。

link應該幫助。

0

下面是使用命令行參數對Main進行正確原型修改的代碼。

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

int main(int argc, char* argv[]) 
{ 
    if (argc <= 1) 
    { 
     printf("No index given"); 
     return 1; 
    } 
    int i = atoi(argv[1]); // convert string in argv[1] to integer 
    int a = i*2; 
    printf("Mult by 2 %d",a); 
    return 0; 
} 
1

您傳遞給程序的參數是文本,所以main會將它們作爲字符串接收。它將命令行參數以空格分隔,並將它們作爲字符串數組傳遞,並附上一個數字,說明它提供給您的參數數目。該程序將始終至少有一個參數,即運行該程序的文件的名稱(在此例中爲"a")。該字符串始終位於argv [0]處。

正如其他答案所述,main的正確簽名是int main(int argc, char* argv[])。運行./a 10時,argc將爲2,argv [1]將爲字符串"10"。您將需要將此字符串轉換爲一個整數,將其乘以2,使用類似int i = atoi(argv[1]);int i; sscanf(argv[1], "%d", &i);