2015-04-02 2 views
0
#include <stdio.h> 
#include <conio.h> 
void main() 
{ 
    clrscr() ; 
    char a [5]; 
    puts ("K?"); 
    gets (a); 
    fflush (stdin); 
    if (a = ("K")) 
    { 
     puts (a); 
    } 
    else 
    { 
     puts ("BAE"); 
    } 
    getch(); 
} 

10-я строка показывает ошибку Lvalue при компиляции, пожалуйста, помогите. это моя первая программа, и это мой первый день на кодировании, и я сам преподаю.ошибка lvalue на 10-й строке

ответ

1
  • fflush(stdin) является Undefined Behavior
  • сравнения оператора в C является ==; = является назначение оператора. Вы не можете присвоить что-либо массиву, поэтому возникает ошибка
  • вы можете сравнить строки, используя strcmp() от <string.h>; == просто compares their addresses
+0

Спасибо, код компилируется сейчас, но независимо от того, что я набираю, результатом является «BAE» вместо (a). пожалуйста помоги. – SirVirgin

+0

'strcmp()' возвращает '0', если строки равны. Вы уверены, что испытали это? – Downvoter

+0

О, я задерживаю, я понимаю. Теперь он работает. Благодаря! – SirVirgin

0

Я думаю, что вместо присвоения в заявлении, если

if (a = ("K")) 

вы имеете в виду сравнение.

Тем не менее в массивах нет оператора сравнения. Вы должны сами сравнивать элементы массива по элементу. Для массивов символов есть функция strcmp, объявленная в заголовке <string.h>. Таким образом, действующий код может выглядеть так:

Также вы не должны использовать функцию fflush со стандартным входом. В противном случае программа имеет неопределенное поведение,

#include <string.h> 

//... 

if (strcmp(a, "K") == 0) 
//... 
+0

Thankyou, теперь он работает: D – SirVirgin

+0

Массивы ** do ** имеют оператор сравнения, когда они неявно преобразуются в адрес. – Downvoter

+0

@cad Вы ошибаетесь. Массивы не имеют оператора сравнения. Это указатели, которые имеют оператор сравнения. Указатели и массивы - разные типы. –

0

Есть две ошибки в этой строке

if (a = ("K")) 

Во-первых, вы используете = где вы имели в виду ==. Но это не так в любом случае, вы не можете проверить для струнного равенства в C. Это должно быть что-то вроде этого, которая проверяет первый символ строки и его терминатор

if (a[0] == 'K' && a[1] == '\0') 

или, вы можете использовать функции библиотеки

#include <string.h> 
... 
if (strcmp(a, "K") == 0) { 
    // are the same string. 
} 
Смежные вопросы