繁体   English   中英

带有表 C 的 while 循环

[英]While loop with tables C

#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循环中,但我真的找不到。 任何帮助将不胜感激。 提前致谢。

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

要从缓冲区中取出换行符,请在scanf调用后立即添加对getchar的单独调用:

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

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

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

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

[0 - 29] + '\\0'

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

像这样使用它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM