错误的输出ASCII到最近的素数
Q.>输入一个字符串(大写字母)。考虑字符串的每个字符的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”作为输入
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);
//.....