gpt4 book ai didi

c - 从标准输入读取一个字符数组

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:19 26 4
gpt4 key购买 nike

我试图将一个恒定长度的字符串作为 c 的数组读取 8 次。每次我覆盖之前读取的数组的内容。

代码似乎在第一个循环周期中运行,但正如您在下面看到的那样,我得到了一些奇怪的输出。我错过了什么?

代码:

#include <stdio.h>

#define MAX_READ_CYCLES 8
#define MAX_STRING_LENGTH 4

int main(){

int i, cycles;
char a[MAX_STRING_LENGTH+1];


/***************************************************
* BEGIN Read logic
***************************************************/

for(cycles=0; cycles < MAX_READ_CYCLES; cycles++){

i=0;

printf("\nEnter a string: ");

while(i < MAX_STRING_LENGTH){
a[i] = getc(stdin);
i++;
}

a[i] = '\0'; //string end character

fflush(stdin); //cleaning the buffer

printf("String you entered: %s\n", a);

}

/***************************************************
* END
***************************************************/


return 0;
}

输出:

Enter a string: cccc
String you entered: cccc

Enter a string: cccc
String you entered:
ccc

Enter a string: String you entered:

Enter a string:

最佳答案

fflush(stdin); 导致未定义的行为。将该行替换为:

int ch;
while ( (ch = getchar()) != '\n' && ch != EOF ) {}

您的代码还有另一个逻辑问题。它总是读取 4 个字符,即使这个人先按了 Enter。因此,如果有人键入 hi 并按下 Enter,那么它会一直等待,直到下一次按下 Enter。

您可能希望修改 while 循环,使其在刚刚输入键 '\n' 时也中断。在这种情况下,您不会继续如上所述清理输入。

关于c - 从标准输入读取一个字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34387649/

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