#include<stdio.h>
main()
{
char c;
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是,每当我们使用getchar()时,它都会在内存中的某个位置创建一个缓冲区,当我们按Enter键时,getchar()开始从缓冲区读取内容,而getchar()一次只能读取一个字符。因此,在上面的程序中,当执行第一个getchar()时,它将在内存中创建一个缓冲区,并且整行内容将存储在缓冲区中,假设当我按下Enter键时我写了“ vik” getchar()开始从缓冲区中读取内容,然后是“ v”将分配给变量c,然后只有'v'将从缓冲区清除,因为getchar()一次仅读取单个字符。然后在下一条语句中,putchar(c)在屏幕上打印“ v”。所以现在“ ik”getchar()语句执行它不会再询问用户写东西,因为除非并且直到缓冲区不会完全刷新,否则它不会再询问用户写东西,而是会从缓冲区读取内容。因此,这里的“ ik”仍然留在黄油中,因此在第二个getchar()语句中,从缓冲区读取“ i”,然后再次从缓冲区中刷新“ i”,putchar(c)打印“ i”。现在'k'在第三个getchar()执行时留在缓冲区中,从缓冲区读取'k'并赋值给c然后'k'也从缓冲区中冲洗掉。此时缓冲区已被完全冲洗掉,缓冲区中没有内容当第四个getchar()将会执行向用户写请求的操作,因为缓冲区中没有内容,所以假设我写“ as”并点击回车。 现在我的主要问题是,当我给两个内容“ as”时,还有两个getchar()和putchar(c)可以执行,那么为什么只有'a'会在屏幕上打印,为什么还没有's'?
而且,我的第二个问题是,如果说使用getchar()时在内存中创建一个缓冲区,那么如果使用fflush(stdin)则必须刷新该缓冲区。所以根据上面程序中的这个,当我在第一个putchar(c)之后而不是冲洗缓冲区之后写fflush(stdin)时,它执行并打印与上面程序相同的输出,为什么?
您好我正在教自己C并通过K&R书,我遇到了一些麻烦(我正在运行OS X).这是第1.5.1节"文件复制",它应该将一个字符作为输入,然后输出该字符.这是代码:
#include <stdio.h>
/* -- Copy input to output -- */
int main(void)
{
int c;
c = getchar();
while ( c != EOF ) {
putchar(c);
c = getchar;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我认为我的问题不在于代码本身,而在于编译和运行.首先,在编译时我得到以下错误
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c: In function ‘main’:
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c:12: warning: assignment makes integer from pointer without a cast
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c:16: warning: control reaches end of non-void function
Run Code Online (Sandbox Code Playgroud)
然后当我运行输出文件(在终端中)它有一个小空间,然后当我输入一个字母时,说我输入
一个
然后我点击Return
我得到一个新的一行.如果我然后点击一个新密钥,屏幕就会开始变得疯狂,并在整个地方出现问号.
我不确定我是否有多大意义,但我发现这是一个奇怪的问题.非常感谢你提前
如何在putchar仅帮助下打印整数.我想在不使用外部存储的情况下这样做.
去年在一次采访中提到了这个问题.
while(1)
{
if(i == 6)
break;
temp[i] = getchar();
putchar(temp[i]);
i++;
}
Run Code Online (Sandbox Code Playgroud)
每当我必须以这种方式使用getchar时,它也接受输入作为输入之一,因此我被限制只输入三个字符而不是6.为什么getchar将输入作为输入之一?怎么避免这个?
输入:
1
2
3
Run Code Online (Sandbox Code Playgroud)
此循环中断后因为按下的三个返回被认为是temp [1],temp [3]和temp [5]的三个输入.
我正在尝试从终端写入文件中的内容.文件正在创建,但内容未写入文件.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(int argc, char *argv[])
{
FILE *fp;
fp=fopen(argv[1],"w");
char ch;
while((ch=getchar())!=EOF)
{
putc(ch,fp);
}
fclose(fp);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 putchar() 函数打印数字。下面是我的代码:
int main(void)
{
int x = 0;
for (; x <= 9; x++)
{
putchar(x + '0');
}
}
_putchar('\n');
}
Run Code Online (Sandbox Code Playgroud)
如果在没有“+ '0'”的情况下运行,则 shell 上看不到任何结果。
这和ASCII有关系吗?谁能帮忙解释一下幕后发生了什么?
谢谢
我编写了以下简单的C代码,它编译并运行良好.但它的行为方式我不明白.我输入一个字符,然后将其打印在屏幕上.但是当我按下返回键时,它会打印整行.因此,如果我键入字母a,b和c,abc将在命令行上打印两次.这是为什么这样做的?
#include <stdio.h>
int main(){
int c;
while((c=getchar())!=EOF){
putchar(c);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试生成每个可能的3位数组合,如: 012, 013 ,014...
但是:我想忽略重复的字符(如999或022),我也不想重复使用数字(如果123已经存在,则不显示321)所以,最后一个值应该是789.
我的代码:
int main()
{
int i;
int j;
for(i=1;i<(1<<9);i++)
{
for(j=0;j<9;j++)
{
if ((1<<j)&i) printf("%d\n",j+1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望我的结果如下:
012, 013, 014, 015, 016, 017, 018, 019, 023, ..., 789
Run Code Online (Sandbox Code Playgroud)
另外,我不应该使用任何函数,而是printf/putchar.
我有一个任务,我应该在C中创建一个简单的算术计算器,它接受一个数字,一个运算符和一个第二个数字的输入并执行操作并输出它.听起来很简单吧?
我只限于使用getchar()和putchar()来输入数字.这意味着我必须一次读取整个输入一个字符...而我很困惑我将如何读取一个数字的两个字符(例如91的"9"和"1")作为一个数字.如果从右到左阅读getchar(),这将是一个不同的故事.但不幸的是,它不是......
我会感激任何指针!
考虑以下代码:
int main()
{
static char wer[3][4] = {"bag","let","bud"};
char (*ptr)[4] = wer;
putchar(*(*(ptr+1)+2));
putchar(*(wer[1]+2));
putchar(*(ptr+1)+2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个和第二个putchar()语句指向第一行的第一个元素ie e(考虑0作为基本位置),而在第3个putchar()语句中,它显示垃圾值.
但就声明而言,(*(ptr+1))显然意味着指向第二排.为什么会这样?
这是由于某些putchar()规范,还是我完成了指针概念?
#include <stdio.h>
int main()
{
char c;
while ((c=getchar()) != EOF)
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
为什么当我输入诸如“omar”之类的文本时,将 char print“omar”放回去。它不应该重复打印“o”吗,因为 getchar 只会采用第一个字符。我知道我错了,可能是因为我不知道 getchar 或 putchar 到底是如何工作的,所以有人可以解释一下它们是如何工作的吗?另一个问题为什么 getchar 和 putchar 在没有 while 循环的情况下正常工作,但在 while 循环内行为有所不同。
根据我对 C 中宏的理解,它们是预定义的常量,将在整个程序中使用它们的常量值,所以我们继续定义它们以避免进一步的复杂性并使代码更具可读性,因此人们阅读它会明白什么应该保持不变,什么不是。
我在这里和那里读过(C 编程现代方法,KN King)我们可以将这两个函数定义为宏。
由于我对 C 有点陌生,我无法理解这两个如何定义为宏?