在 C 中使用 getchar() 将输入发送到 char 数组
using getchar() in C to send input to a char array
edit 我将 for 循环更改为一个名为 input 的函数,并在所述函数中初始化 c
的值。还更改了循环内的分支条件,以便在必要时将 '[=14=]'
插入到第五个元素。我原来 string1
溢出到 string2
的问题仍然存在。我已经摆脱了 fflush( stdin )
因为我不确定 Mac OSX El Capitan 是否支持它。
我有一个程序应该连接两个字符串,但我想确保用户不会填满数组的大小
现在,如果第一个字符串太长,它会将字符写入下一个字符串,这是不可取的 - 我的意图是数组 space 之外的任何额外字符都将被忽略.
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] = '[=10=]';
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] = '[=10=]';
// 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 = '[=10=]';
while (( c = getchar()) != '\n' && c != EOF) { }
}
int main(){
const int SIZE = 5;
printf( "Enter two strings: " );
char string1[ SIZE ] = { '[=10=]' }; // create a char array
input( string1, SIZE );
printf("String1: %s\n", string1);
char string2[ SIZE ] = { '[=10=]' }; // create another char array
input( string2, SIZE );
printf("String2: %s\n", string2);
return 0;
}
edit 我将 for 循环更改为一个名为 input 的函数,并在所述函数中初始化 c
的值。还更改了循环内的分支条件,以便在必要时将 '[=14=]'
插入到第五个元素。我原来 string1
溢出到 string2
的问题仍然存在。我已经摆脱了 fflush( stdin )
因为我不确定 Mac OSX El Capitan 是否支持它。
我有一个程序应该连接两个字符串,但我想确保用户不会填满数组的大小
现在,如果第一个字符串太长,它会将字符写入下一个字符串,这是不可取的 - 我的意图是数组 space 之外的任何额外字符都将被忽略.
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] = '[=10=]';
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] = '[=10=]';
// 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 = '[=10=]';
while (( c = getchar()) != '\n' && c != EOF) { }
}
int main(){
const int SIZE = 5;
printf( "Enter two strings: " );
char string1[ SIZE ] = { '[=10=]' }; // create a char array
input( string1, SIZE );
printf("String1: %s\n", string1);
char string2[ SIZE ] = { '[=10=]' }; // create another char array
input( string2, SIZE );
printf("String2: %s\n", string2);
return 0;
}