gpt4 book ai didi

c - 从c中的stdin输入多行字符串

转载 作者:行者123 更新时间:2023-11-30 15:02:36 24 4
gpt4 key购买 nike

我尝试在我的 C 程序多行输入表单 stdin 中使用此代码换行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>

#define DEFAULT_INPUT_LENGTH 20

char * readMessage(FILE* file);
void writeChar(char* string, char c);


int main()
{
printf("Message:\n");
char * msg = readMessage(stdin);

printf("Input: %s\n", msg);


free(msg);


return 0;
};

char * readMessage(FILE* file)
{
char *input = malloc(DEFAULT_INPUT_LENGTH);

int inputCounter = 0;
int n = 1;
char c;

while(!feof(stdin))
{
c=fgetc(file);

inputCounter++;

if (inputCounter == DEFAULT_INPUT_LENGTH * n)
{
n++;
int chars = DEFAULT_INPUT_LENGTH * n;

input = realloc(input, chars);
}

writeChar(input, c);
}

return input;
}




void writeChar(char* in, char c)
{
int i;

for(i = 0; ; i++)
{
if (in[i] == '\0')
{
in[i] = c;
break;
}
}

}

但是当我在 Linux 上尝试 CTRL+D 或在 Windows 上尝试 CTRL+Z 时,输入并未结束。

输入示例如下:

asfer
dfdfd
sffdfl

在此示例中,如果我在最后一个 l 字符后尝试 CTRl+D,则输入未结束,我必须使用 Enter 和 CTRL+D

最后一行提示中的换行符 CTRL+Z 和 ENTER 以及 enter image description here

最佳答案

试试这个

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

#define DEFAULT_INPUT_LENGTH 20

char * readMessage(FILE* file);
void writeChar(char* string, char c);

int main(void){
printf("Message:\n");
char * msg = readMessage(stdin);

printf("Input: %s\n", msg);

free(msg);

return 0;
}

char * readMessage(FILE* file){
char *input = malloc(DEFAULT_INPUT_LENGTH);

int inputCounter = 0;
int n = 1;
int c;//!

*input = 0;//!

while((c=fgetc(file)) != EOF){//!
inputCounter++;

if (inputCounter == DEFAULT_INPUT_LENGTH * n){
n++;
int chars = DEFAULT_INPUT_LENGTH * n;

input = realloc(input, chars);
}

writeChar(input, c);
}

return input;
}

void writeChar(char* in, char c){
int i;

for(i = 0; ; i++){
if (in[i] == '\0'){
in[i] = c;
in[i+1] = 0;//!
break;
}
}

}

关于c - 从c中的stdin输入多行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40981204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com