首页  人才招聘  项目交易  BLOG  兴趣小组  图书  资讯  文章  下载  源码  网友作品  刻盘服务 

您所在位置:论坛首页 — 请教字符串的输入问题!
打印本页 保存页面
 请教字符串的输入问题!
我要输入几个字符串,然后输出!下面的程序哪错了??
#include<stdio.h>
#include<string.h>
void main(){
    char *a[3],*b[3];
    int i;
    for(i=0;i<3;i++){
        a[i]=new char[];b[i]=new char[];
        scanf("%s,%s",a[i],b[i]);
    }
    for(i=0;i<3;i++)
        printf("%s,%s",a[i],b[i]);
}


运行结果有错误代码呀,请问哪错误了??或该怎么输入一些字符串?比如我要输入:chenghf,lingje,haieng,yuiejg  然后再输出!
  谢谢指教了!
 回复人:myycdl 回复时间:2005-7-1 16:09:00
char *a[3],*b[3];这是定义了两个指针变量,你在下面也没用到呀。还有你写代码不规范,象“void main(){”应该写成void main()
                                 {
的形式,scanf("%s,%s",a[i],b[i]);这里应该在a[i],b[i]前加上&,即&a[i],&b[i]。
输入字符串不用那么麻烦,比如你要输入chenghf,你可以这样写:
char str[8];
scanf("%s",str);(这里不在str前加&, 是因为字符串本身就代表字符串的首地)
printf("%s",str);
这样就可以了

 
 回复人:shengaa 回复时间:2005-7-1 16:53:00
对的啊  没错啊
 
 回复人:shazhi9 回复时间:2005-7-1 17:02:00
第1:new char[]为何物?
第2:你只输入字符串,用不着定义这么多.完全可以象楼上所说的用scanf("%s,%s",a[i],a[j])
 
 回复人:李奥 回复时间:2005-7-1 17:06:00
scanf("%s,%s",a[i],b[i]);
printf("%s,%s",a[i],b[i]);
错了
改为scanf("%d,%d",&a[i],&b[i]);
printf("%d,%d",a[i],b[i]);

 
 回复人:cjqcjq2008 回复时间:2005-7-1 17:54:00
那我要输入很多的字符串该怎么输入啊??
 
 回复人:cjqcjq2008 回复时间:2005-7-1 17:57:00
还有,我改成了scanf("%s,%s",&a[i],&b[i]);还是不行呀?是在VC上运行的!
 
 回复人:cjqcjq2008 回复时间:2005-7-1 18:01:00
struct old{
    char *name1;         //姓名
    char *name2;         //汉语拼音
    int key;               
};
struct old oldlist[L];   //原始表
我要输入以下内容,该怎么输入???

         oldlist[0].name1="贵方方";oldlist[0].name2="guifangfang";
    oldlist[1].name1="姚见非";oldlist[1].name2="yaojianfei";
    oldlist[2].name1="扬扬";oldlist[2].name2="yangyang";
    oldlist[3].name1="猪玉环";oldlist[3].name2="zhuyuhuan";
    oldlist[4].name1="陈西";oldlist[4].name2="chenxi";
    oldlist[5].name1="张类";oldlist[5].name2="zhanglei";
    oldlist[6].name1="盛永妹";oldlist[6].name2="shengyongmei";
    oldlist[7].name1="陈道全";oldlist[7].name2="chendaoquan";
    oldlist[8].name1="路道清";oldlist[8].name2="ludaoqing";
    oldlist[9].name1="龚云香";oldlist[9].name2="gongyunxiang";
    oldlist[10].name1="孙振兴";oldlist[10].name2="sunzhenxing";
    oldlist[11].name1="孙容费";oldlist[11].name2="sunrongfei";
    oldlist[12].name1="孙名龙";oldlist[12].name2="sunminglong";
    oldlist[13].name1="张好";oldlist[13].name2="zhanghao";
    oldlist[14].name1="田苗";oldlist[14].name2="tianmiao";
    oldlist[15].name1="瑶建中";oldlist[15].name2="yaojianzhong";
    oldlist[16].name1="窑建清";oldlist[16].name2="yaojianqing";
    oldlist[17].name1="姚见化";oldlist[17].name2="yaojianhua";
    oldlist[18].name1="张海风";oldlist[18].name2="zhanghaimei";
    oldlist[19].name1="陈言好";oldlist[19].name2="chenyanhao";
 
 回复人:aiby 回复时间:2005-7-1 18:10:00
for(i=0;i<L;i++)
{
   gets(oldlist[i].name1);
   gets(oldlist[i].name2);
}
 
 回复人:cjqcjq2008 回复时间:2005-7-1 18:35:00
楼上的,那样输入还是不行呀,我是在VC上试的!
 
 回复人:aiby 回复时间:2005-7-1 18:46:00
已调试:
#include<stdio.h>
#define L 3//数组长度
#define NAME 10//名字长度
struct old{
    char name1[NAME];         //姓名
    char name2[NAME];         //汉语拼音
    int key;               
};
struct old oldlist[L];   //原始表
int main(void)
{
    int i;
    for(i=0;i<L;i++)
    {
       gets(oldlist[i].name1);
       gets(oldlist[i].name2);
    }
    for(i=0;i<L;i++)
    {
       puts(oldlist[i].name1);
       puts(oldlist[i].name2);
    }
    getch();
    return 0;
}
 
 回复人:cjqcjq2008 回复时间:2005-7-1 19:18:00
呵,可以了!谢谢楼上的!不过得把getch()改成getchar(),getch()与getchar()有什么区别呀?
 
 回复人:cjqcjq2008 回复时间:2005-7-1 19:18:00
呵,可以了!谢谢楼上的!不过得把getch()改成getchar(),getch()与getchar()有什么区别呀?
 
 回复人:aiby 回复时间:2005-7-1 19:21:00
这里我只是用做暂停的!
 
 回复人:cjqcjq2008 回复时间:2005-7-1 19:40:00
可我把刚那段代码加到自己的程序中就不行了,不知道为什么,我不懂调试呀!
麻烦楼上的帮我再看一下,好吗???
我把源程序贴上来!
 
 回复人:cjqcjq2008 回复时间:2005-7-1 19:42:00
//myconio.h
#ifndef _MY_CONIO_H_FILE_INCLUDED
#define _MY_CONIO_H_FILE_INCLUDED

#include<stdio.h>
#include<conio.h>
#include<windows.h>

#define PERR(bSuccess,api) {if(!(bSuccess)) printf("%s:Error %d from %s on line %d\n",\
__FILE__,GetLastError(),api,__LINE__);}

