2016-10-27 2 views
0

두 줄의 입력을 필요로하는 프로그램을 만들 필요가 있습니다. 각 입력은 불특정 한 숫자로 구성되어 있으며 각 입력은 별도의 vector (int *).여러 줄의 여러 줄 읽기 (숫자가 지정되지 않음) C

문자열을 사용하여 입력을 저장 한 다음 int로 변환 할 수 없습니다.

그것은, 리눅스 환경에서 일해야 실제로 나는 다음과 같은 코드로 Windows 용 그것을 해결했습니다

:

int t,s1=0,s2=0; 
char tx; 
int* a=(int*)malloc(0); 
int* b=(int*)malloc(0); 
scanf("%i%c",&t,&tx); 
while(tx!='\n') 
{ 
    a=(int*)realloc(a,sizeof(int)*(s1+1)); 
    a[s1++]=t; 
    scanf("%i%c",&t,&tx); 
} 
a=(int*)realloc(a,sizeof(int)*(s1+1)); 
a[s1++]=t; 
scanf("%i%c",&t,&tx); 
while(tx!='\n') 
{ 
    b=(int*)realloc(b,sizeof(int)*(s2+1)); 
    b[s2++]=t; 
    scanf("%i%c",&t,&tx); 
} 
b=(int*)realloc(b,sizeof(int)*(s2+1)); 
b[s2++]=t; 

나는 적어도 나를 위해, 리눅스에 그것을 테스트하고 한, 그것은 아무튼 ' 일하지 마라.

감사합니다. 정말 고마워요.

+0

C에서 void 포인터를 형 변환 할 필요가 없으며 어떤 방식 으로든 권장하지 않습니다. 그 쓸모없는 던지기를 그냥 제거하십시오. – alk

+1

"* 작동하지 않습니다. *"는 다소 문제가있는 것으로보고 할 수 있습니다. 좀 더 구체적으로 말하십시오 : 당신은 무엇을 기대합니까? 너는 무엇을 얻 느냐? – alk

+0

"vector (int *)"C++의 질문 일 수 있다고 생각합니다 ... –

답변

3

저는 리눅스에서 프로그램을 시험해 보았습니다. 내가 GDB에서 그것을 실행하고 마지막 문 다음, 디버거가 다음 값 준

1 2 3 
4 5 

:이 후행하는 경우

(gdb) print s1 
$4 = 3 
(gdb) print s2 
$5 = 2 
(gdb) print a[0] 
$6 = 1 
(gdb) print a[1] 
$7 = 2 
(gdb) print a[2] 
$8 = 3 
(gdb) print b[0] 
$9 = 4 
(gdb) print b[1] 
$10 = 5 
(gdb) 

그러나 코드가 아마 실패를 나는 다음과 같은 입력 파일을 사용하여 입력 데이터의 공백

또한 scanf()가 실패 할 경우 무한 루프가 될 수 있으므로 scanf()의 반환 값을 확인하지 마십시오. 초기 EOF로 인해

Windows 줄 끝 (\ r \ n)을 사용하여 파일에서 프로그램 입력 데이터를 제공하는 경우에도 문제가 발생할 수 있습니다.

중복 코드를 제거하므로 do {} while (tx!='\n') 루프를 사용하는 것이 좋습니다.

관련 문제