Короткая программа, которая принимает ввод букв нижнего регистра, она дает буквы верхнего регистра и выходит при нажатии клавиши ввода

Преобразование работает правильно, но когда я нажимаю клавишу ввода, когда его просят ввести нижний регистр, он выполняет ввод (\ n) и не выходит и не останавливается.

Это моя программа:

#include <stdio.h>
#include <math.h>main()
{
char ch;
printf("Press a letter: ");
while (scanf(" %c",&ch)!='\n')
{
printf("%c\n",ch-32);
}}

0

Решение

Ваша программа неверна:

  • scanf делает не возвращает прочитанный символ, возвращает количество отсканированных предметов
  • Один из способов справиться с '\n' это проверить if (ch == '\n') break;
  • Вы должны проверить, является ли символ действительно буквой, прежде чем вычесть 32
  • Вы должны использовать toupper Функция вместо использования вычитания напрямую.
4

Другие решения

используйте этот код:

#include <stdio.h>
#include <math.h>

main()
{
char ch;
printf("Press a letter: ");
while (1)
{
scanf(" %c",&ch);
if(ch=='\n')
break;
printf("%c\n",ch-32);
}
}
1

scanf(" %c",&ch) никогда не установит ch в \n так как пространство в формате занимает все пустое пространство, в том числе '\n' прежде чем перейти к "%c",

Далее возвращаемое значение из scanf() EOF или число успешно проанализированных аргументов, а неch, (не "%n" хоть)

Рассматривать:

#include <stdio.h>
// No need for #include <math.h>
#include <ctype.h>

int main() {
int ch;  // use int
printf("Press a letter: ");
while ((ch = fgetc(stdin)) != EOF && (ch != '\n')) {
printf("%c\n", toupper(ch));
}
return 0;
}

ОП заявляет в другом комментарии: «Мы должны выполнять это, не используя внешние функции, например, мой профессор не учил нас работать». Давайте предположим stdio функции в порядке и ctype те не.

  // Assume ASCII encoding

while ((ch = fgetc(stdin)) != EOF && (ch != '\n')) {
if ((ch >= 'a') && (ch <= 'z')) {
ch += 'A' - 'a';
}
printf("%c\n", ch);
}

// Not assuming ASCII encoding, but letters a-z, A-Z

while ((ch = fgetc(stdin)) != EOF && (ch != '\n')) {
static const char *az = "abcdefghijklmnopqrstuvwxyz";
static const char *AZ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i;
for (i=0; az[i]; i++) {
if (ch == az[i]) {
ch = AZ[i];
break;
}
}
printf("%c\n", ch);
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector