C 中的用户输入比较,用户输入数组中出现意外符号

问题描述 投票:0回答:1

我尝试使用 gets() 和 strcmp 来将用户输入字符串与函数内部的示例进行比较。

我已经尝试过这段代码:

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

int main() {
    // example string
    char userName[30] = "Alice Jane";
    // string for storing user input
    char userInput[30];
    
    printf("Enter your text:\n");
    fgets(userInput, 30, stdin);
    printf("Your text is: %s\n", userInput);
    printf("Real text is: %s\n", userName);
    
    int strComparing = strcmp(userName, userInput);
    if (strComparing == 0) {
        printf("Strings are equal\n");
    } else {
        printf("Strings are not equal, difference is %d\n", strComparing);
    }
    
    printf("Username size is %lu\n", sizeof(userName));
    printf("Inputed username size is %lu\n", sizeof(userInput));
    
    int i, j;
        // printing example string
        for (i = 0; i < 30; i++) {
            printf("%d ", userName[i]);
        }

        printf("\nBreak between arrays\n");
        // printing user inputted string, here happens something wierd
        for (j=0; j < 30; j++) {
            printf("%d ", userInput[j]);
        }
}

结果:

Enter your text:
Alice Jane 
Your text is: Alice Jane 
Real text is: Alice Jane
Strings are not equal, difference is -32
Username size is 30
Inputed username size is 30
65 108 105 99 101 32 74 97 110 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
Break between arrays
65 108 105 99 101 32 74 97 110 101 32 0 0 0 16 89 94 2 1 0 0 0 24 93 94 2 1 0 0 0 

一切顺利,但比较时,字符串不相等。当尝试打印数组时,我在用户输入数组中看到一些奇怪的东西:

65 108 105 99 101 32 74 97 110 101 32 10 0 0 16 -103 84 0 1 0 0 0 24 -99 84 0 1 0 0 0

但是示例数组很好,ascii 编码的“Alice Jane”短语:

65 108 105 99 101 32 74 97 110 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

这里出了什么问题以及如何处理?为什么用户输入的数组中充满了意想不到的符号?

c string user-input strcmp
1个回答
0
投票
fgets(userInput, 30, stdin);

问题是

fgets()
在缓冲区中添加换行符,假设有空间。在尝试比较之前,您必须先将其剥离。最简单的方法是:

#include <string.h>

userInput[strcspn(userInput, "\n")] = '\0';
© www.soinside.com 2019 - 2024. All rights reserved.