将一个含n个字符的字符串从第m个字符开始的全部字符复制成另一个字符串,为什么结果少最后一个字符?

C语言 码拜 10年前 (2015-05-11) 1080次浏览 0个评论

#include<stdio.h>
void copy(char *p1,int m,int n); 
int main()
{int m,n,i;
char s1[20];
scanf(“%d%d”,&n,&m);
for(i=0;i<n;i++)
scanf(“%c”,&s1[i]);
copy(s1,m,n);
return 0;} 
void copy(char *p1,int m,int n)
{int i;
for(i=m;i<n;i++)
printf(“%c”,*(p1+i));}
将一个含n个字符的字符串从第m个字符开始的全部字符复制成另一个字符串,为什么结果少最后一个字符?

35分
# include <stdio.h>

void copy(char *, int, int);

int main(void)
{
	int n, m;
	int i;
	char str[20] = {0};
	printf("enter num\n");
	scanf("%d %d", &n, &m);
	getchar();

	for (i = 0; i < n; i++)
	{
		scanf("%c", &str[i]);
	}
	copy(str, m, n);

	return 0;
}

void copy(char * str, int m, int n)
{
	int i;
	for (i = m-1; i < n; i++)
		printf("%c", str[i]);
	printf("\n");
}

问题出在你输入数字之后按下的那个回车,被下面循环中的获取字符操作,存在了字符数组里,你看上去输入的是qwerty,其实应该是\nqwert并没有Y。你传进去的参数m是2,在数组中是第三个元素,即w,所以输出的内容是wert。证据就是在你的输出代码中并没有任何换行符,但是输出内容却自动换行了。在scanf2个数字之后使用getchar()接住换行符,或者使用flushall()清空缓冲区即可。
引用赵老师的名言,F9加断点,F5执行,F10单步执行,自己观察监视器中各个变量的实时数据,进行推测哪里出错了。然后F11进入函数什么的,后面的我不会编了。好了就说到这里,不知道我上面的解答有没什么错误,后续跟上即可。

5分
上面有个地方讲错了啊。。。“证据就是在你的输出代码中并没有任何换行符,但是输出内容却自动换行了。”这句话是错的,,我脑残了,,请自动过滤,,。。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明将一个含n个字符的字符串从第m个字符开始的全部字符复制成另一个字符串,为什么结果少最后一个字符?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!