在C中打开应用程序

时间:2015-09-27 10:19:35

标签: c windows

有没有办法可以用C中的简单命令打开一个应用程序?

这是我目前的代码:

int main()
{
    char input;

    printf("Hello! How may I help you? \n");
    scanf("%s", input);

    if(input == "Open Google Chrome" || "open google chrome" || "open chrome" || "run google chrome" || "run chrome" || "Run Google Chrome" || "Run Chrome" || "Open Chrome"){
        printf("Sure! Opening Google Chrome...");
        system("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe");
        printf("Done!");
    }

    return 0;
}

但它只是告诉我我的程序已经停止工作并退出......

4 个答案:

答案 0 :(得分:7)

您的代码有几个问题:

  1. 您有char input;可存储 char。但是你想存储一个字符串。因此,将其更改为某种大小的数组:

    char input[64];
    
  2. 您有scanf("%s", input);%s在遇到空格字符时停止。要读取换行符('\n')之前的空格,请使用%[格式说明符:

    scanf("%63[^\n]%*c", input); /* %*c is not required; It discards the \n character */
                                 /* %[^\n] scans everything until a '\n' */
                                 /* The 63 prevents Buffer overflows */
                                 /* It is better to check scanf's return value to see if it was successful */
    
  3. 您有if(input == "Open Google Chrome" || "open google chrome" || "open chrome" || "run google chrome" || "run chrome" || "Run Google Chrome" || "Run Chrome" || "Open Chrome"){。这不符合您的期望。它比较input的第一个元素的地址是否与字符串文字的地址相同。此外,链接这样的OR运算符并不能达到预期效果。

    您需要加入string.h并使用strcmp

    if(strcmp(input, "Open Google Chrome") == 0 || strcmp(input, "open google chrome") == 0 || strcmp(input, "open chrome") == 0 || strcmp(input, "run google chrome") == 0 || strcmp(input, "run chrome") == 0 || strcmp(input, "Run Google Chrome") == 0 || strcmp(input, "Run Chrome") == 0 || strcmp(input, "Open Chrome") == 0){
    
  4. 另外,正如其他人指出的那样,您需要使用\代替system来转义\\函数中的\字符。您可能需要将整个事物用双引号("...")括起来。

答案 1 :(得分:6)

程序崩溃的原因是这个 -

char input;              // char variable can hold single character
printf("Hello! How may I help you? \n");
scanf("%s", input);             // %s expects char * you pass a char 

input声明为数组 -

char input[100];
...
fgets(input,100,stdin);    // don't use scanf as before suggested  
char *position;
if ((position = strchr(input, '\n')) != NULL)     
  *position= '\0';                             // to remove trailing '\n' 

这个 - system("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe");应写成 -

system("Start C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");

这 -

if(input == "Open Google Chrome" || "open google chrome" || "open chrome" || "run google 

无法运作。使用strcmp比较字符串 -

if (strcmp(input,"Open Google Chrome") == 0)    // similarly compare other strings.

答案 2 :(得分:0)

你不能这样做。 char应该只包含一个字符,例如' s'或者' t'或者' 5'。 "打开谷歌浏览器"是一串人物。如果你想用&#34来比较字符串输入;打开google chrome"例如,你需要创建一个这样的数组:char [10] input;例如,它将创建一个可包含10个字符的数组。然后比较你需要做的每个角色: char * str ="打开谷歌浏览器" 然后按字符比较每个字符: if(输入[0] == str [0])

但是你已经在库中有一些功能为你做了这些(我认为是strcmp)。你无法做到:  if(intput [0] ==&#39; r&#39; ||&#39; t&#39; ||&#39; v&#39;) 你需要做的:  if(intput [0] ==&#39; r&#39; || input [0] ==&#39; t&#39; || input [0] ==&#39; v&#39;)< / p>

这是一个全球性的想法,也许有一些错误,我已经有一段时间没有接触过C lol。

希望它有所帮助。

答案 3 :(得分:0)

您的代码存在一些问题,其他人已经指出它们,所以我不会。但是,我想发布我将如何做你想做的事情。

这是......

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

int
main (void)
{
    char input[100];

    char *chrome_answers[] = {
        "Open Google Chrome",
        "open google chrome",
        "open chrome",
        "run google chrome",
        "run chrome",
        "Run Google Chrome",
        "Run Chrome",
        "Open Chrome"
    };

    int chrome_length = sizeof (chrome_answers) / sizeof (*chrome_answers);
    int i;

    printf ("Hello! How may I help you? \n");
    scanf ("%99[^\n]s", input);

    for (i = 0; i < chrome_length; i++) {
        if (strcmp (input, chrome_answers[i]) == 0) {
            printf ("Sure! Opening Google Chrome... ");
            fflush (stdout);
            system ("Start C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
            printf ("Done!\n");

            break;
        }
    }

    return 0;
}

最重要的是我会使用一系列可能有效的&#34;答案&#34;而不是长&#34; if语句&#34;就像你的代码一样,当你根据需要使用strcmp时,它会变得更长。