输入带空格的字母

时间:2018-11-08 12:18:24

标签: c

我想知道ro如何直接获得输入。

例如:

input: 1
       ab c

我希望输出为:

       bc d  

代码

  char x;
  int shift;
  printf("Please enter shift number:");
  scanf("%d",&shift);
  printf("Please enter text to encrypt:\n");
    while (scanf(" %c",&x)!=EOF)
    {
        if(x<='z' && x>='a')
        {
          x=(x-'a'+shift)%(NUM_LETTERS)+'a';
            printf("%c",x);
            continue;
        }
        if(x<='Z' && x>='A')
        {
          x=(x-'A'+shift)%(NUM_LETTERS)+'A';
            printf("%c",x);
            continue;
        }
        else{
          printf("%c",x);
        }
    }
  return 0;
}

用户是否有可能在通过一行时输入字母,直到他单击CTR-z?

2 个答案:

答案 0 :(得分:2)

实际上是可以的。但是,您应该注意以下一个技巧: scanf-返回实际读取值的数量。但是您需要检查输入是否结束。为此,例如,在主循环中使用getchar函数。

答案 1 :(得分:1)

需要更改

shift

line

为以后的while()循环做准备,所有shift输入 line 都需要消耗。

scanf("%d",&shift);
// add 2 lines to consume the rest of the line of input
// such as trailing spaces and \n
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);

阅读,但不要跳过空白

" "中的" %c"消耗而未保存前导空白。

// while (scanf(" %c",&x)!=EOF)
while (scanf("%c",&x)!=EOF)   // drop space from format

风格建议:
而不是测试不想要的返回值是否不相等,而是要测试期望的返回值是否相等。

// while (scanf("%c",&x) != EOF)
while (scanf("%c",&x) == 1)