鱼C论坛

 找回密码
 立即注册
查看: 3089|回复: 15

字符串的输入

[复制链接]
发表于 2013-12-5 21:49:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
情况是这样的,题目要求:输入两行字符串,第一行“in:”开头,第二行,以“pre:”开头。
   我就scanf("in:%spre:%s", in, pre);

结果运行错误(我的运行):

in:bfdaegc(我才输入一行就完了,gcc就报下面的错误)
段错误 (核心已转储)


求解释,我该咋办?谢谢!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-5 22:26:18 | 显示全部楼层

回帖奖励 +2 鱼币

先得鱼币再回答。。。呵呵。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-5 22:34:12 | 显示全部楼层
难道你这个不是手动输入两个字符串,一个是“in:”开头的,一个是"pre:"开头的么?为什么不直接scanf("%s", str1);
scanf("%s", str2);
然后手动输入2个字符串例如:
in:abcdef
pre:abcdef
这样不就可以了?
又或者你的意思是在输入字符串之前有一个类似于"in:"这样的提示,例如:
in:输入字符串
这样的话你就可以
printf("in:");
scanf("%s", str1);
printf("pre:");
scanf("%s", str2);
不知道你是不是这样的问题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 10:02:53 | 显示全部楼层
in, pre这两个是变量吧。得赋个值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-6 10:37:51 | 显示全部楼层

我的输入必须把In:这个字符串弄个进去。
例如:
输入: in:abcd   我用代码scanf("in:%s", str1); str1就是abcd。  用到了scanf的输入非空白符

语法上是没错的,可是编译器运行不行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 12:23:48 | 显示全部楼层
我也不懂的  同求  解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 12:50:58 | 显示全部楼层
musilintan 发表于 2013-12-5 22:34
难道你这个不是手动输入两个字符串,一个是“in:”开头的,一个是"pre:"开头的么?为什么不直接scanf("%s", ...

朋友厉害!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 13:01:52 | 显示全部楼层

强烈支持楼主ing…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 13:41:00 | 显示全部楼层
12.png
我不说话我就看看。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 14:21:01 | 显示全部楼层
雪山的肥猫 发表于 2013-12-6 10:37
我的输入必须把In:这个字符串弄个进去。
例如:
输入: in:abcd   我用代码scanf("in:%s", str1); s ...

你可以把他们分开写,至于为什么不能连续输入,这个问题我以前也问过老师。。。老师也没给解释清楚。很麻烦,但可以用其他的办法来代替这个问题。
scanf("in:%s", str1);
getchar();
scanf("pre:%s", str2);
可以这样连续输入。使用getchar将回车吃掉。
我一直也是这样处理这个问题的,但产生无法连续输入的原因我也想不明白。看看大神如何回答这个连续无法输入的问题吧,我也很想知道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 14:26:40 | 显示全部楼层
scanf("in:%s", str1);这个是用来规定输入时必须首先输入"in:",输入in:abcd,最后str1只会接收abcd。你是这个意思吧。。。我没理解错吧。。。那你的问题应该就是哪个连续输入的问题了吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-7 14:39:55 | 显示全部楼层
本帖最后由 雪山的肥猫 于 2013-12-7 14:42 编辑
musilintan 发表于 2013-12-6 14:26
scanf("in:%s", str1);这个是用来规定输入时必须首先输入"in:",输入in:abcd,最后str1只会接收abcd。你是 ...

恩,这才是点子上。连续输入没有问题吧!
我一开始就是问的连续那块。或许我表达问题,麻烦了。我就是连续那,编译没问题运行就出错了

while ((scanf("in:%spre:%s", in, pre)) != EOF)这不应该出错!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-7 20:48:05 | 显示全部楼层
雪山的肥猫 发表于 2013-12-7 14:39
恩,这才是点子上。连续输入没有问题吧!
我一开始就是问的连续那块。或许我表达问题,麻烦了。我就是连 ...

你要不把代码贴出来,整体改吧。。。这样没上没下的。。。找不着方向。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-8 10:54:17 | 显示全部楼层
#include <stdio.h>  
#include <malloc.h>  
#include <string.h>  

typedef struct node  
{  
      char ch;  
      struct node *left, *right;  
}node;                

node * creat(char *pre,char *in,int len); 
{
      int k;  
      if(len<=0) 
        return NULL;  
      node *head=(node*)malloc(sizeof(node));  
      head->ch=*pre;  
      char *p;  
      for(p=in;p!=NULL;p++) 
      {
            if(*p == *pre) 
            break;
      }                 
      k=p-in;  
      head->left=creat(pre+1,in,k); 
      head->right=creat(pre+k+1,p+1,len-k-1);  
      return head;  
}

void print(node *head);  
{
        if(head==NULL) return ;  
  print(head->left);  
  print(head->right);  
  printf("%c",head->ch);
}

int main()  
{  
  int len;
  int i;
  char pre[30],in[30];
  node *head;
  head=(node*)malloc(sizeof(node));
  while ((scanf("in:%spre:%s", in, pre) != EOF)
  {
      len=strlen(pre);  
      head=creat(pre,in,len);
      printf("post:");
      print(head);  
  }   
  return 0;  
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-8 10:55:02 | 显示全部楼层
musilintan 发表于 2013-12-7 20:48
你要不把代码贴出来,整体改吧。。。这样没上没下的。。。找不着方向。。。。

麻烦了,看下吧! 主要就是while输入哪里,你看下!谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-9 08:41:29 | 显示全部楼层
本帖最后由 musilintan 于 2013-12-9 10:06 编辑
雪山的肥猫 发表于 2013-12-8 10:55
麻烦了,看下吧! 主要就是while输入哪里,你看下!谢谢!

while哪里可以进入吧,.c文件我没试,看你之前说的没问题。。那估计是C语言可以。但这段代码放在.cpp中就会出现输入问题。9楼的方法可以解决这个.cpp下的输入问题。
这些问题暂时不考虑。你最大的问题是你的create函数。我看了半天愣是没看懂你要做什么。。。create里面会出现严重错误。我猜测你是要写树形结构吧?但你的for循环和下面的递归是有问题的。会出现无限制执行。可能涉足不改涉足的地方。K的值,如果p为空跳出循环,那你的K不就无法计算了么。
你先和我说说你想干嘛吧。。。我自己实在没理解你想要干嘛。。。:dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 15:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表