2012-10-27 3 views
3

프로그래밍에서 완전히 새로운 기능이며 여기에서하는 일을 설명하는 방법을 모르겠습니다.int 배열이 char 값을 가져 오지 않습니다

이 부분의 모든 목적은 값을 입력 한 다음 동일한 순서로 인쇄하는 것입니다. 이제 'q'를 누를 때 값을 입력하지 않으려 고 문자를 검색해야하지만 int 배열로 다시 할당하면 값이 동일하지 않습니다. 를 heres 내 코드 당신에게 있지만, 어떤 경우에 어떤 의미가

희망 :

#include <stdio.h> 
#include <stdlib.h> 
#define SIZE 5000 
define flush fflush(stdin) 

main() { 
    int input[SIZE] = {0},i = 0; 
    int counter = 0; 
    char inputs, quit; 

    do { 
     system("cls"); 
     printf("Input number ('q' to quit and display numbers entered): "); 

     flush; 
     scanf("%c",&inputs); 
     flush; 

     if (inputs == 'q') 
      quit = 'q'; 
     else { 
      input[i] = inputs; 
      counter++; 
      i++; 
     } 
    } while (i < SIZE && quit != 'q'); 

    for(i = 0; i < counter; i++){ 
     printf("%i.%i\n", i + 1, input[i]); 
    } 

    system("pause"); 
} 

필자는 문자에 대한 온라인 조사 BTW 또한 내 자신에 대한 몇 가지 정보를이 일을하려고하지만 것 아무것도 찾을 couldnt는되어 도와주세요. 많은 감사드립니다.

+1

간단한 : 당신이하고있는 일은 UB입니다. –

+4

'fflush (stdin)'에 정의되지 않은 동작이 있습니다. 하지 마. –

+0

'int' 배열에'char'을 저장해도 그 문자가 ASCII 인코딩에서 원하는 10 진수 결과로 변환되지 않습니다. 예. ''1 ''은 십진수로 49로 표시되며, 실제로 메모리에 저장되는 값입니다. 대신이 변환을 수행 할 '% d'지정자를 사용해야합니다. 또한 숫자보다 긴 숫자를 읽을 수 있습니다. 필요한 경우 너비 지정자가있는 숫자의 길이를 제한 할 수 있습니다. – AusCBloke

답변

3

당신도 c를 %를 통해 정수를 받고해야 둘 다없는 것을 오히려이

i = 0; 
do { 
    printf("Enter a number: "); 
    scanf("%d", &input[i]); 
    i++; counter++; 
    printf("Do you want to continue? (y/n) : "); 
    scanf("%c", &inputs); 
} while(inputs == 'y'); 

같은 것을 접근해야 또는 u는 정수 입력의 수를 얻을 수 있습니다, 의도하지 않을 때 정수 변수에 문자 값을 할당 그 많은 정수를 얻기 위해 선행 및 루프.

+0

그는 정수로 전달하지 않습니다 ...'scanf ("% c", & inputs);는 괜찮습니다. 'inputs'는'char' 타입입니다. 또한,'input [i] = inputs;'도 괜찮습니다. 암묵적인 변환이 일어나고 있습니다. –

+0

그런데 왜 그는 "input [i] = inputs;" – AnandVeeramani

+0

다시 암시 적 유형 변환. –

0

대신 (가능한 한 원래의 코드를 사용하여) 시도 :

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#define SIZE 5000 

int main() 
{ 
    int input[SIZE] = {0},i = 0; 
    int counter = 0; 
    char inputs[32]; 
    bool quite = false; 

    do 
    { 
    system("cls"); 
    printf("Input number ('q' to quit and display numbers entered): "); 

    // read a string from user, then convert when appropr 
    fgets(stdin, sizeof(inputs), inputs); 

    if (inputs[0] == 'q') 
    { 
     quit = true; 
    } 
    else if (isdigit(inputs[0])) 
    { 
     input[i] = atoi(inputs); // this will disregard any ending \n 
     counter++; 
     i++; 
    } 
    } 
    while (i < SIZE && !quit); 

    for(i = 0; i < counter; i++) 
    { 
    printf("%i.%i\n", i + 1, input[i]); 
    } 
    system("pause"); 
} 
+0

