2017-12-02 114 views
2

此的輸出作業參數通過argv的影響,通過該程序

所以對我的項目,我有兩個字符串在一個從那裏合併當兩個字符串有一個模式相結合。 (這非常模糊,所以生病把下面的例子放在下面,我的問題是在我的main函數中使用了argv參數,當程序正在運行時,argv讀取用戶的輸入,所以它就像./program_name -r。 -r對於程序的這一部分來說是這樣的,所以下面顯示的例子會在用戶輸入後被運行,但是我遇到的問題是如果我有任何其他類似-d的字母,程序仍然會運行。不會是一個問題,但我的程序的另一部分需要我有一個不同的運行代碼,所以程序會做一些不同的事情。我認爲我的問題是在我的if語句,但我不明白爲什麼這是行不通的。任何幫助,將不勝感激


輸入:字符串1:ABC

字符串2:123

輸出:A1B2C3


這是我的節目,它符合並給出了正確的輸出

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

void merge(char *s1, char *s2, char *output) 
{ 
while (*s1 != '\0' && *s2 != '\0') 
{ 
    *output++ = *s1++; 
*output++ = *s2++; 
} 
while (*s1 != '\0') 
    *output++ = *s1++; 
while (*s2 != '\0') 
    *output++ = *s2++; 
*output='\0'; 
} 

int main(int argc , char *argv[]) 
{ 
int i; 
if(argv[i] = "-r") { 

char string1[30]; 
char string2[30]; 

printf("Please enter a string of maximum 30 characters: "); 
    scanf("%s" ,string1); 
printf("Please enter a string of maximum 30 characters: "); 
    scanf("%s" ,string2); 

char *output=malloc(strlen(string1)+strlen(string2)+1); 
//allocate memory for both strings+1 for null 
merge(string1,string2,output); 
printf("%s\n",output); } 

return 0; } 

回答

2

你犯的錯誤已經被C8263A20回答了,但是比較字符串並不是如何完成的。

注意:解析命令行選項是一個相當複雜的任務,您應該使用現成的解決方案,例如:getopt(3)(在Posix中)如果可能的話!

短和(重過),簡化的解決方案,以你目前的問題是:

#include <stdio.h> 

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

    // check: do we have one option given at all? 
    if (argc == 2) { 
    // first character is a hyphen, so skip it 
    // A good idea would be to check if the assumption above is correct 
    switch (argv[1][1]) { 
     // we can only "switch" integers, so use single quotes 
     case 'r': 
     puts("Option \"r\" given"); 
     break; 
     case 'd': 
     puts("Option \"d\" given"); 
     break; 
     default: 
     printf("Unknown option %c given\n", argv[1][1]); 
     break; 
    } 
    } else { 
    puts("No options given at all"); 
    } 

    return 0; 
} 

如果你做這種方式(用switch),您可以輕鬆地添加更多的單字母選項而不會干擾你的碼。把它放在一個循環中,你可以給程序更多的選擇。

+0

我正在考慮爲這個程序使用switch語句,但我不知道它是如何完成。這幫助了一大堆。謝謝! – chrisHG

1
  1. 我沒有初始化
  2. 的argv [ i] =「-r」< - 是一個賦值語句,應該使用「==」
+0

我試過,但是當我有==它只是退出程序 – chrisHG

+0

,因爲我沒有初始化,所以argv [i]指向完全隨機的地方。你想檢查argv [1] – Ora

+0

對不起,我也初始化爲一個整數值,忘記包括在我的評論 – chrisHG

1

你在你的主函數中要做的是檢查第一個命令行參數是否等於「-r」。

你實際上在做什麼是通過使用單個'='給argv [i]分配「-r」。 在C中,通過'=='運算符完成比較。

但是,由於您只是比較字符串(它是C中的字符數組),因此您不能使用'=='來達到此目的,因爲您只會比較字符數組開始處的地址。

而是使用C庫函數strcmp用於此目的:

https://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm

您還沒有初始化的變量i爲奧拉已經指出。