在C中获取Seg故障

时间:2016-07-07 17:16:42

标签: c

所以我有以下代码:

#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

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您使用单引号来分隔传递给printf的字符串。你需要使用双引号。

所以改变这个:

printf('%c', ch);

对此:

printf("%c", (char)ch);

同样在对printf的其他调用中也是如此。

此外,您需要将ch声明为int才能检测到EOF条件:

while ((ch != EOF) && (ch != '\n') {

答案 1 :(得分:-1)

四件事:

  1. 使用putchar代替printf
  2. ch声明为int
  3. while - 循环中,输入条件ch = getchar () != EOF
  4. ch = getchar();循环结束时删除while