Jaw*_*Mmm 1 c character getchar
刚开始使用K&R并点击:
#include <stdio.h>
/* copy input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
它只显示我输入的内容,即使它是一串文本.
cacti
cacti
stop repeating what i'm saying
stop repeating what i'm saying
Run Code Online (Sandbox Code Playgroud)
就像那样.
我没有得到的是为什么我不能用一串文本实例化变量c并以相同的方式打印它.(为了示例而忽略while循环)与:
main()
{
int c;
c = "cacti";
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
其中输出显然只是'd'
这里c只是一个整数,它为你的情况取一个字符(虽然它的限制大于那个).
对于第一个代码段:
getchar()只返回一个字符并使用while循环从流中取出一个字符并通过putchar()它打印到控制台直到文件结尾.你似乎得到了一行字符串并打印它,但它没有这样做.在第二个代码段:
你可以这样做:
main()
{
char c[] = "cacti";
puts(c);
}
Run Code Online (Sandbox Code Playgroud)
编辑 根据 getchar()定义:
成功时,返回字符读取(提升为int值).返回类型为int以适应特殊值EOF,表示失败.
键入单行并按Enter键,然后在while循环外读取第一个字符.然后检查它是否是EOF(文件结束 - 文件中没有更多数据.您可以通过在Windows中按Ctrl + Z和在Linux中按Ctrl + D来提供EOF).
好像它没有遇到EOF,然后它进入while循环并打印单个字符(by putchar(c)).在下一行之后c=getchar(),在前一行中输入另一个字符并检查while循环条件while(c!=EOF)是否为真,它进入循环并打印一个字符.它一直持续到发现任何要打印的字符为止.
所以它会使puts()混淆,它在标准输出中写入一个字符串.Where putchar()将字符写入标准输出.
将str指向的C字符串写入标准输出(stdout)并附加换行符('\n').