回 帖 发 新 帖 刷新版面

主题:关于字符数组的反序输出??

#include <stdio.h>
void main()
{
  void fshu(char str[],int m);
  int n,i;
  char str[100];
  printf("请输入这个字符串中字符的个数:\n");
  scanf("%d",&n);
  printf("请输出这个字符串:\n");
  for(i=0;i<n;i++)
  scanf("%c",&str[i]);
  fshu(str,n);
  printf("反序后的字符串为:");
  for(i=0;i<n;i++)
  printf("%c",str[i]);
  printf("\n");

}
void fshu(char str[],int m)
{int j;
 char c;
for(j=0;j<m/2;j++)
{c=str[j];str[j]=str[m-1-j];str[m-1-j]=c;}
}输出总数不对劲???

回复列表 (共2个回复)

沙发

这个问题和[url]http://bbs.pfan.cn/post-362754.html[/url]是一个意思。

scanf("%d",&n);输入以后会把'\n'遗留在缓冲区,因此scanf("%c",&str[i]);最初得到的字符是'\n'.
%c这种格式会接受所有的字符,包括空白字符。

根据楼主的代码,可以这样修改:
 1.  for(i=0;i<n;i++)        改为     for(i=0;i<n;i++)
     scanf("%c",&str[i]);             scanf("%1s",&str[i]);
不过这样使用要注意,'\0'将覆盖str[i+1]了,并且不能接受空白字符。但这个程序可能不会出问题。

  2.在  printf("请输入这个字符串中字符的个数:\n");
        scanf("%d",&n);
后面加上这样的代码 
        char _ch;
        while ( (_ch = getchar()) != '\n' ) { }

  3.把  printf("请输入这个字符串中字符的个数:\n");
        scanf("%d",&n);
改为    printf("请输入这个字符串中字符的个数:\n");
        scanf("%d%*[\n]",&n);
不过这样输出顺序可能有点问题。



板凳

把     for(i=0;i<n;i++)
    scanf("%c",&str[i]);
   改为
      scanf("%s",str);  试试

我来回复

您尚未登录,请登录后再回复。点此登录或注册