c - 在 C 中获取段错误

标签 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

我做错了什么?

最佳答案

您使用单引号来分隔传递给 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/

相关文章:

c - fgets 输出奇怪的垃圾字符

c - 通过引用传递c中的指针数组

c - 在 Linux 上执行进程之前获取 pid

c - C 中函数指针如何工作

c - 我如何在 FreeBSD 9.1 系统中使用 libdb-4.2?

c - 当另一个进程正在旋转以获取锁时中断处理器

c - C语言中的结构,指针和树

c - 显示十个字符后暂停程序

c - 如何计算包含多个 ^= 运算符的表达式?

支持 HC-128/256 的 C 加密库?