Редактирование Я меняю my для циклов на функцию с именем input и инициализировал значение c
в указанной функции. Также изменилось условие ветвления внутри цикла, чтобы при необходимости вставить '\0'
в пятый элемент. Моя первоначальная проблема string1
, разлитая в string2
, по-прежнему сохраняется. Я избавился от fflush(stdin)
, потому что не уверен, поддерживается ли он Mac OSX El Capitan.с использованием getchar() в C для отправки ввода в массив символов
У меня есть программа, которая предполагает, чтобы соединить две строки, но я хочу, чтобы убедиться, что пользователь не перегружайте размер массива
Прямо сейчас, если первая строка слишком долго, будет писать символы в следующую строку, что нежелательно - я предполагаю, что любые дополнительные символы за пределами пространства массива будут просто проигнорированы.
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()
во втором ждет вызова функции для ввода новых?
Есть две (несвязанные) проблемы: если между пятью символами, которые вы читаете, нет новой строки, у вас будет неисчерпаемая строка. Кроме того, и многое другое связано с вашей проблемой, вызов 'fflush' с потоком только для ввода, например' stdin', является технически неопределенным поведением *. Вы также можете рассмотреть * инициализацию * 'c', прежде чем использовать его в состоянии цикла. –
Что касается того, о чем вы спрашиваете, как насчет того, чтобы просто читать, пока вы не получите * новую строку? –
Обратите внимание, что поддерживаются только некоторые платформы [Использование 'fflush (stdin)'] (http://stackoverflow.com/questions/2979209/using-fflushstdin). –