C语言基础问题,不知道程序错在哪里!

来源:百度知道 编辑:UC知道 时间:2024/05/25 11:26:09
请看看下列程序错在哪里,谢谢!

#include<string.h>
#include<stdio.h>

int main(void)
{
char *p1;
char s[81];
p1=s;

do
{
gets(s); /*读一个字符串,长度小于80*/
/*打印输入的字符串*/
while(*p1)
printf("%d",*p1++);
}while(strcmp(s,"done")); /*当输入为done时,退出*/
return 0;
}
首先感谢 魔法师的帮忙!我这还有一种写法,这是正确的,请帮忙看看这个正确的和上面错误的写法,到底区别在哪里,请详细说明一下,谢谢!

#include<string.h>
#include<stdio.h>

int main(void)
{
char *p1;
char s[81];

do
{
p1=s;
gets(s); /*读一个字符串,长度小于80*/

/*打印输入的字符串*/
while(*p1)
printf("%d",*p1++);
}while(strcmp(s,"done")); /*当输入为done时,退出*/
return 0;
}

#include<string.h>
#include<stdio.h>

int main(void)
{
char *p1;
char s[81];
i=0;
p1=s;

do
{
gets(s); /*读一个字符串,长度小于80*/
/*打印输入的字符串*/
while(*(p1+i)!='\0')
{
printf("%c",*(p1+i));
i++;
}
}while(strcmp(s,"done")); /*当输入为done时,退出*/
return 0;
}

错误在于指针P1移动了 你得不到正确结果

回答补充:楼主的第二份代码,请注意在DO~WHILE循环体中的第一句是:p1=s; 这句话相当于表示在每次执行的循环语句时,都先把指针P1初始化指向S,这样一来,变相的解决了我上面提到的指针被移动的问题。 所以不会发生错误。

printf("%d",*p1++); 此处有错!!!p1++

printf("%d",*p1++); 改为 p[i++] i 初始0

p1=s;

这个的位置是什么意思。