修复这个if,else语句

时间:2015-05-19 12:25:13

标签: c char

问题似乎在

  

第18行:警告:指针和整数之间的比较
  第22行:错误:在' else'

之前的预期表达式

我做错了什么?有没有更好的方法呢?

#include <stdio.h>

int main(void)
{
    char pname[25];
    char Y[1];
    char N[1];
    char choice[1];

    printf("when responding to Yes or No questions use Y/N.\n");
    printf("Hello,traveler Welcome to the Castle of Atal...."
            "What is your name?\n");
    scanf("%s", &pname);

    printf("Greeting's %s What bring's you to the kingdom of Tharnos?\n",
            pname);
    printf("I see how intresting do you wish to enter %s ?\n", pname);
    scanf("%c", &choice);

    if (choice == 'Y');
        printf("Enter %s...\n", pname);
    else (choice == 'N');
        printf("Farewell lost soul!\n");

    return 0;
}

4 个答案:

答案 0 :(得分:8)

在您的代码中,更改定义

char Y [1];
char N [1];
char choice[1];

 char Y;
 char N;
 char choice;

否则,使用当前定义,choice表示array(1个元素),

    这里不需要
  • ,单个char可以正常工作。
  • 会触发执行choice == 'Y'的警告,因为您无法将数组与==运算符进行比较。

那就是说,

  1. scanf ("%c",&choice);应为scanf (" %c",&choice);,以避免之前的newline
  2. scanf ("%s",&pname);应为scanf ("%24s",pname);以避免缓冲区溢出。
  3. ,如 @iharob 先生提到的in the answer

    1. if (choice == 'Y');应为if (choice == 'Y')(已移除;),否则if语句实际上无用。
    2. else没有条件表达式评估。不过,您可以使用else if(choice == 'N')

答案 1 :(得分:6)

您的if语句确实存在问题

  1. 你不应该在if语句的末尾加一个分号,这意味着一个带有空代码块的if语句。

  2. 语法

    else (choice == 'N');
    

    错了,但有一个等价的

    else if (choice == 'N');
    /*   ^ you should add `if' after `else' */
    
  3. 您的代码有更多问题,但您没有问过它们。无论如何,@ SouravGhosh确实解决了这个问题。

答案 2 :(得分:4)

删除分号。

if (choice == 'Y');  <----- remove this semicolon
 { 
     printf ("Enter %s...\n",pname);
 } 

以上相当于:

if( choice == 'Y')
  ;  /* Do nothing */
printf( ... );
else  /* syntax error, not paired with an if statement */
  ;

答案 3 :(得分:2)

您的语法不正确,您应该使用正确的语法:

if (condition) {

} else if (condition) {

}

或者你可以使用这个,如果你没有任何条件成立时默认做的事情:

if (condition) {

} else if (condition) {

} else {
    // you will get in this if when all of your conditions become false 
}