而循环与表C

时间:2015-11-30 18:50:30

标签: c while-loop

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 30
int main()
{  char c, y, input[N];
int X, i=0, j;
printf("Give displacement\n");
scanf("%d",&X);
printf("Give chars\n");

while(((c=getchar()) !=EOF) && (i<N-1)){
    input[i]=c;
    i++;

}
input[i]='\0';
j=0;
for(j=0; j<=i-1; j++){
    if (isalpha(input[j])){
        if (isupper(input[j]))
          y=(input[j]-'A'+X)%26+'A';
        else
          y=(input[j]-'a'+X)%26+'A';
        putchar(y);
    }


}
return 0;
}
嘿所有。好吧,这段代码看起来似乎没有用。它跳过桌子上的2个位置而不是一个位置。这使得该程序无法使用,因为我需要一个包含30个位置的表。我认为问题出在while循环中,但我真的找不到它。任何帮助都会得到赞赏。 提前致谢。

2 个答案:

答案 0 :(得分:1)

调用scanf后,输入缓冲区中还有一个换行符。该换行符成为getchar读取的第一个字符。

要从换行符中取出换行符,请在getchar电话后立即向scanf添加单独的电话:

scanf("%d",&X);
getchar();

这将为您提供您缺少的额外角色。

此外,正如评论中所述,c应定义为int而不是char,因为getchar会返回int。否则,EOF的测试将始终为false。

答案 1 :(得分:0)

如果你想要30个字符,你必须将N定义为31

[0 - 29] +'\ 0'

在你的第一个while循环中,我认为第二个测试是错误的:

像这样使用:

while(((c=getchar()) !=EOF) && (i<=N-1)){
    input[i]=c;
    i++;
}