c语言中如何输入一段字符串然后执行某程序?

一下程序运行在turbo c2.0中:
#include"stdio.h"
main()
{ void mingling(char b[]);
char a[]="zhang";
mingling(a);
}
void mingling(char b[])
{ int i;
char a[10];
i=3;
if(strcmp(gets(a),b)==0)
printf("\n%d\n",i);
else
printf("error");
}
我的想法是:输入一段字符串,然后系统判断是否符合要求,符合就执行某条程序,以上是我写的,但用gets命令不能输入空格和回车,所以我改成:#include"stdio.h"
main()
{ void mingling(char b[]);
char a[]="zhang";
mingling(a);
}
void mingling(char b[])
{ int i;
char a[10];
i=3;
if(strcmp(scanf("%s",a),b)==0)
printf("\n%d\n",i);
else
printf("error");
}
但运行后输入zhang显示的确实error,请问这是怎么回事?
有什么其他办法吗?我是在turbo c2.0中运行的。
可是我的想法是只要输入zhang字符串就执行某个函数,
把scanf("%s",a); 放到前面就不符合我的意思了!!!

可以按照如下步骤:
1 读入字符串,可以使用scanf以%s的方式读入字符串,也可以以gets一次读入整行字符串。
2 判断字符串。使用strcmp函数,与设定的字符串相比较。如输入字符串存在字符数组cmd中,当输入"test"的时候执行程序,那么当strcmp(str, "test")返回值为0时,代表需要执行对应程序。
3 执行程序。
如果要执行的是某一个函数,那么直接在2步中判断成功时调用对应函数即可。
如果要执行的是另外一个可执行文件,可以通过
system(exec_file_name);
的方式,执行可执行文件。其中exec_file_name是存储要执行的可执行文件名及路径的字符串。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-03
scanf("%s",a)

它的返回值并不是a的地址(也就是说不是字符串a),而是成功读取的变量个数,而且这个scanf()也不能将回车读取到a中,应该将scanf()放在strcmp()外面,另外,用到了strcmp()就要包含string.h文件:

//---------------------------------------------------------------------------
#include"stdio.h"
#include<string.h>
main()
{ void mingling(char b[]);
char a[]="zhang";
mingling(a);
}
void mingling(char b[])
{ int i;
char a[10];
i=3;
scanf("%s",a);
if(strcmp(a,b)==0)
printf("\n%d\n",i);
else
printf("error");
}
//---------------------------------------------------------------------------

如果想读取回车,就要用循环读取每个字符,例如:

//---------------------------------------------------------------------------
#include"stdio.h"
#include <string.h>
main()
{ void mingling(char b[]);
char a[]="zhang";
mingling(a);
}
void mingling(char b[])
{ int i=0;
char c,a[10]={0};
while (i!=9&&(c=getchar())!=EOF) /*用CTRL+Z或者CTRL+D结束输入*/
a[i++]=c;
i=3;

if(strcmp(a,b)==0)
printf("\n%d\n",i);
else
printf("error");
}
//---------------------------------------------------------------------------本回答被提问者采纳
第2个回答  2008-12-09
我不知道你下边的程序是怎么运行的…………连编译也过不了……
scanf()函数的返回值不是字符串……

所以第二个程序应该改成
i=3
scanf("%s",a);
if(strcmp(a,b)==0)
…………

还有第一个程序
gets()的确不可以接收回车,但可以接收空格
而且这两个程序都正确……没有错误
第3个回答  2008-12-09
#include <stdio.h>
#include <stdlib.h>

int main()
{
void mingling(char b[]);
char a[]="zhang";
mingling(a);
return 0;
}
void mingling(char b[])
{
int i;
char a[10];
i=3;
scanf("%[^\n]",a);//%[^\n]使输入可以接收空格,scanf的返回值是输入的参数的个数,不是字符串
if(strcmp(a,b)==0)
printf("\n%d\n",i);
else
printf("error");
}
第4个回答  2008-12-09
scanf("%s",a),返回的是个整数呀你拿个整数与b比较不行!

#include"stdio.h"
#include"string.h"
main()
{ void mingling(char b[]);
char a[]="zhang";
mingling(a);
}
void mingling(char b[])
{ int i;
char a[10];
i=3;
scanf("%s",a);
if(strcmp(a,b)==0)
printf("\n%d\n",i);
else
printf("error");
}

放到前面一样可以符合你要的!只要你输入的是zhang他就会执行相应的函数!
怎么不符合呢?
相似回答