Tag: getchar

C编程 – K&R示例1.5.2 – 修改后的程序无法按预期运行

我的问题很简单“为什么第10行和第11行的代码无法正常运行?” 我的代码的目的是完全按照原始的K&R代码进行操作,但不计算nc(getchar()==’\ n’)你能请教我吗? 略微修改的K&R代码: /** K&R – 1.5.2 Character Counting **/ #include /* count characters in input; 1st version */ main(){ long nc; nc = 0; while (getchar() != EOF){ if (getchar() != ‘\n’){ ++nc; } } printf(“%ld\n”, nc); } 我使用64位Windows 7,CodeBlocks10.05,GNU GCC编译器。 我目前的进步和理解: 在示例运行中,我键入单词two并按Enter键,等于4个输入,然后按ctrl + Z键输入^Z或EOF字符。 程序然后打印1 。 我期待它打印3 。 我想唯一合乎逻辑的解释是它完全与我的意图相反( 它只计算换行符?)。 事实certificate,如果我输入单词two并按Enter键,则说4次,它打印4 。 […]

输入缓冲区刷新

考虑以下代码: #include int main(){ char c; while( ( c=getchar() ) != EOF ) printf(“%c\n”,c); return 0; } 我给出了输入:hi ^ Z. 输出是: h i (an arrow pointing towards left) [抱歉,我找不到上面箭头的字符。 ] 有人可以解释输出吗? 由于^ Z是字符串的一部分,并且有要冲洗的字符,我认为^ Z不应该被传递,因此输出应该是, h i (new line ) PS – 我在Windows和^ Z因此是EOF。

C中的getchar()完成而不按Enter键

从我之前的post中 ,我发现getchar()只有在按Enter键时才会完成。 我们考虑一下这段代码: #include main() { getchar(); getchar(); getchar(); getchar(); getchar(); } 我预计它会像这样运行:我按下某个键1然后按Enter键,然后按键2键,然后按键3键,然后按键4键,然后按键4键,输入键,最后按键5键,输入,程序应立即终止。 这不是实际发生的事情。 会发生什么:我按下某个键1然后按Enter键,然后键2输入,然后按键3和回车,程序最终终止! 为什么最后两个getchar()不起作用? 我观察到的另一个奇怪的事情是,如果我这样做:key1,key2,key3,key4 + Enter然后程序终止。 例如,如果我连续按q,w,e和r然后按Enter键,程序将终止。 为什么不是所有的getchar()都要求输入? 这是否意味着getchar()将任何其他键作为Enter? 但是下一个键是否被作为下一个getchar()的输入? 让我们考虑另一个代码: #include main() { int c=getchar(); int d=getchar(); int e=getchar(); printf(“2 getchar are remaining\n”); int f=getchar(); int g=getchar(); printf(” c is %d, d is %d, e is %d, f is %d and […]

无需按下即可获得单个字符

我试图从用户那里获得单个字符输入而无需用户输入。 我试过这个: #include int main() { int input; for (;;) { input = getchar(); printf(“%d\n”, input); } } 但是,用户不仅需要按Enter键,还会注册两个按键(输入字符和换行符),即: $ ./tests a 97 10 c 99 10 由于我总是希望用户输入一个字符,并希望将此字符设置为char或int ,如何在不等待\n情况下获取字符。 我也试过使用fgets ,但因为我在循环中等待用户输入,所以只是连续执行printf而不会阻塞直到输入。 我的预期输出是: a97 b98 … 注意:我目前正在使用OSX,但我很满意适用于OSX或Linux的解决方案。

getchar()并调整一个循环来打破特定的char

