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指令总是被跳过,我无法理解问题是什么以及如何解决它!
答案 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';
}