比较输入的字符串[重复]

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

这个问题在这里已有答案:

我要求用户选择一个选项。然后,当转换为字母时,命令strcmp总是得-1。我试图检查正在比较的内容,发现String正在获得“\ ninput”而不是“input”。我想知道为什么会这样

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

static char *alfa[] = {
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "H",
    "I",
    "J",
    "K",
    "L",
    "M",
    "N",
    "O",
    "P",
    "Q",
    "R",
    "S", "T",
    "U",
    "V",
    "W",
    "X",
    "Y",
    "Z",
};

static char *morse[] = {
    ".-X",   //A
    "-...X", //B
    "-.-.X", //C
    "-..X",  //D
    ".X",    //E
    "..-.X", //F
    "--.X",  //G
    "....X", //H
    "..X",   //I
    ".---X", //J
    "-.-X",  //K
    ".-..X", //L
    "--X",   //M
    "-.X",   //N
    "---X",  //O
    ".--.X", //P
    "--.-X", //Q
    ".-.X",  //R
    "...X",  //S
    "-X",    //T
    "..-X",  //U
    "...-X", //V
    ".--X",  //W
    "-..-X", //X
    "-.--X", //Y
    "--..X" //Z
};

void morseToAlfa(){
    int i=0;char string[100];
    int cont=0;
    char*v;char o = ' ';
    printf("Type morse code:\n") ;
    while (o != 'X'){
        o = toupper(getc(stdin));
        string[i] = o;
        i++;
    }

    printf("String input: %s\n",string);
    while(strcmp(string,morse[cont]) != 0 && cont<25){
        printf("String[] : %s\n'",string);
        printf("*Morse[]: %s\n",morse[cont]);
        printf("Case %d:    %d\n",cont,i);
        cont++;
        printf("\n\n"); 
    }

    printf("Cont: %d\n",cont);
    printf("*Morse[]: %s\n",morse[cont]);
    printf("*Alfa[]: %s\n",alfa[cont]);
}

int main(int argc, char *argv[]) {
    int entry;
    char op=' ';

    while(op){ 
        printf("\nType 1 to convert to alphabet, morse must have end with 'X' (eg. .-X)\n");
        printf("\nType 0 to close\n");
        scanf("%d",&entry); 
        if(entry == 1) morseToAlfa();
        if(entry == 0) return 0;

    }

}

注意:如果您只是将功能放在没有扫描的情况下,它就会成功运行。所以问题可能出在第二次扫描上。

c alphabetical letter morse-code converters
1个回答
0
投票

当你打电话给scanf时,它所做的就是阅读一个数字。数字后的任何输入都留待将来调用读入输入。由于您必须按Enter键才能读取数字,因此当您读取字符串时,它仍然在缓冲区中。

一种可能的解决方案可能是:

char input[100];
fgets(input,100,stdin);
sscanf(input,"%d",&entry);

这是使用fgets将读取整行输入的事实,然后你使用sscanf提取数字。

值得记住的是,当你读入莫尔斯字符串时,你也会遇到这个问题,因为当你进入“X”时你就停止了

© www.soinside.com 2019 - 2024. All rights reserved.