错误的输出ASCII到最近的素数

错误的输出ASCII到最近的素数,c,arrays,string,C,Arrays,String,Q.>输入一个字符串(大写字母)。考虑字符串的每个字符的ASCII值,并用最接近的素数替换它并打印该字符串。 例如:ABCDEF,相应的ascii码是:65,66,67,68,69,70 用最接近的素数67,67,67,67,67,71替换每个值后,它将CCCCCG作为输出 [注:如果两个素数是等距的,考虑下层(69最接近67和71,但考虑67)。 键入输入字符串“TESTED”后,您的程序将“Enter”作为\n输入输入到输入缓冲区。你的scanf(“%c”,str+i)正在将“\n”作为输入

Q.>输入一个字符串(大写字母)。考虑字符串的每个字符的ASCII值,并用最接近的素数替换它并打印该字符串。

例如:
ABCDEF
,相应的ascii码是:65,66,67,68,69,70

用最接近的素数67,67,67,67,67,71替换每个值后,它将
CCCCCG
作为输出 [注:如果两个素数是等距的,考虑下层(69最接近67和71,但考虑67)。
键入输入字符串“TESTED”后,您的程序将“Enter”作为
\n
输入输入到输入缓冲区。你的
scanf(“%c”,str+i)正在将“\n”作为输入读取

您需要清除输入缓冲区

使用
fseek(标准输入,0,搜索结束)
scanf之后(“%d%d”、&cases、&length)


或者你也可以在你的
scanf(“%c”,str+i)中加一个空格

您可以共享输入文件的示例吗?您对
str
变量的分配有问题。您只分配一次,但每次都会释放它。这让我相信你实际上误读了输入。第1行:没有测试用例(n),那么字符串的长度和输入字符串的长度为n次请不要发布包含文本的图形。使用关联菜单编辑->标记并用鼠标选择。然后,剪贴板中有文本,可以轻松粘贴到问题中。
#include<stdio.h>
#include<string.h>

int closestprime(int x)
{
  int primes[6]={67,71,73,79,83,89},i;
  for(i=0;i<6;i++)
  {
    if(x<primes[i])
    {
      if(x<=69)
          return 67;
      else{
        if((x-primes[i-1])>(primes[i]-x))
          return primes[i];
        else
          return primes[i-1];
      }

      if (x==90||x==91)
        return 89;
    }
  }
}

int main()
{
  int i,j,cases,length;
  scanf("%d%d",&cases,&length);
  char *str;
  str=(char *)malloc((length+1)*sizeof(char));
  for(j=0;j<cases;j++){

    for(i=0;i<length;i++)
    {
        scanf("%c",str+i);
    }

    for(i=0;i<length;i++)
    {
        str[i]=(char) closestprime((int) str[i]);
        printf("%c",str[i]);
    }

    free(str);
    printf("\n");
  }
  return 0;
}
> 1
> 6
> TESTED
> CSCSSC
    int i,j,cases,length;
    scanf("%d%d",&cases,&length);
    fseek(stdin,0,SEEK_END);
    //.....