簡體   English   中英

基本C程式設計問題

[英]Basic C programming question

我剛開始學習C,它的運行速度很慢...我想編寫一個程序,它接受一個整數參數並返回它的兩倍值(也就是接受整​​數,乘以2,然后用該值printf)。

我故意不想使用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 ,將./a 10和10存儲到index變量中。 另外,我想編程返回“未提供索引”並在沒有提供索引值的情況下退出...

有人願意幫助我做錯什么嗎?

編輯:

此代碼在編譯時返回1錯誤,基於@James的幫助:

#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;
} 

謝謝! 阿米特

main函數只有兩個保證工作的原型:一個不帶參數( int main(void) ),另一個帶兩個參數,看起來像這樣:

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

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

如果要在運行程序時傳遞參數(而不提示用戶輸入),則需要

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

您可能知道,main()是一個“特殊”函數,需要0或兩個參數: int argcchar **argv ,其中argc自動分配了參數數組argv中的參數數量。 因此,傳遞給main()所有參數都將存儲在argv中,這就是您需要從中訪問參數的位置。

鏈接應該有所幫助。

您傳遞給程序的參數是文本,因此main會將它們作為字符串接收。 它將命令行參數按空格分隔,並以字符串數組形式傳遞它們,並附帶一個數字,該數字說明它為您提供的參數數量。 該程序將始終至少具有一個參數,即您以其身份運行程序的文件名(在本例中為"a" )。 該字符串始終在argv [0]中找到。

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

這是對帶有命令行參數的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;
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM