比较字符串和打印C中存储的字符串

时间:2016-12-20 15:24:44

标签: c arrays string if-statement

我无法使用此程序打印正确输入的字符串。它一直告诉我,即使我有数据,我也没有输入数据。我也无法将字符串与运行我的if语句进行比较。感谢您的帮助。

#include <stdio.h>

//function prototype
void enterPerson();
void enterChoice();

//global variables
char person[30];
char choice;

int main(void) {
    enterPerson();
    enterChoice();


    printf("Please try the Precipitation Program again.\n");

    return 0;
}

void enterPerson(){
    // Ask for person name
    printf("Please enter name:\n");
    scanf("%s", &person);
    //-------------------------------------------
    printf("person is %s\n", person);
    //-------------------------------------------
}

void enterChoice(){
    //initialize choice
    choice = "M";
    //ask what they choose
    printf("Do you choose test or rate? (Enter T for test R for rate)\n");
    scanf("%c", &choice);
    printf("Xchoice is: %c\n", choice);

    if ((choice == 'T')||(choice == 'R')){
        printf("choice is: %c\n", choice);
    }
    else{
        printf("Incorrect or no data was input at this time\n");
    }
}

2 个答案:

答案 0 :(得分:3)

如评论中所述,至少存在3个问题:

  1. scanf("%s", person); - 不要使用char数组的地址。
  2. scanf(" %c", &choice); - 插入空格以忽略空格。
  3. choice = 'M'; - &#34; M&#34;是字符串文字,而choice是字符。

答案 1 :(得分:0)

输入缓冲区中还留有换行符(0xa)字符。您可以通过在scanf行之后打印choice变量来查看它:

 scanf("%c", &choice);
 printf("c: %x\n", choice);

有几种方法可以摆脱这种情况。解释最简单here

还有一个问题:

 scanf("%s", &person);

C中的字符数组名称指向第一个字符,因此您应该使用:

进行修复
 scanf("%s", person);