免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1952 | 回复: 9
打印 上一主题 下一主题

请高手赐教scanf的一个用法!谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-03 17:55 |只看该作者 |倒序浏览

  1. scanf("%s",str);                          //输入命令

  2. if(strcmp(str,"dir")==0)        Showdir();                 

  3. else if(strlen(str)==0)                  printf("hahaa");

复制代码

我的本意是接受一个字符串的输入,如果什么都没有输入,直接回车则
打印hahaha,但是好像不行,无论你回多少次车,程序一直等待你输入,
请教高手如何解决阿??谢谢!!

论坛徽章:
0
2 [报告]
发表于 2005-06-03 18:25 |只看该作者

请高手赐教scanf的一个用法!谢谢

同问

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-06-03 20:03 |只看该作者

请高手赐教scanf的一个用法!谢谢

这个 我用scanf也没有写出来~ 我用IO终端控制给你写了一个.

  1. #include <stdio.h>;
  2. #include <error.h>;
  3. #include <termios.h>;
  4. #include <string.h>;
  5. #include <stdlib.h>;
  6. #include <sys/types.h>;

  7. int main()
  8. {
  9.         char *tname,tempc,*cmdtemp,cmd[128];
  10.         FILE *fp;
  11.         int fd,len;
  12.         struct termios term,termsave;

  13.         tname=ctermid(NULL);
  14.         if((fp=fopen(tname,"r+"))==NULL)
  15.         {
  16.                 perror("fopen");
  17.                 exit(0);
  18.         }
  19.         setbuf(fp,NULL);
  20.         fd=fileno(fp);

  21.         tcgetattr(fd,&termsave);
  22.         term=termsave;
  23. /*
  24. */
  25.         term.c_lflag&=~(ECHO|ICANON|IEXTEN|ISIG);
  26.         term.c_iflag&=~(BRKINT|ICRNL|INPCK|ISTRIP|IXON);
  27.         term.c_cflag&=~(CSIZE|PARENB);
  28.         term.c_cflag|=CS8;
  29.         term.c_oflag&=~(OPOST);
  30.         term.c_cc[VMIN]=1;
  31.         term.c_cc[VTIME]=0;
  32. /*
  33. */
  34.         memset(cmd,0,sizeof(cmd));
  35.         cmdtemp=cmd;
  36.         len=0;
  37.         if(tcsetattr(fd,TCSAFLUSH,&term)<0)
  38.         {
  39.                 perror("tcsetattr");
  40.                 exit(1);
  41.         }
  42.         while((tempc=getchar())!='\r')
  43.         {
  44.                 if(tempc!='\t'&&tempc!=127&&tempc!=27)
  45.                 {
  46.                         *cmdtemp++=tempc;
  47.                         tcsetattr(fd,TCSAFLUSH,&termsave);
  48.                         printf("%c",tempc);
  49.                         tcsetattr(fd,TCSAFLUSH,&term);
  50.                         len++;
  51.                 }
  52.                 else if(tempc==27)
  53.                 {
  54.                         printf("\a");
  55.                 }
  56.                 else if(tempc==127)
  57.                 {
  58.                         if(len>;0)
  59.                         {
  60.                                 *cmdtemp--=0;
  61.                                 len--;
  62.                                 printf("\b \b");
  63.                         }
  64.                         else if(len==0)
  65.                         {
  66.                                 tcsetattr(fd,TCSAFLUSH,&termsave);
  67.                                 printf("\a");
  68.                                 tcsetattr(fd,TCSAFLUSH,&term);
  69.                         }
  70.                 }
  71.         }
  72.         *cmdtemp=0;
  73.         tcsetattr(fd,TCSAFLUSH,&termsave);
  74.         if(len!=0)
  75.         {
  76.                 printf("%s\n",cmd);  //这里就是你想控制的比如strcmp showdir函数什么的.
  77.         }
  78.         else
  79.         {
  80.                 printf("hahaha\n");  //如果直接回车 就显示hahaha了.
  81.         }
  82. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2005-06-03 20:20 |只看该作者

请高手赐教scanf的一个用法!谢谢

判断用户是否键入回车键,可这样做

  1. scanf("%c",ch);
  2. if(ch=='\n') printf("hahaha\n");
复制代码

因为你用一个字符数组来接受用户的输入,而回车键scanf函数是忽略的,所以程序会等待新的输入

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-06-03 20:35 |只看该作者

请高手赐教scanf的一个用法!谢谢

楼上的代码 实际上和楼主的想法向 违背的.

他其实还想得到str这个串的.

还有 回车不是'\n'是'\r'

我可以向 你保证 你的代码不对.

论坛徽章:
0
6 [报告]
发表于 2005-06-04 01:43 |只看该作者

请高手赐教scanf的一个用法!谢谢

显然用
gets(str)是完全正确的。
当然你如果需要可以检测空白字符

论坛徽章:
0
7 [报告]
发表于 2005-06-04 10:07 |只看该作者

请高手赐教scanf的一个用法!谢谢

violetwind的代码对检测单个字符输入可能有效,不过回车确实该是"\r",但是if(strcmp(str,"dir"==0)   Showdir()就没办法检测输入的其它命令了!我还是要得到一个字符串阿!单个字符而言没意义阿?救命阿阿!!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-06-04 10:08 |只看该作者

请高手赐教scanf的一个用法!谢谢

我的代码你实验了吗?

论坛徽章:
0
9 [报告]
发表于 2005-06-04 11:42 |只看该作者

请高手赐教scanf的一个用法!谢谢

mq110  的代码我没实验,看的不太明白阿!感觉好复杂,没其它简单点的办法么?

论坛徽章:
0
10 [报告]
发表于 2005-06-08 18:10 |只看该作者

请高手赐教scanf的一个用法!谢谢

#include<stdio.h>;
int main()
{
    char ch[30];
    char str[30];
    char ni = getchar();
    if(ni == '\n')
    {
        printf("hahaa\n";
        exit(0);
    }
    str[0] = ni;
    scanf("%s", ch);
    strcat(str, ch);
    if(strcmp(str, "dir"==0)
        printf("wo shi zhu!\n";
}


运行环境:HP-UX rx2600   CC编译器


我是新手,第一次回帖,请大家多多指教!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP