我正在尝试自己学习C,我有点困惑getchar和putchar:
#include <stdio.h>
int main(void)
{
char c;
printf("Enter characters : ");
while((c = getchar()) != EOF){
putchar(c);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main(void)
{
int c;
printf("Enter characters : ");
while((c = getchar()) != EOF){
putchar(c);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C库函数int putchar(int c)将参数char指定的字符(unsigned char)写入stdout.
C库函数int getchar(void)从stdin获取一个字符(一个unsigned char).这相当于以stdin作为参数的getc.
这是否意味着putchar()同时接受int和char或其中一方以及getchar()我们应该使用一个int或char?
好的,所以我正在读这本书:C编程语言 - 由Kernighan和Ritchie(第二版)和其中一个例子我很难理解事情是如何工作的.
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
int main(int argc, char *argv[])
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while((len = getline(line, MAXLINE)) > 1)
{
if(len > max)
{
max = len;
copy(longest, line);
}
}
if(max > 0)
printf("%s", longest);
getchar();
getchar();
return 0;
}
int getline(char s[], int lim)
{
int c, i;
for(i = 0; i < lim - 1 …Run Code Online (Sandbox Code Playgroud) 当编译以下代码时,它进入无限循环:
int main()
{
unsigned char ch;
FILE *fp;
fp = fopen("abc","r");
if(fp==NULL)
{
printf("Unable to Open");
exit(1);
}
while((ch = fgetc(fp))!=EOF)
printf("%c",ch);
fclose(fp);
printf("\n",ch);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc编译器也会在编译时发出警告
abc.c:13:warning: comparison is always true due to limited range of data type
Run Code Online (Sandbox Code Playgroud)
当代码unsigned char被替换为char或int按预期时,代码运行正常,即它终止.
但代码也运行unsigned int良好.因为我有我读的EOF就是定义为-1在stdio.h那为什么此代码为无符号的字符失败,但运行良好的unsigned int类型.
我无法弄清楚为什么我的while循环不起作用.代码在没有它的情况下正常工作......代码的目的是在bin文件中查找秘密消息.所以我得到了代码来查找字母,但现在当我尝试将其循环到文件末尾时,它不起作用.我是新来的.我究竟做错了什么?
main(){
FILE* message;
int i, start;
long int size;
char keep[1];
message = fopen("c:\\myFiles\\Message.dat", "rb");
if(message == NULL){
printf("There was a problem reading the file. \n");
exit(-1);
}
//the first 4 bytes contain an int that tells how many subsequent bytes you can throw away
fread(&start, sizeof(int), 1, message);
printf("%i \n", start); //#of first 4 bytes was 280
fseek(message, start, SEEK_CUR); //skip 280 bytes
keep[0] = fgetc(message); //get next character, keep it
printf("%c", keep[0]); //print character
while( (keep[0] = …Run Code Online (Sandbox Code Playgroud) 码:
#include <stdio.h>
int main()
{
long cn=1;
char ch;
while((ch=getchar())!=EOF)
{
printf("%ld\t%c\n",cn++,ch);
}
}
Run Code Online (Sandbox Code Playgroud)
当我输入单词"secret"并点击输入时,显示数量最多为7而不是6,为什么?
我正在学习C,并且一直在尝试创建一个接受用户输入的程序,并删除其中的任何双重空格,然后再将其打印出来.我们还没有完成数组,所以我需要通过char来做这个char.这是我的代码:
#include <stdio.h>
main()
{
char c;
int count;
count = 0;
while ((c = getchar()) != '\n')
if (c == ' ')
count++;
if (c != ' ')
count = 0;
if (count <= 0)
printf("%s", c);
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码不起作用.编译器返回错误
:15: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
Run Code Online (Sandbox Code Playgroud)
有帮助吗?我不知道我做错了什么.
这是代码:
#include <stdio.h>
int main()
{
char c;
while((c = getchar()) != EOF)
{
putchar(c);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但有些人说我应该换char c到int c.
谁能告诉我原因?
正如书中所写——
问题在于区分输入的结尾和有效数据。解决方案是,当没有更多输入时,getchar 返回一个独特的值,该值不能与任何实际字符混淆。该值称为 EOF,即“文件结束”。我们必须将 c 声明为一个足够大的类型,以容纳 getchar 返回的任何值。我们不能使用 char,因为除了任何可能的 char 之外,c 还必须足够大才能容纳 EOF。因此我们使用 int。
main()
{
int c;
c = getchar();
while(c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
我无法理解使用 int 而不是 char 的实际原因。EOF 将返回无法存储在 char 中的内容。