有没有办法可以用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;
}
但它只是告诉我我的程序已经停止工作并退出......
答案 0 :(得分:7)
您的代码有几个问题:
您有char input;
可存储单 char
。但是你想存储一个字符串。因此,将其更改为某种大小的数组:
char input[64];
您有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 */
您有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){
\
代替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
时,它会变得更长。