尝试了解c中的循环和getchar()

汤姆

我是C语言的新手,我试图了解for循环的工作原理。

我的代码看起来像这样

#include <stdio.h>
int main ()
{
   int a;
   for( a = 0; a < 4; a++ )
   {
      printf("value of a: %d\n", a);
   }

   return(0);
}

我得到的期望输出是a的4倍,但是当我这样做时

#include <stdio.h>
int main ()
{
   char c;
   int a;
   for( a = 0; a < 4; a++ )
   {
      printf("value of a: %d\n", a);
      printf("Enter character: ");
      c = getchar();
      printf("Character entered: ");
      putchar(c);
      printf("\n");
   }
   return(0);
}

我懂了

a的值:0输入字符:m输入的字符:m a的值:1输入字符:输入的字符:

a的值:2输入字符:a输入的字符:a的值:3输入字符:输入的字符:

它以某种方式跳过了两个getChar(),为什么?

解决方案感谢您的评论,它可以正常工作:

int i;       
for( a = 0; a < 4; a++ )
{
    printf("Enter character: ");
    c = getchar();
    while ((i = getchar()) != '\n' && i != EOF)
    printf("Character entered: ");
    putchar(c);      
}
伦布洛

正如注释中指出的那样,该ENTER键的结果是换行符(\n),并getchar在每个字母之后读取并返回它。您还应该注意错误或文件结束条件。

这是一个更强大的版本:

#include <stdio.h>
int main ()
{
   char c;
   int a;
   for(a=0; a<4; a++)
   {
      printf("value of a: %d\n", a);
      printf("Enter character: ");
      do {
          c = getchar();
      } while(c == '\n'); // ignore newlines
      if(c == EOF) break; // end of input or error
      printf("Character entered: %c\n",c);
   }
   return(0);
}

这具有(或不具有)额外的好处,即重复的ENTER键将被忽略。另外,如果您在ENTER之前键入两个字符,则它们的读取方式将与分别键入时的读取方式相同。再次说明,这可能好坏,这取决于您要发生的事情。但是,您应该问自己自己想做什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用生成器发送方法。仍在尝试了解发送方法和古怪的行为

来自分类Dev

Java继承问题-尝试了解概念

来自分类Dev

仍在尝试了解mysql到json数据

来自分类Dev

尝试了解不同的CRC实现

来自分类Dev

尝试了解iOS 8中的UIScrollView自动布局

来自分类Dev

尝试了解由字符串对象维护的指针

来自分类Dev

尝试了解Java枚举中函数的用法

来自分类Dev

尝试了解c中的循环和getchar()

来自分类Dev

尝试了解EF6的存储库模式

来自分类Dev

尝试了解android支持库23.2.1中BottomSheet的行为

来自分类Dev

尝试了解输入验证循环

来自分类Dev

尝试了解Kafka Scala语法

来自分类Dev

了解循环C ++中的循环

来自分类Dev

为什么这部分用在颤动中。实际上,我尝试了解这部分的基本工作材料

来自分类Dev

首先尝试了解Java泛型

来自分类Dev

我正在尝试了解算法的作用

来自分类Dev

了解C语言中的getchar()和putchar()

来自分类Dev

尝试了解iOS 8中的UIScrollView自动布局

来自分类Dev

尝试了解由字符串对象维护的指针

来自分类Dev

尝试了解Shell脚本

来自分类Dev

putchar()和getchar()循环说明

来自分类Dev

尝试了解EF6的存储库模式

来自分类Dev

在Azure中托管Web应用程序时尝试了解适合我的数据库选项

来自分类Dev

laravel 5.3中的Route Not found异常也尝试了资源路由和手动路由

来自分类Dev

我正在尝试了解以下javascript代码

来自分类Dev

尝试了解 Azure 云服务中的负载平衡

来自分类Dev

尝试了解 IoC(使用 Autofac)中的生命周期范围是什么意思?

来自分类Dev

Optaplanner:尝试了解护士排班示例中不需要的模式规则

来自分类Dev

我正在尝试了解这些分区

Related 相关文章

热门标签

归档