我的Enigma模拟有问题

时间:2017-01-19 17:03:23

标签: c

void character(){
int i=0;
char c;
printf("type your text to encode (max 80 chars):\n");
while((c=getchar()) != '\n')
{
    text[i] = toupper(c);
    i++;
}
text[i] = '\0';}

我在Enigma的模拟器中使用这段代码。我的问题是,While指令总是被跳过,我无法理解问题是什么以及如何解决它!

2 个答案:

答案 0 :(得分:1)

可能是数组 text 的声明有问题。这个解决方案可以澄清你的问题。

#include <stdio.h>
#include <ctype.h>

#define MAX_SIZE 10

int main(void) {
  char text[MAX_SIZE];
  int i = 0;
  int c;

  while ((c = getchar()) != '\n' && i <= MAX_SIZE - 2) {
    text[i] = toupper(c);
    i++;
  }
  text[i] = '\0';

  printf("%s\n", text);

  return 0;
}

答案 1 :(得分:0)

正如@trentcl所提到的,如果在调用character()之前有一个scanf,则输入流中可能还有一个换行符。这将测试一个领先的换行符并继续循环。
#define将设置数组的大小,以便循环不会将太多字符放入text

#define LIMIT 256
char text[LIMIT + 1] = {'\0'};

void character(){
    int i = 0;
    int c;
    printf ( "type your text to encode (max 80 chars):\n");
    while ( ( c = getchar ( )) != EOF)
    {
        if c == '\n') {
            if ( i) {
                break;//trailing newline
            }
            else {
                continue;//leading newline
            }
        }
        text[i] = toupper ( c);
        i++;
        if ( i >= LIMIT) {
            break;
        }
    }
    text[i] = '\0';
}