Сравнение строковых массивов - C (СИ)
Формулировка задачи:
Здравствуйте! Задача такая
Написать функцию, печатающую строку-вопрос (ее аргумент), принимающую с клавиатуры только ответ “YES” или “NO” и возвращающую 1 –при ответе “Yes” и 0 -при “No”
Когда ввожу Yes всё считает правильно и выводит 1, НО вот когда ввожу No программа неработает strcmp выдает 1 вместо 0 и флаг k почему то принимает значение 33 хотя я его вообще нигде не меняю.
Помогите пожалуйста разобраться. скрин неверного решения прилагается.
#include<stdio.h>
#include<locale.h>
#include<stdlib.h>
#include<string.h>
int otvet();
int main(const char s[], const char z[])
{
setlocale(0,"");
char a[]="YES", b[]="NO";
printf("Введите %s или %s\n", a, b);
otvet(a, b)?printf("1"):printf("0");
return 0;
}
int otvet(const char s[], const char z[])
{
int i=1, k=1;
char l[4];
while(k)
{
for (i=0;i<3;i++)
{
l[i]=toupper(getchar()); //perevod v verxniy registr
if(l[i]=='\n') break;
}
k=!strcmp(l,s)||!strcmp(l,z)?0:printf("Неверный ответ! Введите заново! \n");
printf("k=%d\n",k);
printf("strcmp(l,s)=%d, strcmp(l,z)=%d",strcmp(l,s),strcmp(l,z));
}
printf("\n%s\n",l);
return (!strcmp(l,s)?1:0);
}Решение задачи: «Сравнение строковых массивов»
textual
Листинг программы
l[i] = 0;