我遇到这个问题。
我有这个任务,我需要将字符显示为数值。
就像热线电话号码一样,例如拨打1-800-the-best
。它会将所有字母显示为数字。
abc = 2, def = 3, ghi = 4, jkl = 5, mno = 6, pqrs = 7, tuv = 8, wxyz = 9.
我尝试使用atoi
,但这会忽略数字字符,只会转换为字母字符。
我正在使用switch语句。没有编译错误,但不知何故我的输出结果很奇怪。这是我的代码
#include<stdio.h>
#include<string.h>
#define num 11
int main(void)
{
char ch;
char number[11];
int i = 0;
int j = 0;
printf("please enter your phone number: \n");
for(i = 0; i < num; i++)
{
scanf_s("%c", &ch);
switch(ch)
{
case '0':
number[i] = 0;
break;
case '1':
number[i] = 1;
break;
case 'a': case 'b': case 'c':
number[i] = 2;
break;
case 'd': case 'e': case 'f':
number[i] = 3;
break;
case 'g': case 'h': case 'i':
number[i] = 4;
break;
case 'j': case 'k': case 'l':
number[i] = 5;
break;
case 'm': case 'n': case 'o':
number[i] = 6;
break;
case 'p': case 'q': case 'r': case 's':
number[i] = 7;
break;
case 't': case 'u': case 'v':
number[i] = 8;
break;
case 'w': case 'x': case 'y': case 'z':
number[i] = 9;
break;
}
}
printf("the phone number you enter is: ");
for(j = 0; j < num; j++)
{
printf("%d", number[j]);
}
return 0;
}
当我输入每个字符为数字时,例如:1 2 3 4 5 6
输出结果为
1-52-52-52-52-52-52-52-52-52-52-52。
如果我将每个字符串输入为字母表,例如:a b c d e f
,则输出结果为
2-522-522-523-523-523。
我想知道我做错了什么。
答案 0 :(得分:0)
你忘了告诉它如何处理数字输入。您需要添加更多case语句,每个数字一个,如下所示:
#include<stdio.h>
#include<string.h>
#define num 11
int main(void)
{
char ch;
char number[11];
int i = 0;
int j = 0;
printf("please enter your phone number: \n");
for(i = 0; i < num; i++)
{
scanf("%c", &ch); // changed from scanf_s() to scanf()
switch(ch)
{
case '0':
number[i] = 0;
break;
case '1':
number[i] = 1;
break;
case 'a': case 'b': case 'c':case '2':
number[i] = 2;
break;
case 'd': case 'e': case 'f': case '3':
number[i] = 3;
break;
case 'g': case 'h': case 'i': case '4':
number[i] = 4;
break;
case 'j': case 'k': case 'l': case '5':
number[i] = 5;
break;
case 'm': case 'n': case 'o': case '6':
number[i] = 6;
break;
case 'p': case 'q': case 'r': case 's': case '7':
number[i] = 7;
break;
case 't': case 'u': case 'v': case '8':
number[i] = 8;
break;
case 'w': case 'x': case 'y': case 'z': case '9':
number[i] = 9;
break;
}
}
printf("the phone number you enter is: ");
for(j = 0; j < num; j++)
{
printf("%d", number[j]);
}
return 0;
}
一旦输入了额外的案例,这就编译并正确运行。但是,您还需要处理不属于这些的输入,最好的方法是添加
default: printf("Number/letter not entered\n"); break;
这将处理诸如.,#
等
编辑以显示完整的节目。