标签: putchar

getchar()和putchar()

在示例中:

#include <stdio.h>

main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

我不太明白.putchar()会把角色放出来,但为什么在EOF之后它会把所有的角色都放出来,它在哪里记住所有这些角色?谢谢.

c programming-languages putchar getchar

6
推荐指数
1
解决办法
4134
查看次数

打印EOF的值

在Kernighan和Ritchie(C编程语言)中:

'写一个程序来打印EOF的价值'

我写:

#include <stdio.h>

main(){

    int c;
    c = getchar();
    if ((c = getchar()) ==  EOF)
        putchar(c);
}
Run Code Online (Sandbox Code Playgroud)

但它没有输出什么为什么?

c putchar

6
推荐指数
3
解决办法
2万
查看次数

什么是标准输入缓冲区?

#include <stdio.h>

int main(void)
{
    int c;
    c = getchar();
    putchar(c);
    c = getchar();
    putchar(c);
    c = getchar();
    putchar(c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想了解为什么被调用三次的函数与仅输入一次的行一起工作。有人解释说,在这种情况下我们使用标准输入缓冲区,那是一块内存。我想读一些相关内容。你能给我一些资源吗?

c stdin putchar getchar

5
推荐指数
1
解决办法
5515
查看次数

getchar()!= EOF

我正在从C编程语言书中运行以下程序:

#include <stdio.h>
main()
{
  int c;
  while((c=getchar()) != EOF)
    putchar(); 
}
Run Code Online (Sandbox Code Playgroud)

要么

#include<stdio.h>
int main(){
   int c = getchar();
   while(c != EOF){
      putchar(c);
      c = getchar();
   }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,我得到一个无法解释的行为.如果从在下面的序列中的命令行I输入字符:{'h', 'e', 'l', 'l', 'o', '\n', '^D'}然后我得到打印到屏幕以下响应:hello,之后\n被输入,并且该程序退出一旦^D在输入.

但是,当我按如下方式更改序列时:{'h', 'e', 'l', 'l', 'o', '^D'}然后我将以下响应打印到屏幕:hello,但程序不会退出.我进入后不应该退出^D吗?我必须^D第二次进入该计划才能退出.或者程序仅在我输入^D以下内容后退出\n.我不明白为什么不管我何时进入该计划都不会退出^D.有什么想法吗?

我在UNIX系统上运行.

c putchar getchar

5
推荐指数
1
解决办法
715
查看次数

为什么putchar()没有putchar()输出版权符号?

所以我想要打印版权符号,而putchar()只是截断字符中最重要的字节,从而产生一个不可打印的字符.

我使用的是Ubuntu MATE,我使用的编码是en_US.UTF-8.现在我所知道的是©的十六进制值是0xc2a9,当我尝试putchar('©' - 0x70)时,它给了我9,它的十六进制值为0x39,加上0x70,你将得到0xa9,这是最少的0xc2a9的有效字节

#include <stdio.h>

main()
{
    printf("©\n");
    putchar('©');
    putchar('\n');

}
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

©
©
Run Code Online (Sandbox Code Playgroud)

而不是:

©
?
Run Code Online (Sandbox Code Playgroud)

c linux putchar

5
推荐指数
2
解决办法
83
查看次数

C、K&amp;R 练习 1-6,卡住,困惑

我是一名菜鸟,自学使用《C 编程语言》第二版K&R编写)进行 C 语言编程。在第 1 章第1.5.1 节文件复制中,作者非常简要地介绍了在值之间进行比较时的操作优先级,强调了使用括号的重要性,在本例中,以确保在比较之前对变量“c”进行赋值被评估。他们断言:

    c = getchar() != EOF
Run Code Online (Sandbox Code Playgroud)

相当于

    c = (getchar() != EOF)
Run Code Online (Sandbox Code Playgroud)

其中“设置为 0 或 1 会产生不良影响c,具体取决于 getchar 的调用是否遇到文件结尾”

然后作者提出练习 1-6 - 验证表达式getchar () != EOF是 0 或 1

根据作者之前的断言,这看起来几乎微不足道,所以我创建了以下代码:

#include <stdio.h>

main()
{
    int c;

    while (c = (getchar() != EOF))
        putchar(c);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我运行该程序时,如果遇到 EOF,它只会输出我在命令窗口中键入的任何字符,而不是预期的 1 或 0 字符串。

虽然我是一个菜鸟,但我认为我明白了作者试图教授的逻辑,但我无法演示这个简单的任务。在这种情况下,变量不应该c采用比较表达式求值的值,而不是恰好getchar()获取的任何字符,特别是因为括号的位置?如果c确实采用比较的值,则putchar()应该只输出 0 或 1,但按照公式,它会输出我在命令窗口中键入的内容。我究竟做错了什么?我不明白什么?难道是我的编译器的问题?我正在 x64 …

c putchar getchar

4
推荐指数
1
解决办法
1077
查看次数

putc和putchar的表现?

我一直认为多次调用putc比puts或printf更快.要打印"hello",例如,在一个真实的程序中,我总是使用puts或printf,但现在我正在编写一个生成C代码的程序,所以我想知道是否生成代码putchar('h'); putchar('e') ...因为我首先认为它应该更多快点.但我进行了一项测试,结果非常有趣.编译器是GCC.

#include <stdio.h>
#include <time.h>

int main() {
    time_t timer;
    FILE *f;
    int i;

    f = fopen("out.txt", "w");

    #define START_TIMER(TIMER) TIMER = clock()
    #define ELAPSED_TIME(TIMER)\
    (double)(clock() - TIMER) / (double)CLOCKS_PER_SEC

    enum { NUM_ITERS = 9999999 };
    START_TIMER(timer);
    for (i = 0; i < NUM_ITERS; i++) {
        putc('h', f);
        putc('e', f);
        putc('l', f);
        putc('l', f);
        putc('o', f);
        putc('\n', f);
    }
    printf("%.3f\n", ELAPSED_TIME(timer));
    START_TIMER(timer);
    for (i = 0; i < NUM_ITERS; i++) {
        fputs("hello", f);
    }
    printf("%.3f\n", ELAPSED_TIME(timer)); …
Run Code Online (Sandbox Code Playgroud)

c printf putchar

3
推荐指数
1
解决办法
1195
查看次数

getch 和 putchar 没有返回就不能工作

我一直试图getch在另一个程序中工作,但没有成功。所以我制作了最基本的程序,我可以使用getch我希望它在主程序中工作的方式。

我研究的需要noechocbreakinitscrnodelay,我一直在使用也试过newscr(),但没有成功。

我遇到的问题是字符没有被打印到屏幕上,直到我点击“输入”,当它们put每个循环都应该出现在屏幕上时。为什么会这样?此外,光标不会在新行返回到屏幕左侧。例如。

abc  
   def
      ghi
Run Code Online (Sandbox Code Playgroud)

我一直在寻找答案,但又被难住了......

#include <stdio.h>
#include <ncurses.h>

int main()
  {
     initscr();cbreak(); noecho();nodelay(stdscr,0);
    char c ;
    while((c=getch())!=EOF){
    putchar(c);}

    return 0;
  }
Run Code Online (Sandbox Code Playgroud)

c ncurses getch putchar

2
推荐指数
1
解决办法
4267
查看次数

是getchar()和putchar()函数还是宏?

我提到了两个可靠的信息来源,两者似乎对同一事物有不同的定义:

http://www.cplusplus.com/reference/clibr%E2%80%A6

http://www.ocf.berkeley.edu/~pad/tigcc/doc/html/stdio_fputchar.html

第一个来源说的putchar()是一个函数,getchar()但是在第二个链接中它表示putchar()是一个宏.我的书说getchar()是一个宏.哪个是对的?

c macros putchar getchar

2
推荐指数
1
解决办法
1342
查看次数

为什么 putchar(1+'0') 不输出 10?

为什么 putchar 输出 '1'putchar(1+'0')而不是 '10',但是当仅传递字符参数时,例如putchar('0'),它会输出它。

对于putchar(1+'0'),我预计输出为 10。

c putchar

2
推荐指数
1
解决办法
228
查看次数

标签 统计

c ×10

putchar ×10

getchar ×5

getch ×1

linux ×1

macros ×1

ncurses ×1

printf ×1

programming-languages ×1

stdin ×1