c - C程序采用字母电话号码并转换为数字形式
问题描述
我正在开发一个 C 代码,它将采用字母电话号码并转换为数字。我被困在输出上。输出将丢弃所需的数字。例如 1-800-GATOR,将返回 42867 但不返回 1-800-42867。这是我到目前为止所拥有的......
#include <ctype.h>
#include <stdio.h>
int main (void)
{
char ch;
int num_vowels = 0;
printf("Please Enter a phone number: ");
while ((ch = getchar()) != '\n')
{
switch (ch) {
case 'A': case 'B': case 'C':
putchar('2');
break;
}
switch (ch) {
case 'D': case 'E': case 'F':
putchar ('3');
break;
}
switch (ch) {
case 'G': case 'H': case 'I':
putchar ('4');
break;
}
switch (ch) {
case 'J': case 'K': case 'L':
putchar ('5');
break;
}
switch (ch) {
case 'M': case 'N': case 'O':
putchar ('6');
break;
}
switch (ch) {
case 'P': case 'Q': case 'R': case 'S':
putchar ('7');
break;
}
switch (ch) {
case 'T': case 'U': case 'V':
putchar ('8');
break;
}
switch (ch) {
case 'W': case 'X': case 'Y': case 'Z':
putchar ('9');
break;
}
printf("%c", num_vowels);
}
return 0;
}
这是我缺少的东西printf("%c", num_vowels);
吗?
任何帮助都可以得到!
解决方案
您可能误解了该switch
声明。虽然您的用法确实正确执行,但您只需要一个包含多种情况的语句:
switch (ch) {
case 'A': case 'B': case 'C':
putchar('2');
break;
case 'D': case 'E': case 'F':
putchar('3');
break;
case 'G': case 'H': case 'I':
putchar('4');
break;
/* ... */
}
请注意,当输入与任何情况都不匹配时,不会发生任何事情。这就是为什么只有大写字母被转换并发送到输出。一个简单的解决方案是添加一个default
案例。这样,当输入字符不是任何大写字母时,它会直接发送到输出。将此添加到您的末尾switch
:
switch(ch) {
case 'A': case 'B':
/* ... */
default:
putchar(ch);
break;
}
您也可以执行其他检查,例如仅打印某些字符。
至于printf("%c", num_vowels);
它没有任何问题,只是num_vowels
从未使用过。因此,您应该期望它'\0'
在每个发送到输出的字符之后打印一个空字符 ( )。我不确定你的意图,但如果它是一个计数器,你应该增加变量并仅在读取输入后打印它,在while
循环之外。
#include <stdio.h>
#include <ctype.h>
int
main(int argc, char **argv)
{
char ch;
int num_letters = 0;
printf("Please Enter a phone number: ");
while ((ch = getchar()) != '\n')
{
if (isupper(ch)) num_letters++;
switch (ch) {
case 'A': case 'B': case 'C':
putchar('2');
break;
case 'D': case 'E': case 'F':
putchar('3');
break;
case 'G': case 'H': case 'I':
putchar('4');
break;
case 'J': case 'K': case 'L':
putchar('5');
break;
case 'M': case 'N': case 'O':
putchar('6');
break;
case 'P': case 'Q': case 'R': case 'S':
putchar('7');
break;
case 'T': case 'U': case 'V':
putchar('8');
break;
case 'W': case 'X': case 'Y': case 'Z':
putchar('9');
break;
default:
putchar(ch);
break;
}
}
printf("\n-- %d alphabetic letters used.\n", num_letters);
return 0;
}
推荐阅读
- laravel - 使用 Laravel,处理最多四个外键的数据透视表的最佳方法是什么
- calendar - Google calendar api“已超过未经身份验证使用的每日限制。继续使用需要注册。”
- angular - 将数组作为 Observable 返回
- javascript - 在儿童中使用 onclick
- javascript - ReactJS - 在箭头函数中设置状态
- python - 从命令行运行脚本时忽略 sklearn Gridsearch 中 n_jobs = -1 的警告不使用 warnings.simplefilter('ignore')
- odoo - project.project 的 Odoo 状态栏小部件
- java - 使用 for 循环创建 TextField
- python - 如何用熊猫计算从中午到中午的每日平均值?
- python - Pysimplegui 文本元素变量和固定文本