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

时间:2018-07-27 07:57:55

标签: c arrays string

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

ex:ABCDEF,相应的ascii是: 65,66,67,68,69,70

在用最接近的素数 67,67,67,67,67,71 替换每个值之后,它给出CCCCCG作为输出 [注意:如果两个质数是等距的,请考虑较低(69最靠近67和71,但要考虑67)。]

#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;
}

在这里,我的代码每次在开始时都会生成一个不需要的单个“ C”字符。输出应为SCSSCC,它正在生成CSCSSC。它还缺少最后一个C

> 1
> 6
> TESTED
> CSCSSC

1 个答案:

答案 0 :(得分:1)

在输入字符串“ TESTED”输入后,您的程序将“ Enter”作为\n输入到输入缓冲区。您的scanf("%c",str+i);正在读取“ \ n”作为输入。

您需要清除输入缓冲区。

fseek(stdin,0,SEEK_END);之后使用scanf("%d%d",&cases,&length);

    int i,j,cases,length;
    scanf("%d%d",&cases,&length);
    fseek(stdin,0,SEEK_END);
    //.....

或者您也可以在scanf(" %c",str+i);

中添加空格