使用getchar在while循环中添加break语句

时间:2017-02-20 02:05:18

标签: c while-loop break getchar

我是首发,我写了一段代码:

#include<stdio.h>
char c;
char a[100]={0};
int i;

int main(void)
{   
  while(1)
  {
    i=0;
    while(1){
      if((c=getchar())!='\n'){
        a[i]=c;
        i++;
      } else {
        break;
      }
    }
    printf("%s\n",a); 
  }
  return 0;
}

现在我知道我想添加一个break语句,当我输入q时,程序将会中断。所以我的新计划是:

#include<stdio.h>
char c;
char a[100]={0};
int i;

int main(void)
{   
  while(1)
  {
    i=0;
    while(1){
      if((c=getchar())!='\n'){
        a[i]=c;
        i++;
      } else {
        break;
      }
    }
    printf("%s\n",a);
    if(getchar()=='q')break;       /*i added this*/
  }
  return 0;
}

我知道因为getchar()冲突代码不正确,我怎么办,添加类型q break命令。非常感谢。

3 个答案:

答案 0 :(得分:1)

不太可能成为你真正想要的东西,但至少这会起作用

#include<stdio.h>

int main(void)
{
  char a[100]={0};
  int i = 0;
  do {
    int c = getchar();
    switch (c) {
       case EOF:
           /*EOF*/
           return -1;
       case '\n':
           a[i] = 0;
           printf("%s\n",a);
           i= 0;
           break;
       default:
           a[i++] =c;
           break;
  } while (c != 'q' || i > 1);
  return 0;
}

答案 1 :(得分:1)

  

我是首发,我已经编写了代码

哦,哦!这就是......首先,对于那些试图通过非制导性试验和错误学习的人来说,成功学习可移植的,符合标准的C编程语言的几率非常低。有一本非常好的书可以作为指南使用,但你需要读它并且在你偶然发现它们时进行练习。那是K&amp; R2E,如果你有兴趣的话。

任何类似于char c; c = getchar();的内容都是错误的,因为从intgetchar返回)到char的缩小转换会丢弃错误处理信息。

getchar返回的任何字符值都会被unsigned char转换为int,因此技术上更正确(尽管仍然不正确)使用该类型。

错误值以负整数(例如EOF)的形式返回,不要与字符值混淆,这正是您的代码错误丢弃错误信息。

getchar返回int,因此请将值存储到int ,然后测试错误,然后,如果您必须将其转换为unsigned char

  

现在我知道我想添加一个break语句,当我输入q时,程序将会中断。

继上一次讨论后,如果您正确处理错误,这样的要求是多余的,但 easy 要合并。只需插入一个额外的测试以匹配错误处理中的q,并且presto!

尽管如此,错误处理很可能已经解决了这个问题,因为大多数操作系统都有关闭stdin 的机制,这会导致getchar返回EOF因此触发错误处理子句。这通常通过在Linux中按CTRL + d或在Windows中按CTRL + z来实现。

总而言之,如果你还没有阅读过一本书,那么关于C的好书似乎并不是所有对你有益的。一本关于你喜欢的类Unix操作系统的控制台脚本的好书也非常有用。

答案 2 :(得分:0)

试试这段代码:

#include <stdio.h>
#include <stdlib.h>

#define q 113  --> These values are coming from ASCII table.
#define Q 81 

int main(void)
{
    char ch = 0;
    do
    {
        ch = getchar();
        switch(ch)
        {
            case q:
                // your logic goes here
                exit(0);
            case Q:
                // your logic goes here
                exit(0);
            /* more cases can come here */
        }
    }
    while(1);
}