在示例中:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
我不太明白.putchar()会把角色放出来,但为什么在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)
但它没有输出什么为什么?
#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编程语言书中运行以下程序:
#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系统上运行.
所以我想要打印版权符号,而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 编程语言》第二版(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 …
我一直认为多次调用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) 我一直试图getch在另一个程序中工作,但没有成功。所以我制作了最基本的程序,我可以使用getch我希望它在主程序中工作的方式。
我研究的需要noecho,cbreak,initscr和nodelay,我一直在使用也试过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) 我提到了两个可靠的信息来源,两者似乎对同一事物有不同的定义:
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()是一个宏.哪个是对的?
为什么 putchar 输出 '1'putchar(1+'0')而不是 '10',但是当仅传递字符参数时,例如putchar('0'),它会输出它。
对于putchar(1+'0'),我预计输出为 10。