请教字符串的输入问题! |
我要输入几个字符串,然后输出!下面的程序哪错了??
#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 |
那要看情况了! |
|
|
|