2012-05-19 3 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의 이름을 읽어야합니다. 문제는 내가 어떤 문자열을 쓸 때 언론은 아무것도 입력하지 않는다는 것이다. 포인터가 화면에 있지만 아무 것도 할 수 없습니다. scanf 후에 printf로 무엇인가 쓰려고했지만 작동하지 않습니다. :/

더 코드 :

코드에서 당신이 m 또는 시간을 참조하지 않기 때문에 나는 숫자 10 (m의 + h를) 대체했다
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 정의되지 않았는가? – zmo

답변

2

이 조건은 당신이 무엇을 기대하지 수단이 될 수 있음이 조건이 true 인 동안

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

이 N, M, K를 묻습니다. n = 3, m = -1, k = -1을 입력하면 다음으로 넘어갑니다.

n, m, k 범위는 입력에 유효합니까?

만약 N> 2 = & & & & N < m = 100,001, K> = -1 다음 & & < K = 100,001, 유효 루프가 < = 10001, m> = -1

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'while 루프에서 벗어나기 위해 음수이어야하기 때문입니다. –

+0

n은 2에서 10001까지이고 m, k는 -1에서 100001까지이어야합니다.이 간격에 있지 않으면 다시 입력해야합니다. 나는 괜찮다고 생각한다. – micobg

+0

내 버전을 사용해보세요. 그것은 작동합니다. – Ruben

1

. 다음은 원하는 코드입니다. 이 코드는 작동합니다.

#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 
city1: a 
city2: b 
c asdf 
city1: c 
city2: asdf 
c 
d 
city1: c 
city2: d 

나는 이것이 도움이되기를 바란다.