C简单程序

标签 c

我正在学习C语言,所以我尝试用我所知道的来编写一个简单的程序。程序应该询问一个字母,询问您是否想要字母表中字母的位置(如果是,则显示“x 是字母表中的 y 字母”以及后缀),然后询问您是否想要二进制字母并将其放入二进制中。但由于某种原因它不起作用。我尝试了“手动调试”(使用 put() 来查看什么不起作用),类“getNumber”可以工作,但当它进入主类时,值会发生变化。

 a returns "2686719" instead of "a is the 1st letter in the alphabet" and b returns "2b is the 2z\<<y in the alphabet".

这是代码,我做错了什么?

#include <stdio.h>
#include <stdlib.h>
//011
int main(){
    int x = 2;
    char letter;
    puts("Write a letter");
    char temp2;
    scanf("%c", &temp2);
    int number;
    letter = temp2;
    puts("get alphabet position? y/n ");
    char temp[2];
    scanf("%s", temp);
    char answer = temp[0];
    int tempNumber2 = getNumber(letter);
    if(answer == 'y'){
        char suffix[3];
        int number = tempNumber2;
        printf("%d", number);
        if (number == 1){
            x = 1;
            suffix[0] = "s";
            suffix[1] = "t";
        }else if (number < 27){
            suffix[0] = "t";
            suffix[1] = "h";
            x = 1;
        }
        if (x == 1){
            printf("%c is the %d", letter, number);
            printf("%s in the alphabet\n", suffix);
        }}else if (answer == 'n'){
        x = 1;
        }else if (answer != 'y' && answer != 'n'){
            puts("ERROR, invalid letter");
            x = 3;
    };
    if(x != 3){
        puts("Convert to binary?");
    }
    return 0;
}
int getNumber(letter){
    char tempLetter = letter;
    int tempNumber = -1;
    char alphabet[27] = "abcdefghijklmnopqrstuvwxyz";
    int i = 0;
    while(i < 27){
        i++;
        if(tempLetter == alphabet[i]){
            tempNumber = i;
            tempNumber++;
            printf("%d \n", tempNumber);
            return tempNumber;
        }
    };
}

顺便说一句,我还没有到达二进制部分,因此为什么它是空的。

最佳答案

正如评论中的每个人所说,您的问题是后缀的最后一个字符未设置为“\0”。

此外,您可以以更简单的方式getNumber:

int getNumber(char letter) {
    return (int)(letter - 'a') + 1;
}


顺便说一句,你可以让你的代码看起来更好一点(不要改变太多):

int main() {
    char letter;
    char answer;

    puts("Write a letter");
    scanf("%c", &letter);
    getchar(); // read \n
    puts("get alphabet position? y/n ");
    scanf("%c", &answer);
    getchar(); // read \n
    if (answer == 'n') {
        return 0;
    }
    if (answer != 'y') {
        puts("ERROR, invalid letter");
        return 1;
    }

    int number = getNumber(letter);
    char suffix[3];
    suffix[2] = 0;

    if (number == 1) {
        suffix[0] = 's';
        suffix[1] = 't';
    } else if (number == 2) {
        suffix[0] = 'n';
        suffix[1] = 'd';
    } else if (number == 3) {
        suffix[0] = 'r';
        suffix[1] = 'd';
    } else {
        suffix[0] = 't';
        suffix[1] = 'h';
    }
    printf("%c is the %d%s letter in the alphabet\n", letter, number, suffix);

    puts("Convert to binary?");
    return 0;
}

关于C简单程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233252/

相关文章:

c - 类型转换结构如何工作?

计算给定字符串中有多少个由空格分隔的整数值

c - 在可变参数函数的包装器中中继可选参数

Visual Studio 2008 中的 C 编程

c - 当我传入无效的缓冲区指针时,为什么 read() 系统调用会阻塞?

c# - 如何从 C# 调用具有 char[] 作为 OUT 参数的非托管函数?

c - 空括号中的星号是什么意思?

我可以将给定的 mips 汇编代码转换为 C 编程语言,最终得到相同的结果吗

C - 使用 malloc 获取 char** 的地址

c - 如何使用指向数组的指针访问 3-d 数组