此程序采用包含特定句子的文件名并移动一定量。
如果我有你好并且移动了22它应该是 Dahhk ,当我没有输入文件名并且文件名是该程序手动像
ifp = fopen(" input.txt"," r");
然而,当我让用户输入文件名并且输入为 Hello 并且移动22时,输出变为 D {,, ......
ifp = fopen(name," r");
我尝试使用scanf("%s",名称);
我尝试使用fgets(name,sizeof(name),stdin);
都会产生相同的结果
我不确定如何解决这个问题。
#include <stdio.h>
#define MAX_LEN 100
void decode( char *sentence, int shift );
int main( void )
{
FILE *ifp;
FILE *ofp;
char str[MAX_LEN];
int shift_by = 0;
char name[100];
printf("Program name: \n");
scanf("%s", name);
printf( "Please enter shift by and press enter\n" );
scanf( " %d", &shift_by );
ifp = fopen( name, "r" );
ofp = fopen( "output.txt", "w" );
if ( ifp == NULL )
{
printf( "FILE doesnt open" );
return 1;
}
while ( fgets( str, MAX_LEN, ifp ) != NULL )
{
decode( str, shift_by );
fprintf( ofp, " %s", str );
}
fclose( ifp );
fclose( ofp );
return 0;
}
void decode( char *sentence, int shift )
{
int i = 0;
char p;
while ( p = sentence[i] )
{
if ( ( p >= 'a' ) && ( p <= 'z' ) )
{
p = ( p - 'a' ) + shift % 26 + 'a';
}
if ( ( p >= 'A' ) && ( p <= 'Z' ) )
{
p = ( p - 'A' + shift ) % 26 + 'A';
}
sentence[i] = p;
i++;
}
}
答案 0 :(得分:1)
OP的代码有一个小错误:
// p = ( p - 'a' ) + shift % 26 + 'a';
p = ( p - 'a' + shift) % 26 + 'a';
奇怪的是用
正确编码了OPp = ( p - 'A' + shift ) % 26 + 'A';
提示是“你好” - &gt; “D {,, ......”适用于大写,但不是小写。