雪山的肥猫 发表于 2013-12-5 21:49:07

字符串的输入

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

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

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


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

musilintan 发表于 2013-12-5 22:26:18

先得鱼币再回答。。。呵呵。。。

musilintan 发表于 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);
不知道你是不是这样的问题。。。

月河之水 发表于 2013-12-6 10:02:53

in, pre这两个是变量吧。得赋个值

雪山的肥猫 发表于 2013-12-6 10:37:51

musilintan 发表于 2013-12-5 22:34 static/image/common/back.gif
难道你这个不是手动输入两个字符串,一个是“in:”开头的,一个是"pre:"开头的么?为什么不直接scanf("%s", ...

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

语法上是没错的,可是编译器运行不行。

jknfzy 发表于 2013-12-6 12:23:48

我也不懂的同求解答

人为峰 发表于 2013-12-6 12:50:58

musilintan 发表于 2013-12-5 22:34 static/image/common/back.gif
难道你这个不是手动输入两个字符串,一个是“in:”开头的,一个是"pre:"开头的么?为什么不直接scanf("%s", ...

朋友厉害!!!!!!!

人为峰 发表于 2013-12-6 13:01:52


强烈支持楼主ing…

liufei_vip 发表于 2013-12-6 13:41:00


我不说话我就看看。。。

musilintan 发表于 2013-12-6 14:21:01

雪山的肥猫 发表于 2013-12-6 10:37 static/image/common/back.gif
我的输入必须把In:这个字符串弄个进去。
例如:
输入: in:abcd   我用代码scanf("in:%s", str1); s ...

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

musilintan 发表于 2013-12-6 14:26:40

scanf("in:%s", str1);这个是用来规定输入时必须首先输入"in:",输入in:abcd,最后str1只会接收abcd。你是这个意思吧。。。我没理解错吧。。。那你的问题应该就是哪个连续输入的问题了吧。

雪山的肥猫 发表于 2013-12-7 14:39:55

本帖最后由 雪山的肥猫 于 2013-12-7 14:42 编辑

musilintan 发表于 2013-12-6 14:26 static/image/common/back.gif
scanf("in:%s", str1);这个是用来规定输入时必须首先输入"in:",输入in:abcd,最后str1只会接收abcd。你是 ...
恩,这才是点子上。连续输入没有问题吧!
我一开始就是问的连续那块。或许我表达问题,麻烦了。我就是连续那,编译没问题运行就出错了

while ((scanf("in:%spre:%s", in, pre)) != EOF)这不应该出错!

musilintan 发表于 2013-12-7 20:48:05

雪山的肥猫 发表于 2013-12-7 14:39 static/image/common/back.gif
恩,这才是点子上。连续输入没有问题吧!
我一开始就是问的连续那块。或许我表达问题,麻烦了。我就是连 ...

你要不把代码贴出来,整体改吧。。。这样没上没下的。。。找不着方向。。。。

雪山的肥猫 发表于 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,in;
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;
}

雪山的肥猫 发表于 2013-12-8 10:55:02

musilintan 发表于 2013-12-7 20:48 static/image/common/back.gif
你要不把代码贴出来,整体改吧。。。这样没上没下的。。。找不着方向。。。。
麻烦了,看下吧! 主要就是while输入哪里,你看下!谢谢!

musilintan 发表于 2013-12-9 08:41:29

本帖最后由 musilintan 于 2013-12-9 10:06 编辑

雪山的肥猫 发表于 2013-12-8 10:55 static/image/common/back.gif
麻烦了,看下吧! 主要就是while输入哪里,你看下!谢谢!
while哪里可以进入吧,.c文件我没试,看你之前说的没问题。。那估计是C语言可以。但这段代码放在.cpp中就会出现输入问题。9楼的方法可以解决这个.cpp下的输入问题。
这些问题暂时不考虑。你最大的问题是你的create函数。我看了半天愣是没看懂你要做什么。。。create里面会出现严重错误。我猜测你是要写树形结构吧?但你的for循环和下面的递归是有问题的。会出现无限制执行。可能涉足不改涉足的地方。K的值,如果p为空跳出循环,那你的K不就无法计算了么。
你先和我说说你想干嘛吧。。。我自己实在没理解你想要干嘛。。。:dizzy:
页: [1]
查看完整版本: 字符串的输入