我想知道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?
答案 0 :(得分:2)
实际上是可以的。但是,您应该注意以下一个技巧:
scanf
-返回实际读取值的数量。但是您需要检查输入是否结束。为此,例如,在主循环中使用getchar
函数。
答案 1 :(得分:1)
需要更改
为shift
为以后的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)