c - 我想从 stdin 读取文件并将每一行读入字符串并且仅使用 getchar

标签 c

#include <stdio.h>
#include <string.h>

int mygetchar();

int main(){
    mygetchar();
}

int mygetchar(){
    int c, i = 0;
    char line[1000];
    while ((c = getchar()) != EOF && c != '\n'){
        line[i] = c;
        i++;
    }
    line[i] = '\0';
    printf("%s\n", line);
    printf("%lu\n", strlen(line));
    return 0;
}

请看我的代码图片,我的代码只能输出一个字符串和一个文件的一行,但我想将文件的每一行存储为一个字符串并计算它们的长度,我不能使用 fgets ,我只能使用getchar函数,请帮忙,非常感谢。

最佳答案

由于您的代码基本上处理字符,直到到达行尾或文件末尾,因此您可以简单地在其周围放置另一个循环来处理每一行。

那会是这样的:

int c = '\n'; // force entry into loop
while (c != EOF) {
    int i = 0;
    char line[1000];
    while ((c = getchar()) != EOF && c != '\n') {
        line[i] = c; // should really check for buffer overflow here.
        i++;
    }
    line[i] = '\0'; // and here.
    printf ("%s\n", line);
    printf ("%lu\n", strlen (line));
}

或者,您可以一一处理所有字符,对行尾进行特殊处理(同样,您应该避免缓冲区溢出,并且您应该将公共(public)代码移至函数中):

int c, i = 0;
char line[1000];
while ((c = getchar()) != EOF) {
    // Newline is special, print and reset.

    if (c == '\n') {
        line[i] = '\0';
        printf ("%s\n", line);
        printf ("%lu\n", strlen (line));
        i = 0;
    } else {
        line[i] = c;
        i++;
    }
}
// If data at end without newline.

if (i != 0) {
    line[i] = '\0';
    printf ("%s\n", line);
    printf ("%lu\n", strlen (line));
}

关于c - 我想从 stdin 读取文件并将每一行读入字符串并且仅使用 getchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46188235/

相关文章:

c++ - 为什么这个 o/P...服务器上传失败

c - 代码 0x017 在未处理的页面错误中表示什么

c - Makefile - 错误的编译顺序

c - 如何通过 C 获得 Linux 的当前本地化版本?

c++ - 导出制造商、符号可见性……?

c - 在 while(1) 循环中等待用户输入

c - C 中的二维数组和双指针

c - 迷你拼图 IP header

使用信号量时可以从c中的线程返回一个值吗

c - C 语言的生命游戏问题