2013-03-08 2 views
0

Я проводил некоторое время с этой проблемой и решил приехать сюда, чтобы узнать, сможет ли кто-нибудь помочь мне. У меня есть заданный текстовый файл, который я сделал, и я отправляю содержимое текстового файла в свою программу во время его запуска. Например: если я говорюПока цикл с EOF всегда запрашивает ввод

scanf("%d", &integerOne); 

тогда мой текстовый файл должен поместить первую строку (например) число 8 в этот слот Я хочу, чтобы это продолжать делать это, пока не достигнет конца файла , но в этом я столкнулся с бедой.

В отличие от моего примера выше я использую символы:

while((scanf("%s", userstring)) != EOF) 
    { 
      if(userstring[0] == 'c') 
      { 
        scanf("%d", &cinput); 
      } 
      if(userstring[0] == 'a')      
      {   
        scanf("%d", &cone); 
        scanf("%d", &cone); 
      } 
    } 

Просто на какой-то фон, я сделал массив «UserString» держать либо «с» (для подключения) или «а» (для дополнения) , Я пытался заставить программу выполнять циклы и другие функции, когда он больше не получал вход «char». Все ваше понимание чрезвычайно полезно. Большое спасибо, Алекс.

+0

Как выглядит ваш вход? –

+0

'scanf ("% d ", &cone); scanf ("% d ", &cone);' Второй вызов scanf здесь перезапишет значение конуса, и первое значение будет потеряно. Это действительно то, что вы хотите? – OregonTrail

ответ

0

scanf возвращает количество входных элементов, которые были успешно совпавших и присвоенных, таким образом, было бы лучше, чтобы проверить, является ли ее возвращаемое значение равно 1. Также обратите внимание, что scanf звонки внутри этого цикла может произойти сбой, поэтому в случае ввода может быть недействительным, вы должны проверить их возвращаемые значения, а также:

while (scanf("%s", userstring) == 1) 
{ 
    if (userstring[0] == 'c') 
    { 
     if (scanf("%d", &cinput) != 1) 
      return -1;     // TODO: scanf failed 
    } 
    ... 
} 

и ответить на ваши фактические проблемы: while всегда предложит пользователю ввести другая строка, becuase единственный способ, как остановить это чтение, чтобы ввести конец входного текста управляющего кода, который Ctrl + Z (на Windows) или Ctrl + D (на Mac, Linux, Unix).

+0

Спасибо Это была моя проблема! – AbsoluteZ3r0

0

Если один из ваших сканируемых файлов находится внутри цикла, обнаруживает ошибку, это может привести к тому, что scanf в защитнике будет неправильно работать (с вашей точки зрения).

Смежные вопросы