void MyCls(HANDLE);
void GotoConsoleXY(HANDLE,int,int);

inline void clrscr(void)
{
    HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
    MyCls(hStdOut);
    return;
}

inline void gotoxy(int x,int y)
{
    HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
    GotoConsoleXY(hStdOut,x,y);
    return;
}

void MyCls(HANDLE hConsole)
{
    COORD coordScreen={0,0};//设置清屏后光标返回的屏幕左上角坐标
    BOOL bSuccess;
    DWORD cCharsWritten;
    CONSOLE_SCREEN_BUFFER_INFO csbi;//保存缓冲区信息

    DWORD dwConSize;//当前缓冲区可容纳的字符数

    bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
    PERR(bSuccess,"GetConsoleScreenBufferInfo");
    dwConSize=csbi.dwSize.X * csbi.dwSize.Y;//缓冲区容纳字符数目

    //用空格填充缓冲区
    bSuccess=FillConsoleOutputCharacter(hConsole,(TCHAR)' ',dwConSize,coordScreen,&cCharsWritten);
    PERR(bSuccess,"FillConsoleOutputCharacter");

    bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
    PERR(bSuccess,"ConsoleScreenBufferInfo");

    //填充缓冲区属性
    bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);
    PERR(bSuccess,"FillConsoleOutputAttribute");

    //光标返回屏幕左上角坐标
    bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);
    PERR(bSuccess,"SetConsoleCursorPosition");
    return;
}

