2015-09-27 2 views
1

Есть ли способ открыть приложение из простой команды в C?Открыть приложение в 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; 
} 

Но все это делает мне сказать, что моя программа перестала работать, и завершает работу ...

+3

Что заставляет вас думать, что этот 'input ==" Откройте Google Chrome "|| "открыть google chrome" || "открытый хром" || msgstr "запустить google chrome" || "run chrome" || «Запустить Google Chrome» || «Запустить Chrome» || «Открыть Chrome» будет сравнивать строки с 'input'? –

+1

Не сравнивать; но посмотрите, что это такое. Я привык к php, и я заметил, что php очень похож на C, поэтому я предполагаю, что он будет работать. –

+0

Вам нужно изучить настоящий язык программирования, [tag: php] - не настоящий язык программирования, и это, безусловно, не нравится [tag: c], не обижайте [tag: c] таким образом. Если код, который вы опубликовали, работает в [tag: php], то вы просто дали мне новую причину ненавидеть. –

ответ

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. 
+0

спасибо большое :) –

+0

@iharob Это не проблема. Сэр. Всегда приветствуем предложения и делаю улучшения :) – ameyCU

+0

@iharob Хорошо, поэтому я просто запускал его, все работало нормально, но потом, когда я сказал «open chrome», он придумал «Система не может найти C: Программа»? Что здесь происходит? –

7

Ваш код имеет несколько проблем:

  1. Вы char input;, которые могут хранить одногоchar. Но вы хотите сохранить строку. Таким образом, изменить это в массив некоторого размера:

    char input[64]; 
    
  2. Вы scanf("%s", input);. %s останавливается при встрече с символом пробела. Для того, чтобы прочитать пробелы UPTO символ новой строки ('\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 с помощью \\ вместо \. Возможно, вам придется приложить все это в двойные кавычки ("...").
+0

спасибо очень много! это именно то, что я искал! : D –

0

Вы не можете сделать это так. Предполагается, что символ должен содержать только один символ, такой как 's' или 't' или '5'. «open google chrome» - это цепочка символов. Если вы хотите сравнить ввод строки с «open google chrome», например, вам нужно создать такой массив: char [10] input; например, он создаст массив, который может содержать 10 символов.Затем COMPAR каждый символ, что вам нужно сделать что-то вроде: полукокса ул = "открыт Google Chrome" * , а затем COMPAR каждого charater по характеру: если (вход [0] == Обл [0])

Но у вас уже есть какая-то функция в библиотеке, которая делает это для вас (strcmp, я думаю). И вы не можете сделать: if (intput [0] == 'r' || 't' || 'v') вам нужно сделать: if (intput [0] == 'r' || input [0] == 't' || input [0] == 'v')

Это глобальная идея, возможно, есть некоторые ошибки, это было какое-то время, когда я не касался C lol.

Надеюсь, это поможет.

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

Главное, я хотел бы использовать массив возможных действительных «ответов», вместо того, чтобы долго «если заявление», как у вас есть в вашем коде, который только становится еще дольше, когда вы используете strcmp по мере необходимости.

+0

Спасибо, я попробую это .. –

Смежные вопросы