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

标签 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() 冲突代码不正确,我该怎么做,添加 type q break 命令。非常感谢。

最佳答案

i am a starter and i have written a code

呃哦!开始了……首先,对于任何试图通过无指导的反复试验来学习的人来说,成功学习可移植的、符合标准的 C 编程语言的几率极低。有一本非常好的书可以用作指南,但您需要阅读在偶然发现它们时做练习。如果您有兴趣,那就是 K&R2E。


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

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

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

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


and now i have idea that i want to add a break statement that when i type q, the program will break.

根据前面的讨论,这样的要求是多余的,但是很容易合并如果您正确处理错误。只需插入一个额外的测试来匹配 q 到错误处理中,然后就可以了!

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


总而言之,如果您还没有读过一本关于 C 语言的好书似乎并不能使您受益;一本关于为您最喜欢的类 Unix 操作系统编写控制台脚本的好书也会非常有益。

关于c - 使用 getchar 在 while 循环中添加 break 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42335374/

相关文章:

javascript - HTML5 canvas ctx.fillText 不会换行?

c - 通过赋值运算符复制数组和直接向已定义的数组赋值之间是否存在链接?

c - strncpy 段错误,但可以手动分配字符串

T-SQL 2012,While 循环最大迭代次数?

linux - 为文件的每一行运行脚本

for-loop - Rust 中 for 循环的命名中断

html - 换行忽略边距

c - 如何将游戏数据压缩到一个文件中

c - 指向二维数组的指针

php - 遍历数据库