独孤小梦 发表于 2008-6-18 16:47

呀,郁闷了!这个switch怎么用啊!各位大哥帮忙看看!

各位大哥帮帮忙啊!这里的问题已经有2天没解决出来!实在没办法才到论坛问下!谢谢各位了!
问题如下:
#include"stdio.h"
#include"malloc.h"
#define E 欢迎您的到来!
void main()
{
        char *shuru,shuru2,str[8],*a="进入",*b="退出";           这里我一开始没有str数组!以至于后来的输入不没解决的办法,就使用了一个数组,然后使指针指向它……不知道我这里这样处理对不对!(请看@这里)
        printf("%s\t%s\n",a,b);
        shuru=str;
        scanf("%s",shuru);   @   就是这里!还有比这样高效的吗?
        switch(*shuru)      我问的问题,就在这里,这里使用switch,判断*shuru……
        {
        case '进入':printf("调用进入软件的函数");break;   //*调用进入软件的函数*//
        case '*b':printf("再见");break;  //*这里需要加入goto命令!*//
        default:printf("您输入错误");break;
        }
}
case '进入':printf("调用进入软件…………
这里我一开始时是“case '*a':printf……”的!能编译出来,可是无论输入什么都出现“您输入错误”
我把*a改为a,然后在编译(能编译出来),然后输入a,竟然能输入“调用进入软件的函数”……
这里我搞了几天了,不知道怎么解决才能输入“进入”,然后才在“case '进入':printf("调用进入软件的……”这里调用以后写好的函数……各位大哥帮帮忙啊!谢谢了!

now 发表于 2008-6-18 18:35

1 、不可使用未初始化的野指针;char *shuru,仅分配用来存储指针本身的内存空间;并没有分配存储数据的空间;
2、shuru=str; shuru指向数组str;明确  *shuru指的是什么?也必须明确汉字在机内存储方式又是怎样?
printf("%d",*shuru);可查看;
————————————--

case -67:
case -51:

广陵绝唱 发表于 2008-6-19 01:44

[code]/*******************************************************************************

        作个字母的,谨作参考——主要是对DOS下输入汉字或者说汉字的ASC码不太
    了解。

        程序拙劣,还望大家指教。谢谢。
*******************************************************************************/

#include<stdio.h>
#include<string.h>
int main(void)
{
         char a[10];
         char jinru[6]="jinru";
         char tuichu[7]="tuichu";
         int i,j=0;
         while(j!= 1 && j!= 2 )
         {
                printf("请输入:“jinru”或者“tuichu”\n");
                gets(a);
                for(i=0;i<strlen(a)&&a[0]=='j';i++)
                {
                        if(jinru[i]==a[i]&&strlen(jinru)==strlen(a))    j=1;
                        else  {j=0;   break;}
                }
                for(i=0;i<strlen(a)&&a[0]=='t';i++)
                {
                        if(tuichu[i]==a[i]&&strlen(tuichu)==strlen(a))   j=2;
                        else {j=0;    break; }
                }
                switch(j)
                {
                        case 1:  printf("调用进入软件的函数!\n");
                                 break;
                        case 2:  printf("再见\n");
                                 break;
                        default: printf("您输入错误\n");

                }
        }
        getch();
}



[/code]

[[it] 本帖最后由 广陵绝唱 于 2008-6-19 09:24 编辑 [/it]]

StarWing83 发表于 2008-6-19 02:32

strcmp吧。swtich是不可能的。
C的switch功能很弱的。

独孤小梦 发表于 2008-6-20 15:13

#include"stdio.h"
#include"malloc.h"
#define E 欢迎您的到来!
void main()
{
        char *shuru,shuru2,str[8],*a="进入",*b="退出";
        printf("%s\t%s\n",a,b);
        shuru=str;
        scanf("%s",shuru);
        switch(*shuru)
        {
        case '*a':printf("调用进入软件的函数");break;   //*调用进入软件的函数*//
        case '*b':printf("再见");break;  //*这里需要加入goto命令!*//
        default:printf("您输入错误");break;
        }
}


啊,我的问题是不是出在DOS下输入中文的没处理好?
switch这里没处理好是吧!我在修改下……谢谢……


回2楼的:
#include<stdio.h>
#include<string.h>
int main(void)
{
         char a[10];
         char jinru[6]="jinru";
         char tuichu[7]="tuichu";
         int i,j=0;
         while(j!= 1 && j!= 2 )
         {
                printf("请输入:“jinru”或者“tuichu”\n");
                gets(a);
                for(i=0;i<strlen(a)&&a[0]=='j';i++)  //这里,strlen(a)那里来的啊?啥意思?
                {
                        if(jinru[i]==a[i]&&strlen(jinru)==strlen(a))    j=1;
                        else  {j=0;   break;}
                }
……………………………………

独孤小梦 发表于 2008-6-20 16:18

晕,怎么回事,帖沉了!大家帮帮忙啊!

StarWing83 发表于 2008-6-20 16:19

'*a'有这种用法么?

独孤小梦 发表于 2008-6-20 16:23

……我只是想和*a对比,然后在选择输出的……不知道怎么办?我这个程序是不是在DOS下中文不行,程序如果用英文就OK呢?!

flyue 发表于 2008-6-20 16:30

恩,switch是不好用,只能用来切换基本数据类型,连类都不支持

StarWing83 发表于 2008-6-20 16:32

用连续的if吧……
switch本来就是对连续if的底层优化而已,说到底还是if链功能比较强大……

独孤小梦 发表于 2008-6-20 16:36

#include"stdio.h"
#include"malloc.h"
#define E 欢迎您的到来!
void main()
{
        char *shuru,shuru2,str[8],*a="进入",*b="退出";
        printf("%s\t%s\n",a,b);
        shuru=str;
        scanf("%s",shuru);
         if(shuru=*a)               //可能写错了……
         printf("调用进入软件的函数");  //*调用进入软件的函数*//
         else
         if(shuru=*b)
        printf("再见"); //*这里需要加入goto命令!*//
         else
        default:printf("您输入错误");        }
}
不知道这样对不对?

StarWing83 发表于 2008-6-20 16:39

哎无语了……
if(!strcmp(shuru,a))....

flyue 发表于 2008-6-20 16:39

if(shuru=*a)               //可能写错了……

我不想打击你,只是……没错,你的确写错了
不能用“=”来判断两个字符串是否相等。要用strcmp()函数来判断。
如“if(!strcmp(shuru, a))printf("相等!"); else printf("不相等!!");”

flyue 发表于 2008-6-20 16:42

我以前用惯了VB,刚开始学C的时候也犯过这个错误[em01] 因为在VB里的确可以用等号来判断两个字符串……不过我还是觉得用函数来判断更“标准”,因为在VB里的字符串的概念定义得很“模糊”,VB真是烂啊

StarWing83 发表于 2008-6-20 16:46

模糊?不模糊啊?只不过VB的类型转换比较复杂而已。
其实VB如果学精了也是很厉害的~~~~

独孤小梦 发表于 2008-6-20 16:49

回复 14# flyue 的帖子

呵呵,不好意思,应该是==吧!
(!strcmp(shuru,a)!必须加string.h头文件吧!了解了!
问下,如果是不同类型的,不知道能不能比较?
比如,shuru是个INT,*a,不知道这样还能不能比较?

flyue 发表于 2008-6-20 16:51

再打击你一下:判断char型字符串,用“==”也不行!!!
你还是老老实实地用strcmp或strncmp来判断吧

(我说话很损么?5555555555[em04] )

[[it] 本帖最后由 flyue 于 2008-6-20 17:02 编辑 [/it]]

独孤小梦 发表于 2008-6-20 16:59

呵呵,谢谢LS的了!虽然说话有点损,不过还是学到东西了!今天晚上回家实践一下!


结论:12和17楼正解!知道C语言中switch功能不是很行,在确定这一类时还是使用strcmp比较不错!
又学到东西了!先实践下,如果有问题在来请教!
谢谢给本帖回复帖子的所有朋友!非常感谢!

StarWing83 发表于 2008-6-20 19:16

难道flyue说话不损么??

flyue 发表于 2008-6-20 19:20

还不都是向你学的?

页: [1] 2

编程论坛