相关疑难解决方法(0)

getchar/fgetc和putchar/fputc中int和char的区别?

我正在尝试自己学习C,我有点困惑getchar和putchar:

1

#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)

2

#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

25
推荐指数
1
解决办法
5595
查看次数

int c = getchar()?

好的,所以我正在读这本书: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)

c getchar

22
推荐指数
3
解决办法
5万
查看次数

比较unsigned char和EOF

当编译以下代码时,它进入无限循环:

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类型.

c comparison eof unsigned-char fgetc

7
推荐指数
2
解决办法
8742
查看次数

而((c = getc(file))!= EOF)循环不会停止执行

我无法弄清楚为什么我的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)

c file input output

3
推荐指数
1
解决办法
1万
查看次数

非常简单的C程序,为什么我得到这样的输出?

码:

#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 getchar

1
推荐指数
1
解决办法
102
查看次数

C char在编译时显示为int

我正在学习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)

有帮助吗?我不知道我做错了什么.

c int printf char compiler-warnings

0
推荐指数
1
解决办法
165
查看次数

如何定义`getchar()`的返回类型?

这是代码:

#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.

谁能告诉我原因?

c

-3
推荐指数
1
解决办法
626
查看次数

为什么需要 int 类型来处理 EOF 和 getchar() 的返回?

正如书中所写——

问题在于区分输入的结尾和有效数据。解决方案是,当没有更多输入时,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 中的内容。

c getchar

-3
推荐指数
1
解决办法
825
查看次数

标签 统计

c ×8

getchar ×3

char ×1

comparison ×1

compiler-warnings ×1

eof ×1

fgetc ×1

file ×1

input ×1

int ×1

output ×1

printf ×1

unsigned-char ×1