void GotoConsoleXY(HANDLE hConsole,int x,int y)
{
    COORD coordScreen={x,y};
    SetConsoleCursorPosition(hConsole,coordScreen);
    return;
}

#endif //_MY_CONIO_H_FILE_INCLUDED
   

#include<stdio.h>
#include<string.h>
#include"myconio.h"
#define L 50             // 定义哈希表长
#define M 47             //定义p值
#define N 30             //定义名单长
char z[22];
struct old{
    char *name1;         //姓名
    char *name2;         //汉语拼音
    int key;               
};
struct old oldlist[L];   //原始表
struct hterm{
    char *name1;         
    char *name2;         
    int key;
    int si;
};
struct hterm HashL[L];   //哈希表
int i,d,adr,sum;
char ch1;
float average;
/*********************************************************/
void InputList(){        //输入表
    char *f;
    int j,s0;
    for(i=0;i<N;i++){
        printf("请输入第 %d 个学生的姓名(汉语):",i+1);
        gets(oldlist[i].name1);
        printf("请输入第 %d 个学生的姓名(拼音):",i+1);
        gets(oldlist[i].name2);
        printf("\n");
    }

    for(i=0;i<N;i++){
        s0=0;
        f=oldlist[i].name2;
        for(j=0;*(f+j)!='\0';j++)
            s0=*(f+j)+s0;
        oldlist[i].key=s0;
    }
}
/**********************************************************/
void HashCreate(){                   //哈希表的创建!
    for(i=0;i<L;i++){
        HashL[i].name1=" ";
        HashL[i].name2=" ";
        HashL[i].key=0;
        HashL[i].si=0;
    }
    for(i=0;i<N;i++){
        sum=0;
        adr=(oldlist[i].key)%M;
        d=adr;
        if(HashL[adr].si==0){
            HashL[adr].key=oldlist[i].key;
            HashL[adr].name1=oldlist[i].name1;
            HashL[adr].name2=oldlist[i].name2;
            HashL[adr].si=1;
        }
        else{
            do{
                d=(d+(oldlist[i].key)%10+1)%M;
                sum=sum+1;
            }while(HashL[d].key!=0);
            HashL[d].key=oldlist[i].key;
            HashL[d].name1=oldlist[i].name1;
            HashL[d].name2=oldlist[i].name2;
            HashL[d].si=sum+1;
        }
    }
}
/************************************************************/
void HashSeach(){                  //哈希表的查找!
    int s0,flag;
    char r;
    clrscr();
    for(r=0;r<20;r++)
        z[r]=0;
    gotoxy(10,3);
    printf("你现在已进入查找过程:");
    gotoxy(10,5);
    printf("请输入汉语拼音后回车!");
    gotoxy(10,7);
    scanf("%s",z);
    s0=0;
    for(r=0;r<20;r++)
        s0=z[r]+s0;
    gotoxy(10,10);
    printf("你所输入名字的关键字:%d",s0);
    sum=1;
    adr=s0%M;
    d=adr;
    if(HashL[adr].key==s0 && strcmp(HashL[adr].name2,z)==0){
        gotoxy(15,13);
        printf("查找结果如下:");
        gotoxy(15,15);
        printf("%s",HashL[d].name1);
        gotoxy(15,17);
        printf("%s",HashL[d].name2);
        gotoxy(15,19);
        printf("查找 %d 次成功!",sum);
        printf("\n\n按任意键返回!");
        getch();
    }
    else{
        if(HashL[adr].key==0){
            gotoxy(24,15);
            printf("无  记  录! ");
            printf("\n\n按任意键返回!");
            getch();
        }
        else{
            flag=0;
            while(flag==0){
                d=(d+s0%10+1)%M;
                sum=sum+1;
                if(HashL[d].key==0){
                    flag=1;
                    gotoxy(24,15);
                    printf("无  记  录!");
                    printf("\n\n按任意键返回!");
                    getch();
                }
                if(HashL[d].key==s0 && strcmp(HashL[d].name2,z)==0){
                    flag=1;
                    gotoxy(15,13);
                    printf("查找结果如下:");
                    gotoxy(15,15);
                    printf("%s",HashL[d].name1);
                    gotoxy(15,17);
                    printf("%s",HashL[d].name2);
                    gotoxy(15,19);
                    printf("查找 %d  次成功!",sum);
                    printf("\n\n按任意键返回!");
                    getch();
                }
            }
        }
    }
}
/*************************************************************/
void HashDisplay(){                   //哈希表的显示!
    clrscr();
    gotoxy(1,0);
    printf("哈希表:");
    gotoxy(1,2);
    printf("地址:");
    for(i=0;i<L;i++){
        gotoxy(1,i+3);
        printf("%-3d",i);
    }
    gotoxy(9,2);
    printf("关键字:");
    for(i=0;i<L;i++){
        gotoxy(10,i+3);
        printf("%-6d",HashL[i].key);
    }
    gotoxy(19,2);
    printf("姓名:");
    for(i=0;i<L;i++){
        gotoxy(19,3+i);
        printf("%s",HashL[i].name1);
    }
    gotoxy(28,2);
    printf("拼音:");
    for(i=0;i<L;i++){
        gotoxy(28,i+3);
        printf("%s",HashL[i].name2);
    }
    gotoxy(40,2);
    printf("查找长度:");
    for(i=0;i<L;i++){
        gotoxy(43,i+3);
        printf("%2d",HashL[i].si);
    }
    gotoxy(53,2);
    printf("H(key):");
    for(i=0;i<L;i++){
        gotoxy(53,i+3);
        printf("%2d",(HashL[i].key)%M);
    }
    average=0;
    for(i=0;i<L;i++)
        average=average+HashL[i].si;
        average=average/N;
        gotoxy(10,54);
        printf("平均查找长度:ASL(%d)=%f",N,average);
        gotoxy(20,56);
        printf("任意键下一屏!");
        ch1=getch();
}
/****************************************************************/
void main(){
    InputList();
    HashCreate();
a:clrscr();
  gotoxy(9,2);
  printf("※※※※※※※※※※※※※※※※※※※※※※※");
  gotoxy(21,3);
  printf("欢 迎 使 用 本 程 序!");
  printf("\n");
  gotoxy(22,5);
  printf("   1.显示哈希表");
  printf("\n");
  gotoxy(22,7);
  printf("   2.查找");
  printf("\n");
  gotoxy(22,9);
  printf("   x.退出");
  printf("\n");
  gotoxy(25,12);
  printf("请输入选择:");
  //printf("\n");
  //gotoxy(24,14);
  ch1=getch();
  if(ch1==0x78){
      clrscr();
      gotoxy(18,5);
      printf("谢谢使用本程序,你已经退出本程序!");
      printf("\n");
      exit(0);
  }
  if(ch1==0x31)
      HashDisplay();
  if(ch1==0x32)
      HashSeach();
  goto a;
}

 
 回复人:aiby 回复时间:2005-7-1 19:55:00
名字用数组!
 
 回复人:cjqcjq2008 回复时间:2005-7-1 19:56:00
aiby,请帮我再看一下好吗???在线等呀
 
 回复人:cjqcjq2008 回复时间:2005-7-1 20:28:00
处理字符串时,数组和指针有什么区别呀?
 
 回复人:aiby 回复时间:2005-7-1 20:30:00
那要看情况了!
 
广告
 
最新招聘信息

关于本站 - 网站导航 - 广告服务 - 联系站长 - BUG报告 - 友情链接 - 赞助本站
Copyright© 1999-2008 Programfan.com. All Rights Reserved
论坛制作&维护:Hannibal    Email: webmaster@pfan.cn
最佳浏览效果:IE6.0+ 或 FireFox 1.5+ 分辨率:1024*768