请教几个简单的字符串输入问题.

idleguy 2002-09-26 02:40:20
1.如何获得一个用户输入的空字符串?
例如:char *buf;
.....
.....
scanf("%s",buf);
如果用户什么都不输入,直接按回车,如何能够使得buf的内容为空?

2.要求用户输入系列字符,其中可以包括回车.用一个特殊键来结束输入(例如Ctrl+q)应该怎么实现?
具体问题就是:
1用户输入的字符长度事先不知道,应该怎么定义字符串变量,怎么操作?
2用什么来判断用户输入了特殊控制字符?
3当用户按下(ctrl+q)以后就做出响应,而不是按回车以后?

小弟初学,请帮忙.
多谢.
...全文
123 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kylie 2002-09-26
  • 打赏
  • 举报
回复
请问 idleguy (闲人) :

你的编程环境是什么?
unix就用getch() (blh(老猫)提到的)

DOS就用kbhit blue_coco(椰子)
idleguy 2002-09-26
  • 打赏
  • 举报
回复
谢谢楼上各位...
结束.送分中..
blue_coco 2002-09-26
  • 打赏
  • 举报
回复
sorry!
更正
if (kbhit)
dhy311 2002-09-26
  • 打赏
  • 举报
回复
/*
这个程序具备自动扩充功能,很不错的哦,应该是能满足你了把
*/

#include <stdio.h>
#include <string.h>
#include <memory.h>
#define MAXNUM10
void main(){
char *buf=new char[MAXNUM];
int length=0;
int count =1;//表示buf的大小
//scanf("%s",buf);
char temp;
while(1)
{
temp = getchar();//取得一个字符
if( temp == 17 )////strl+q 的值,循环退出
break;
else if(temp != 13 && temp != 10)//去掉回车换行
{
buf[length] = temp;

length ++;
if(length == MAXNUM *count)//到达buf的最大值
{

char *ptemp= new char[MAXNUM*(count+1)];
memset(ptemp,0,MAXNUM*(count+1));//set zero
memcpy(ptemp,buf,MAXNUM*count);
count ++ ;//容量准加
delete[] buf;
buf=ptemp;
}
}
}
//这个时候的字符串长度是length
printf("%s",buf);
delete[] buf;//释放空间
}
}
================================================================

CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!

★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。

★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。

Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]

blue_coco 2002-09-26
  • 打赏
  • 举报
回复
sorry!
更正
if (kbhit())
dhy311 2002-09-26
  • 打赏
  • 举报
回复
/*
这个程序具备自动扩充功能,很不错的哦,应该是能满足你了把
*/

#include <stdio.h>
#include <string.h>
#include <memory.h>
#define MAXNUM10
void main(){
char *buf=new char[MAXNUM];
int length=0;
int count =1;//表示buf的大小
//scanf("%s",buf);
char temp;
while(1)
{
temp = getchar();//取得一个字符
if( temp == 17 )////strl+q 的值,循环退出
break;
else if(temp != 13 && temp != 10)//去掉回车换行
{
buf[length] = temp;

length ++;
if(length == MAXNUM *count)//到达buf的最大值
{

char *ptemp= new char[MAXNUM*(count+1)];
memset(ptemp,0,MAXNUM*(count+1));//set zero
memcpy(ptemp,buf,MAXNUM*count);
count ++ ;//容量准加
delete[] buf;
buf=ptemp;
}
}
}
//这个时候的字符串长度是length
printf("%s",buf);
}
blue_coco 2002-09-26
  • 打赏
  • 举报
回复
1.如何获得一个用户输入的空字符串?
char szStr[100];
用gets(szStr) 吧

2.要求用户输入系列字符,其中可以包括回车.用一个特殊键来结束输入(例如Ctrl+q)应该怎么实现?

没法事先不知道,动态定义空间了,不过不值得。
只有自己收键了。
eg:

#define CTRL 0x04
#define ALT 0x08

char stutas = 0;
char szStr[101];
int key, num = 0;

memset(szStr, 0, 101);


while (1)
{
if (kbhit)
{
key = bioskey(2);
if (key & CTRL)
{
status = 1;
}

key = bioskey(0)
key &= 0x00ff;
if (isalnum(key))
{
if (status && ('p') == key)
{
break;
}
if (100 > num)
{
szStr[num++] = key;
}
status = 0;
}

}

}
idleguy 2002-09-26
  • 打赏
  • 举报
回复
楼上.
1.buf分配内存在
.....
.....
里面,我觉得那个东西没必要写出来吧?

OK,我改.
char *buf;

char temp[1024];
buf=temp;
......


我知道scanf必须输入一个字符,所以才问的.

2.怎么知道用户输入的特殊字符?

ps.我不是来搞笑的.

谢谢楼上.
blh 2002-09-26
  • 打赏
  • 举报
回复
你的buf在什么地方分配的内存,搞笑吗??

1 scanf("%s",buf);直接回车没用,必须输一个字符才行,呵呵
2。用getch
idleguy 2002-09-26
  • 打赏
  • 举报
回复
请帮忙..谢谢了...

鞠躬.

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