gpt4 book ai didi

c - 在 C 中使用 getchar() 将输入发送到 char 数组

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

编辑 我将 for 循环更改为名为 input 的函数,并在该函数中初始化了 c 的值。还更改了循环内的分支条件,以便在必要时将 '\0' 插入到第五个元素。我原来的 string1 溢出到 string2 的问题仍然存在。我已经摆脱了 fflush( stdin ) 因为我不确定 Mac OSX El Capitan 是否支持它。

我有一个程序应该连接两个字符串,但我想确保用户不会填满数组的大小

现在,如果第一个字符串太长,它会将字符写入下一个字符串,这是不可取的 - 我的意图是超出数组空间的任何额外字符都将被忽略。

void input( char *s1, int size ){
for( int i = 0, c = 0; ( i < size ) && ( c != '\n' ); i++ ){
c = getchar();

if( i == size - 1 || c == '\n' )
s1[i] = '\0';
else
s1[i] = c;
}
}

int main(){
const int SIZE = 5;
char string1[ SIZE ]; // create a char array
char string2[ SIZE ]; // and another one

printf( "Enter two strings: " );

input( string1, SIZE );
printf("String1: %s\n", string1);
input( string2, SIZE );
printf("String2: %s\n", string2);
}

示例输出...

Enter two strings: foobarr
String1: foob
String2: rr

如何更改此设置,以便完全忽略 'arr' ,并且

getchar() 

在第二个函数调用中等待新输入?

最佳答案

好吧,这似乎有效,我从以下位置获得了 clear_buffer() 函数 How to clear input buffer in C? .

void input( char *s1, int size ){

for( int i = 0, c = 0; ( i < size ) && ( c != '\n' ); i++ ){
c = getchar();

// if we're out of space or the user is done with this string
if( i == size - 1 || c == '\n' ){

// add null char to the array
s1[i] = '\0';

// if we added null char because we ran out of space
if( i == size - 1 )
clear_buffer();
}
//Otherwise add a char to the array
else
s1[i] = c;
}
}

void clear_buffer(){
char c = '\0';
while (( c = getchar()) != '\n' && c != EOF) { }
}



int main(){
const int SIZE = 5;

printf( "Enter two strings: " );

char string1[ SIZE ] = { '\0' }; // create a char array
input( string1, SIZE );
printf("String1: %s\n", string1);

char string2[ SIZE ] = { '\0' }; // create another char array
input( string2, SIZE );
printf("String2: %s\n", string2);

return 0;
}

关于c - 在 C 中使用 getchar() 将输入发送到 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42191405/

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