读取整个输入而不是单行

Reading whole input instead of single line

我编写了从小写字母变为大写字母的程序。问题是,我不知道如何让它读取整个文本而不是一行。按回车后程序 returns 输出,我希望它在 CTRL+Z 后这样做。

#include <stdlib.h>
#include <stdio.h>


void makeUpper(char *s) {
    int i;
    for(i = 0; s[i] != '[=10=]'; i++){
        s[i] = toupper(s[i]);
    }
    printf("%s", s);
}


int main() {
    char string[1000];

    fgets(string, 1000, stdin);

    makeUpper(string);
    return 0;
}

fgets()一遇到换行就停止。因此,您无法解决它以读取多行。所以,你必须考虑替代方案。

一种方法是使用 getchar() 是一个循环,只要缓冲区中有空间或收到 EOF 就读取。:

int main(void) {

    char string[1000];
    size_t i = 0;

    do {
        int ch = getchar();
        if (ch == EOF) break;
        string[i] = ch;
        i++;
    } while (i < sizeof string - 1);
    string[i] = 0;

    makeUpper(string);
    return 0;
}

记住,ctrl+Z 作用于 Windows(发送 EOF)。在 *nix-like 系统上,您必须使用 Ctrl+D 来发送 EOF。

只要把你的fgets(string, 1000, stdin)放到一段时间loop.here就是解决方案

#include <stdlib.h>
#include <stdio.h>

void makeUpper(char *s) {
    int i;
    for(i = 0; s[i] != '[=10=]'; i++){
        s[i] = toupper(s[i]);
    }
    printf("%s", s);
}


int main() {
    char string[1000];

    while(fgets(string, 1000, stdin)!=NULL)//for getting input untill pressing CTRL+Z.
    {
        makeUpper(string);
    }


    return 0;
}