#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
while (c != exit) // here ...
{
printf("Enter a character\n\n");
scanf("%s", c);
printf("your character is : %s\n-------------------\n", c);
}
}
вы пытаетесь сравнить char
с указателем, к которому распадается массив c
.Возможно, вам хотелось бы сравнить первый символ массива с символом exit
:
while (c[0] != exit)
Но это по-прежнему не имеет большого смысла, поскольку c
неинициализирован, а пользователь нееще был шанс сделать какой-либо вклад.Лучше использовать do ... while
-loop:
#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
do {
printf("Enter a character\n\n");
scanf("%s", c);
printf("your character is : %s\n-------------------\n", c);
} while (c[0] != exit);
}
Следующее, что scanf("%s", c);
может потерпеть неудачу (да, маловероятно, но возможно).И пользователь может ввести больше символов, чем предусмотрено в массиве c
.Никогда не следует использовать scanf()
без проверки возвращаемого значения и "%s"
без указания WIDTH
для спецификатора преобразования, чтобы ограничить количество символов, помещаемых в массив.
При чтении строки вам нужна память для WIDTH
символов + завершающий '\0'
.Поэтому, если вы хотите прочитать строку из одного символа, массив должен содержать как минимум 2 элемента:
#include <stdlib.h
#include <stdio.h>
int main()
{
char c[2];
char exit = 'E';
do {
printf("Enter a character\n\n");
while (scanf("%1s", c) != 1 ) {
fputs("Input error!\n");
return EXIT_FAILURE;
}
printf("your character is : %s\n-------------------\n", c);
} while (c[0] != exit);
}
Но если вы хотите прочитать только один символ, вам лучше использовать getchar()
:
#include <stdio.h>
{
int ch;
while (printf("Enter a character\n\n"),
(ch = getchar()) != EOF && ch != 'E')
{
printf("your character is: %c\n-------------------\n", (char) ch);
}
}