使用getchar时出现分段错误

时间:2018-08-02 12:38:31

标签: c printf getchar

我正在编写以下代码:

#include <stdio.h>
#include <ctype.h>

int main() {
    //      printf("enter some argument \n");
    int count_words = 0;
    int count_char = 0;
    int cnonalpha = 0;
    char s;
    printf("enter string");
    while( ((s = getchar()) != EOF) && (s != '\n') )
    {
        if( (s >= 'a' && s <= 'z') || (s >= 'A' && s <= 'Z') )
        {
            count_char++;
            //putchar(s);
        }
        else {
            putchar(s);
            cnonalpha++;
        }
    }

    fprintf(stderr, "%s: error writing stdout\n", s);
}

这给了我一个分割错误。可能是什么原因?

更新1 根据下面的答案,我已经更改了程序 实际上,我要执行的操作是通过getchar从stdin中获取输入,然后在while循环中逐字符打印在stdout上获取的输入或将其存储在变量中,然后使用isalpha比较字符值 这是我写的另一个程序

#include <stdio.h>
#include <ctype.h>

int main ()
{
  int c;
  int n=0;
  puts ("Enter text. Press Enter to exit sending input");
  while ((c=getchar())!='EOF'){
          if (isalpha(c))
          else{
         putchar (c);
          n++;
          }

  }
  return 0;
}

〜 我想做的是打印可能输入的非字母字符并计算其数量。

1 个答案:

答案 0 :(得分:0)

segmantation错误,因为您将指针传递给了printf,但是变量为char。以偶数表示的char的整数值转换为指针(当然,它指向的位置是不可预测的),并且当printf尝试取消引用时,它将调用Undefined Behavior-可能发生任何事情,segfault,比萨顺序...。