无论输入如何,strcmp始终为true

Aar*_*lly 1 c codeblocks

所以我目前正在学习C编程,为大学期开学做准备.有点像"抬腿"的事情.无论如何,我正在做一些比较字符串和使用字符串复制函数在字符串数组中放置新值的练习,但我得到一些我真的无法解释的意外行为.无论我输入什么,它总是显示字符串比较检查的肯定结果,我无法确定我出错的地方.如果有人愿意帮助我,我将不胜感激!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char tVar1[10];
    char tVar2[10];

    printf("Enter your first test variable: \n");
    scanf("%c", &tVar1);

    strcpy(tVar2, "yes");

    if(strcmp(tVar1, "yes") == 0)
        {
            printf("It would probably be more effective if you used two different variables.");
        }
    else
        {
            printf("Nope, just the same amount of effectiveness.");
        }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ode 5

%c用于读取单个字符值而不是字符串.在终端上键入字符串时,只读取第一个字符并将其分配给tVar1[0].要从输入流中读取字符串,您需要使用%s转换说明符:

scanf( "%9s", tVar1 ); // note no & on tVar1
Run Code Online (Sandbox Code Playgroud)

tVar1大小可以容纳10个元素,这意味着我们最多可以在缓冲区中读取9个字符(必须为字符串终止符保留一个元素).这9可以%9s防止我们将更多字符读入缓冲区而不是它可以容纳.

不幸的是,大小必须硬编码为转换说明符的一部分.没有办法提供大小作为运行时参数(就像有printf).有很多方法 - 例如,您可以在运行时动态构建格式字符串 - 但无论如何都会很痛苦.

请注意,我们不会在通话中使用&for .在大多数情况下,"N-element array of "类型的表达式将转换为"指向" 的类型的表达式,表达式的值将是第一个元素的地址. tVar1scanfTT