그래서 나는 int 배열을 문자 배열에 만들고 scanf를 % d로 만들어야한다고 추측합니다. 그러면 ASCII 코드로 숫자와 문자를 스캔하여 정상으로 변환합니다. 그리고 늦은 답변에 대해 유감스럽게 생각하지만 때때로 밤에 일하기 때문에 응답을 확인하고 감사 할 수 없었습니다. 나는 숙제를 위해이 일을 할 수있었습니다. 왜냐하면 단지 양수 값을 입력해야만 다음과 같이 끝낼 수있었습니다. 하지만 그게 재미있을거야. – user1780004

+0

나는 당신이 게시 한 것들 대부분을 이해하려고 노력했지만, 나는 어려움을 겪고있다. 내가 매우 인스턴트 메신저를 말했듯이 지금은 약 4 주간 계속되었습니다. 그러나, 나는 내 코드에 약간의 변화를 주었지만 이제는 "i"에 대해 "수정 가능한 좌변 값이어야한다"라는 표현을 나에게주고있다. 나는 또한 책을 가지고 있지 않으며 대부분의 정보는 학교의 튜토리얼 비디오가 제공하므로, 좋은 소식을 접한 사람들이 있다면 공유해 주셔서 감사합니다. – user1780004

+0

나는 의견에 코드를 게시하는 방법을 알아 내려고 노력했기 때문에 사람들이 변경 사항을 볼 수 있지만 문제가 있습니다. 이것은 내 첫 번째 게시물이므로 제발 쉽게 가십시오 :). 감사. – user1780004

0

또 다른 변형. scanf()이 아닌 getchar()을 사용하기 때문에 공백 사용에 관계없이 문자로 읽습니다. 이것이 당신이 원하는 것인지 확실하지 않습니다. 의 정수가 필요하지만, 입니다. 따라서이 솔루션은 완전히 근본적으로 다를 수 있습니다.

#include <stdio.h> 
#include <stdlib.h> 
#define SIZE 5000 

int main() 
{ 

    char input[SIZE] = {0}; 
    int i = 0; 
    int counter = 0; 
    char inputs; 

    printf("Input number ('q' to quit and display numbers entered): "); 

    while (((inputs = getchar()) != EOF) && (counter < SIZE)) 
    { 
     if (inputs == 'q') 
      break; 

     input[counter] = inputs; 
     counter++; 
    } 

    for(i = 0; i < counter; i++) 
    { 
     printf("%c\n", input[i]); 
    } 

    system("pause"); 

    return 0; 
} 

int가 실제로 필요한 경우이 것이 작동해야합니다.

atoi() 함수를 사용하여 C 문자열을 int로 변환 할 수 있습니다.

fgets() 함수는 STDIN에서 C 문자열을 읽는 데 사용됩니다. 그러나 scanf("%c", &inputs);과 대조적으로 scanf("%s", input);도 여기에서 작동합니다.

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

#define INPUT_SIZE 1000 
#define SIZE 5000 

int main() 
{ 

    char input[INPUT_SIZE] = {0}; 
    int numbers[SIZE] = {0}; 
    int i = 0; 
    int counter = 0; 

    while ((fgets(input, sizeof(input), stdin) != NULL) && (counter < SIZE)) 
    { 
     system("cls"); 
     printf("Input number ('q' to quit and display numbers entered): "); 

     if (input[0] == 'q') 
      break; 

     numbers[counter] = atoi(input); 
     counter++; 
    } 

    for(i = 0; i < counter; i++) 
    { 
     printf("%i\n", numbers[i]); 
    } 

    system("pause"); 

    return 0; 
} 
관련 문제