我正在研究臭名昭着的书“Prentice Hall软件系列”并试用他们编写的代码并对其进行修改以了解有关C的更多信息。 我正在控制台上使用Fedora 25上的VIM。 以下代码是本书的引用,我知道“int”缺失以及argc和argv等。 Kernighan和Ritchie – C编程语言:第20页 #include /* copy input to output; 1st version */ main(){ int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } } 使用此代码,我无法让“EOF”工作。 我不确定“ctr + z”是否真的是真的要做,因为它退出了控制台中的任何控制台程序。 好吧,因为我不确定我改变了条件 … while (c != ‘a’) { … 所以通常如果我输入’a’,while条件应该中断并且programm应该终止。 好吧,当我尝试运行它并输入’a’时它不会。 这里有什么问题? 感谢你们!

读取将stdout从unbuffered更改为以规范模式缓冲的行

当我在规范模式下使用这段代码时: #include #include #include static struct termios newt; static struct termios oldt; static void kb_fini(void) { tcsetattr(STDIN_FILENO, TCSANOW, &oldt); } void kb_init(void) { tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= (tcflag_t)~(ICANON | ECHO | ISIG); newt.c_cc[VMIN] = 1; newt.c_cc[VTIME] = 0; tcsetattr(STDIN_FILENO, TCSANOW, &newt); atexit(kb_fini); } int main(void) { int c; kb_init(); printf(“Press q “); […]

getchar()和scanf中的输入缓冲区

很抱歉,因为我无法想到任何更好的标题我有一个问题处理输入这是我的测试代码,它将输入到字符串数组然后再次在屏幕上打印,非常简单 第一个测试代码正常工作 #include int main() { int i, index; char d, c[20]; scanf(“%d”, index); for(i=0; i<index; i++){ *(c+i) = getchar(); if (*(c+i)=='$') break; } printf("the string is %s", c); return 0; } 第二个测试代码,我确实使用了指针而不是c [i]而且程序没有运行。 这很奇怪,因为*(c + i)和c [i]是等价的 我变了 *(c+i) = getchar(); // (0) if (*(c+i)==’$’) 至 c[i] = getchar(); // (1) if (c[i]==’$’) 要么 […]

getchar在交换机情况下不工作(c)

使用一个非常简单的计算器程序,提示用户执行操作,然后提示两个整数来执行此操作。 程序应该在这些操作之后循环,除非用户输入字符’q’,此时程序应该退出。 #include int main (void) { char c; int number[2], num1, num2, result; double num1d, num2d, resultd; int done=1; while(done) { printf(“\t What sort of operation would you like to perform? \n \t Type + – * / accordingly. \n”); c = getchar(); printf(“\tplease enter a number \n”); scanf(“%d”,&number[0]); printf(“\tplease enter another number \n”); […]

getchar()并逐行阅读

对于我的一个练习,我们需要逐行阅读并使用ONLY getchar和printf输出。 我正在关注K&R,其中一个例子显示使用getchar和putchar。 从我读到的,getchar()一次读取一个char,直到EOF。 我想要做的是一次读取一个字符,直到行结束,但存储写入char变量的任何内容。 因此,如果输入Hello,World!,它也会将它全部存储在变量中。 我试过使用strstr和strcat但没有成功。 while ((c = getchar()) != EOF) { printf (“%c”, c); } return 0;

C编程语言,第1章练习1.10(Getchar和Putchar)

我已经在这个工作了2个小时而且我被卡住了……我在网上找到了答案,但这并不能帮助我学习我显然缺少的概念。 提示:编写程序将其输入复制到其输出,用\t替换每个选项卡,用\b替换每个退格,用\\替换每个反斜杠。 这使得标签和退格以明确的方式可见。 这是我提出的,它没有替换tab或\用指示的putchar ,它只是将它添加到它前面。(我没有做退格,因为我无法真正输入退格…) : 这就是我阅读代码的方式。 我错过了什么?: “有一些整数c等于输入。当输入不等于文件结束时继续。如果输入是tab然后输出\t 。如果输入是\则输出\\ 。输入输入到控制台“。 int c; while((c=getchar())!=EOF) { if(c==’\t’) { putchar(‘\\’); putchar(‘t’); } if(c==’\\’) { putchar(‘\\’); putchar(‘\\’); } putchar(c); }