怎样用C语言写以下程序:由键盘输入一个长度小于20的字符串保存到一个数组中,利用这个字符串生成一个回文

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用C语言写以下程序:由键盘输入一个长度小于20的字符串保存到一个数组中,利用这个字符串生成一个回文相关的知识,希望对你有一定的参考价值。

字符串,并将得到的新字符串输出。例如:输入字符串:abcd,生成字符串:abcdcba。
以下是我写的程序:
#include<stdio.h>
#include<string.h>
int main()

char a[20],b[20];
int i,c,j;
printf("请输入一个长度小于20的字符串:\n");
gets(a);
c=strlen(a)-1;
for(i=1,j=1;i<=c;i++,j++)
b[j]=a[c-i+1];
puts(b);
printf("%s",strcat(a,b));

希望各位高手帮帮忙。

小错误,没有对j赋初值
在定义的时候改成int i,c,j=0;就可以了追问

好像还是不行?。。。。。。。你运行一下试试。
这是我的运行结果:

追答

#include
#include
int main()

char a[20],b[20];
int i,c,j;
printf("请输入一个长度小于20的字符串:\n");
gets(a);
c=strlen(a)-1;
for(i=1,j=0;i<=c;i++,j++)
b[j]=a[c-i];
b[j]='\0';
puts(b);
printf("%s",strcat(a,b));

这下可以了。。。。

追问

太感谢了!谢谢高手的帮忙,我是一个C语言初学者,还请多多指教!

参考技术A #include<stdio.h>
#include<string.h>
int main()

char a[20],b[20];
int i,c,j;
printf("请输入一个长度小于20的字符串:\n");
gets(a);
c=strlen(a)-1;
//printf("%d",c);
for(i=1,j=1;i<=c;i++,j++)

b[j-1]=a[c-i];

printf("%s",strcat(a,b));
gets(a);


你的b字符串b[0]为空,所以会输出乱码
参考技术B #include<stdio.h>
#include<string.h>
int main()

char a[40];
int i,c;
printf("请输入一个长度小于20的字符串:\n");
gets(a);
c=strlen(a);
for (i=0;i<c;i++)

a[i+c] = a[c-i-2];

puts(a);

return 0;


给分我!呵呵~追问

你写的很好,很感谢。但是,因为你不是最先回答我问题的。所以。。。。。。
但我想或许我们能成为朋友。你说呢?
因为我是C的初学者,所以还得各位高手多多指教!

参考技术C 这个问题,,我也很想问诶。我们马上考试就考这个啊。。。。呜呜呜。。。。得到正确答案通知哈啊、、

怎么使C语言程序在后台运行并接收键盘输入?

有点麻烦。
第一,你要会写DLL,检查,键盘过滤函数 WH_KEYBOARD,用SetWindowsHookEx()将其挂接在函数链首,用CallNextHookEx()把消息传给下一个函数。
键盘挂钩函数:
int FAR PASCAL KeyboardProc( int nCode,WORD wParam,DWORD lParam)
KeyboardProc--挂接函数名,该函数必须在模块定义文件中利用EXPORTS命令进行说明;
nCode决定挂接函数是否对当前消息进行处理;wParam和lParam为具体的消息内容。
第二,你要会写程序,调用那个钩子DLL
第三,你要让程序在背景运行。追问

请问这是WINDOWS编程的知识吗? 能不能直用C语言实现

追答

是WINDOWS编程。
要写 WIN32 API 程序。
不能用简单的C语言方法实现。

参考技术A 利用死循环,就是利用循环控制语句,不断检查输入情况,还是我写个简单的程序给你看看吧,这里我用while循环举例
#include<stdio.h>
int main(void)

int i;
while(1)

printf("input i:",i);
scanf("%d",&i);
if(i==1)
printf("我很聪明\n");
else continue;


就是这样的,只要你输入i的值不是1,程序就一直循环,每次循环都判断新输入的是不是1,如果是就打印 我很聪明 并且继续循环,再次输入检查输入,一直这样下去,这就实现了程序在后台检查输入的情况,等待键盘输入追问

声明一下:我已经学了两年的C语言了 ,你试一下你这个程序在后台还能不能接收键盘输入把!

追答

喔,没在意写错,写的是有问题,但是我只是想说明什么叫后台输入控制程序,其实我这个程序还没写完整,因为后面还要很多 条件限制的,我只是说明下

参考技术B 使用int kbhit(void)
-------------------
函数名:kbhit()(VC++6.0下为_kbhit())
功 能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
用 法:int kbhit(void);
包含头文件: include <conio.h>
------------------
检测到之后再用getch/getche等等函数取得按键,用getchar等会等到按回车再返回...
当然这只是命令行下的函数,而且linux下没有conio.h,需要其它等效代码替换,你可以搜下Net
-------------------
#include <conio.h>

int main()

int i,c;
char p[4]= '|', '/', '-', '\\';
for(i=0;;i++)

if(kbhit()==0)//没有按键
int n;
cprintf("\r%u %n",i,&n);
while(n++<20)putch('.');
cprintf(" %c",p[i/400%4]);
else//有按键
c=getch();
cprintf("\r ");
cprintf("\r%u>you press '%c' key, code %u.\n", i, (c==13)?10:c, c);


参考技术C #include<stdio.h>
#include<stdlib.h>

#define SIZE 4

struct student

char s_num[10];
char s_name[20];
char sex[2];
int age;
stu[SIZE];

void input()

int i;
for(i=0;i<SIZE;i++)

printf("请输入第%d个学生的数据内容:学号,姓名,性别(男:M,女F),年龄\n",i+1);
scanf("%s%s%s%d",stu[i].s_num,stu[i].s_name,stu[i].sex,&stu[i].age);



void save()

int i;
FILE *fp;
if((fp=(fopen("c:\\stu_list.txt","wb")))==NULL)

printf("can not open file:stu_list!\n");
exit(0);

for(i=0;i<SIZE;i++)

if((fwrite(&stu[i],sizeof(struct student),1,fp))!=1)

printf("write error!\n");
fclose(fp);
exit(0);


fclose(fp);


void main()

input();
save();


关键错误在于:fclose(0);
应该改为 fclose(fp);
另外,团IDC网上有许多产品团购,便宜有口碑
参考技术D 用管道啊,写个守护进程读取管道
输入的时候直接将要输入的东西>进那个管道
大体上是这样
if(fork()!=0)
exit(0);
mkfifo("/var/myfifo");
fp = fopen("/var/myfifo","r");
while(fread(....))
...

输入的时候使用管道
echo hello >/var/myfifo这样就把hello输进去了
你能看懂吗追问

守护进程读取管道? 这又是什么?

追答

守护进程就是后台进程啊
你通过管道可以将键盘的输入传递过去
或者说我理解错了?你是要后台进程捕获键盘击键?
那你应该看看windows的HOOK,也就是钩子函数,或者linux的内核
纯C语言?嵌入汇编吗?要写键盘驱动?

以上是关于怎样用C语言写以下程序:由键盘输入一个长度小于20的字符串保存到一个数组中,利用这个字符串生成一个回文的主要内容,如果未能解决你的问题,请参考以下文章

用C语言编写程序,由键盘输入城市及所有温度值,并输出温度最高和温度最低的城市和日期?

怎样用C语言求平均数

c语言程序设计. 由键盘输入两个整数,分别计算这两个数的和、差、积、商,并输出结果。

这个C语言程序怎么用

用C语言写一个控制鼠标键盘自动点的程序复杂吗

用c语言从键盘输入两个数字,判断哪个数更大?