2012-05-19 5 views
0

У меня проблема с scanf и двумя строками.C: scanf и строки

char city1[11], city2[11]; 
for(int i = 0; i < (m + k); i++) { 
scanf("%s %s", city1, city2); 
} 

Я должен прочитать (m + k) thimes две строки - имена citites. Проблема в том, что когда я пишу несколько строк, нажмите клавишу ввода ничего не происходит. Указатель находится на экране, но я ничего не могу сделать. Я попытался написать что-то с printf после scanf, но это не сработает. :/

Подробнее Код:

int n, m, k; 
do { 
    scanf("%d %d %d", &n, &m, &k); 
} while(n < 2 || n > 10001 || -1 < m || m > 100001 || -1 < k || k > 100001); 

city* cities = (city*)malloc(n*sizeof(city)); 
path* paths = (path*)malloc((m + k)*sizeof(path)); 
int addCities = 0; 
char city1[11], city2[11]; 
for(int i = 0; i < (m + k); i++) { 
    scanf("%s %s", city1, city2); 
    printf("ok"); 

    if(addCities < n && !isListed(cities, n, city1)) { // if city1 is not into cities 
     // add it 
     strcpy(cities[addCities].name, city1); 
     cities[addCities].prev = NO_PARENT; 
     addCities++; 
    } 
    paths[i].i = getCityNumber(cities, n, city1); // number of city1 

    if(addCities < n && !isListed(cities, n, city2)) { // if city2 is not into cities 
     // add it 
     strcpy(cities[addCities].name, city2); 
     cities[addCities].prev = NO_PARENT; 
     addCities++; 
    } 
    paths[i].j = getCityNumber(cities, n, city1); // number of city2 

    if(i >= m) 
     scanf("%d", &paths[i].price); 
} 
+0

Пожалуйста, покажите полный пример. –

+0

Этот фрагмент кода является «C». Пожалуйста, отредактируйте ваш тег –

+2

, пожалуйста, укажите полный код? какие и где определены m nad k? – zmo

ответ

2

Может быть, это условие означает не то, что вы ожидаете:

while(n < 2 || n > 10001 || -1 < m || m > 100001 || -1 < k || k > 100001) 

Это спросит у Вас п, т, к, а это условие истинно. Если вы введете n = 3, m = -1, k = -1, он будет следующим.

Какие диапазоны n, m, k действительны для ввода?

Если п> 2 = & & п < = 10001, м> = -1 & & м < = 100001, к> = -1 & & к < = 100001, то действует петля

do { 
    scanf("%d %d %d", &n, &m, &k); 
} while (n < 2 || n > 10001 || m < -1 || m > 100001 || k < -1 || k > 100001); 
+1

В частности, цикл 'for' никогда не будет делать ничего, так как' m' и 'k' должны быть отрицательными, чтобы выйти из цикла' do'..'while'. –

+0

n должно быть от 2 до 10001 и m, k - от -1 до 100001. Если они не в этом интервале, я должен ввести их снова. Я думаю, что все в порядке. – micobg

+0

Попробуйте мою версию. Оно работает. – Ruben

1

я заменил (М + Н) с номером 10, так как вы не ссылаетесь на м или час в вашем коде. Вот какой код выглядит так, как вы хотите. Этот код работает.

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

int main(void){ 
    char city1[11], city2[11]; 

    for (int i=0;i<10;i++){ 
    scanf("%s %s",city1,city2); 
    printf("city1: %s\n",city1); 
    printf("city2: %s\n",city2); 
    } 


} 

Выход такой. Я ввел a b c asdf c d

a b 
city1: a 
city2: b 
c asdf 
city1: c 
city2: asdf 
c 
d 
city1: c 
city2: d 

Надеюсь, это поможет!