scanf to fgets C - PullRequest
       24

scanf to fgets C

2 голосов
/ 12 мая 2011

Скажем, мне нужно читать с двумя именами, например, [name name]\n .... (возможно, больше [name name]\n. Если предположить, что имя может иметь длину 19, мой код пока таков: Как бы я на самом деле запретил ввод, например[name name name]\n или больше [name name name...]\n в моем случае? Я слышал о fgets () и fscanf, но кто-нибудь любезно покажет мне пример, как их использовать? Заранее спасибо.

char name1[20];
char name2[20];
for(int i=0; i < numberOfRow ; i++){
  scanf(" %s %s", name1, name2);
}

Хорошо Итак, я нашелспособ убедиться, что есть только два элемента, но я не уверен, как вернуть их в переменную ...

char str[50];
int i;
int count = 0;
fgets(str, 50, stdin);

i = strlen(str)-1;
for(int x=0; x < i ;x++){
  if(isspace(str[x]))
    count++;
}
if(counter > 1){
  printf("Error: More than 2 elements.\n");
}else if{
//How do i place those two element back into the variable ?
char name1[20];
char name2[20];

}

Ответы [ 3 ]

0 голосов
/ 12 мая 2011

Вы можете использовать fgets, чтобы прочитать всю строку, а затем проанализировать результаты.например:

char name[256];
for (int i = 0; i < numberOfRow; i++)
{
   if (fgets(name, 256, stdin) != NULL)
   {
      // Parse string
   }
}

fgets читает строку, пока не будет нажата Enter.Теперь вам нужно проанализировать эту строку, если пользователь вводит неправильный ввод (как «aaa» или «aaa bbb ccc»), возвращает ошибку, иначе («aaa bbb»), разбивает строку и использует «aaa» в качестве name1 и «bbb»как имя2

0 голосов
/ 12 мая 2011

Вы можете использовать strtok (string.h).Пожалуйста, будьте осторожны, эта функция изменит исходную строку (вы можете скопировать строку раньше).

Пример для strtok:

char* word;

// First word:
word = strtok(str, " "); // space as the delimiter
strncpy(name1, word, sizeof(name1) - 1); 
name1[sizeof(name1) - 1] = 0;  // end of word, in case the word size is > sizeof(name1)    

// Second word
word = strtok (NULL, " ");
strncpy(name2, word, sizeof(name2) - 1);
name2[sizeof(name2) - 1] = 0;

Кроме того, я думаю, что вы должны проверить

0 голосов
/ 12 мая 2011

Если вы идете от стандартного ввода, это невозможно остановить, пользователь может ввести то, что ему нравится. Желательно сначала прочитать все входные данные, а затем проверить, а затем результат.

...