C程序文件 - 用户输入

时间:2015-10-24 14:56:49

标签: c file-io input

此程序采用包含特定句子的文件名并移动一定量。

如果我有你好并且移动了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++;
  }

}

1 个答案:

答案 0 :(得分:1)

OP的代码有一个小错误:

// p = ( p - 'a' ) + shift % 26 + 'a';
p = ( p - 'a' + shift) % 26 + 'a';

奇怪的是用

正确编码了OP
p = ( p - 'A' + shift ) % 26 + 'A';

提示是“你好” - &gt; “D {,, ......”适用于大写,但不是小写。