所以我有以下代码:
#include <stdio.h>
#include <ctype.h>
int main(void) {
char ch;
printf("Enter Phone Number: ");
ch = getchar();
while (ch != '\n') {
switch(ch) {
case 'A':
case 'B':
case 'C':
printf('2');
break;
case 'D':
case 'E':
case 'F':
printf('3');
break;
case 'G':
case 'H':
case 'I':
printf('4');
break;
case 'J':
case 'K':
case 'L':
printf('5');
break;
case 'M':
case 'N':
case 'O':
printf('6');
break;
case 'P':
case 'R':
case 'S':
printf('7');
break;
case 'T':
case 'U':
case 'V':
printf('8');
break;
case 'W':
case 'X':
case 'Y':
printf('9');
break;
default:
printf('%c', ch);
break;
}
ch = getchar();
}
}
目标是:
input: CALLATT
output: 2255288
或
input: 1-800-COL-LECT
output: 1-800-265-5328
当我运行程序时:
Enter Phone Number: CALLATT
Segmentation fault: 11
我做错了什么?
答案 0 :(得分:1)
您使用单引号来分隔传递给printf
的字符串。你需要使用双引号。
所以改变这个:
printf('%c', ch);
对此:
printf("%c", (char)ch);
同样在对printf
的其他调用中也是如此。
此外,您需要将ch
声明为int
才能检测到EOF条件:
while ((ch != EOF) && (ch != '\n') {
答案 1 :(得分:-1)
四件事:
putchar
代替printf
。ch
声明为int
。while
- 循环中,输入条件ch = getchar () != EOF
。ch = getchar();
循环结束时删除while
。