2014-11-06 6 views
-2

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

#include<stdio.h> 
#include<stdlib.h>  

int main(int argc, char **argv){ 
    char *i; 
    while(1){ 
     scanf("%s", i); 

     /*do my program here*/ 
     myMethod(i); 

    } 

} 

Так что мой вопрос в том, как я могу принять этот беспрецедентный пользовательский ввод? Могу ли я сделать это с помощью циклов или что еще я могу сделать?

ответ

2

Сначала вы должны выделить место для строки, которую вы читаете, обычно это делается с char массив с размером макро. char i[BUFFER_SIZE] Затем вы читаете данные в свой буфер, fgets может быть лучше, чем scanf. Наконец, вы проверяете свой выход, strcmp с "quit".

#include <stdio.h> 
#include <string.h> 

#define BUFFER_SIZE BUFSIZ /* or some other number */ 

int main(int argc, const char **argv) { 
    char i[BUFFER_SIZE]; 
    fgets(i, BUFSIZ, stdin); 
    while (strcmp(i, "quit\n") != 0) { 
     myMethod(i); 
     fgets(i, BUFSIZ, stdin); 
    } 
} 

Строки, полученная с fgets является gurenteed нуля

+0

Удивительно, что это работает только одна проблема, хотя, когда я печатаю quit, она не выходит из программы. – atg963

+2

Потому что 'fgets()' также записывает символ новой строки. –

+1

Фактически только что он не понял, что fgets помещает \ n в конец строки ввода, поэтому просто добавьте \ n в конец строки strcmp, и он отлично работает! – atg963

-1

Вы можете использовать делать во время цикла:

do 
{ 
    // prompts the user 
} 
while (valueGiven != "quit"); 
+0

'! = 'Не может быть использован на массивах (который '' quit "' is) –

+0

yes Я пробовал это с помощью strcmp, и я получаю segfault после scanf. – atg963

+0

Это произойдет, когда вы попытаетесь ввести ввод в память. –

-1
using do-while loop. 

    char *i = null; 
    char ch = 'a';/ 
    do{ 
    scanf("%s", &i); 

    /*do my program here*/ 
    myMethod(i); 
    printf("Do you want to continues.. y/n"); 
    ch = getchar(); 

    }while(ch != 'q'); 
+0

http://www.tutorialspoint.com/cprogramming/c_do_while_loop.htm –

+0

Почему отрицательный голос? –

+0

Для написания ответа, который приведет к немедленной ошибке сегментации, по крайней мере, если он не содержит синтаксическую ошибку? –

1

зсапа() возвращает число элементов успешно считан я использовать его, как показано ниже

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    int a[20]; 
    int i=0; 
    printf("Keep entering numbers and when you are done press some character\n"); 
    while((scanf("%d",&a[i])) == 1) 
    { 
     printf("%d\n",a[i]); 
     i++; 
    } 

    printf("User has ended giving inputs\n"); 
    return 0; 
}