【发布时间】:2016-07-04 12:12:57
【问题描述】:
这是我的程序,将从标准输入中输入的所有字母大写。但是有些输出很奇怪。例如,如果输入是“lorem ipsum”,输出将是“LOREM IPSUMS?”。如果输入是单个字符,例如“m”,则输出将为“MZ#X?” . “S?”和“Z#X?”不应该在这里,但它们会附加到输出中。
为什么会这样?
#include <stdio.h>
#include <ctype.h>
int main(void){
char input;
char upper[100];
int count = 0;
while((input = getchar())){
if(input == '\n')
break;
if(input >= 'a' && input <= 'z')
input = toupper(input);
*(upper + count) = input;
count++;
}
printf("%s\n", upper);
return 0;
}
【问题讨论】:
-
你没有空终止你的字符串。
-
C 中的字符串需要一个结束标记才能正确打印。
-
另外值得注意的是
getchar()在文件末尾返回 EOF(包括终端输入,如果在那里完成)。因此,如果没有换行符(例如从具有单个非换行符终止的字符串的文件重定向或有人在终端键盘上按 ctrlz/d),这将永远循环。不确定裁决者会有多严格,但您可能想解决这个问题。