所以我有以下代码:
#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
我做错了什么?
最佳答案
您使用单引号来分隔传递给 printf
的字符串。您需要使用双引号。
所以改变这个:
printf('%c', ch);
对此:
printf("%c", (char)ch);
在对 printf
的其他调用中也类似。
此外,您需要将 ch
声明为 int
才能检测 EOF 条件:
while ((ch != EOF) && (ch != '\n') {
关于c - 在 C 中获取段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38251540/