Вот моя программа для прочтения всех букв, введенных со стандартного ввода. Но некоторые результаты очень странные. Например, если ввод «lorem ipsum», а выход будет «LOREM IPSUMS?». Если ввод представляет собой один символ, такой как «m», выход будет «MZ # X?» , "S?" и "Z # X?" не должны быть здесь, но они присоединяются к выходу.Странный выход программы C с использованием функции toupper
Почему это происходит?
#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;
}
Вы не нуль-прекратить вашу строку. – user2357112
Строка в C нуждается в конечном маркере для правильной печати. – tofro
Также стоит отметить ['getchar()'] (http://en.cppreference.com/w/c/io/getchar) возвращает EOF, ну, конец файла (включая ввод терминала, если это делается). Следовательно, без новой строки (например, перенаправления из файла с одной строкой, не связанной с новой строкой, или с кем-либо, нажимающей ctrlz/d на клавиатуре терминала), это будет работать навсегда. Не знаете, насколько суровым будет этот судья, но вы можете это исправить. – WhozCraig