字符串的输入
情况是这样的,题目要求:输入两行字符串,第一行以“in:”开头,第二行,以“pre:”开头。我就scanf("in:%spre:%s", in, pre);
结果运行错误(我的运行):
in:bfdaegc(我才输入一行就完了,gcc就报下面的错误)
段错误 (核心已转储)
求解释,我该咋办?谢谢!
先得鱼币再回答。。。呵呵。。。 难道你这个不是手动输入两个字符串,一个是“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);
不知道你是不是这样的问题。。。 in, pre这两个是变量吧。得赋个值 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的输入非空白符
语法上是没错的,可是编译器运行不行。 我也不懂的同求解答 musilintan 发表于 2013-12-5 22:34 static/image/common/back.gif
难道你这个不是手动输入两个字符串,一个是“in:”开头的,一个是"pre:"开头的么?为什么不直接scanf("%s", ...
朋友厉害!!!!!!!
强烈支持楼主ing…
我不说话我就看看。。。 雪山的肥猫 发表于 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将回车吃掉。
我一直也是这样处理这个问题的,但产生无法连续输入的原因我也想不明白。看看大神如何回答这个连续无法输入的问题吧,我也很想知道。
scanf("in:%s", str1);这个是用来规定输入时必须首先输入"in:",输入in:abcd,最后str1只会接收abcd。你是这个意思吧。。。我没理解错吧。。。那你的问题应该就是哪个连续输入的问题了吧。 本帖最后由 雪山的肥猫 于 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)这不应该出错!
雪山的肥猫 发表于 2013-12-7 14:39 static/image/common/back.gif
恩,这才是点子上。连续输入没有问题吧!
我一开始就是问的连续那块。或许我表达问题,麻烦了。我就是连 ...
你要不把代码贴出来,整体改吧。。。这样没上没下的。。。找不着方向。。。。 #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;
} musilintan 发表于 2013-12-7 20:48 static/image/common/back.gif
你要不把代码贴出来,整体改吧。。。这样没上没下的。。。找不着方向。。。。
麻烦了,看下吧! 主要就是while输入哪里,你看下!谢谢!
本帖最后由 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]