문제

이 프로그램은 인수의 수를 계산하고 인수 목록을 반복해야합니다. 각 인수는 인수를 정수로 변환하여 배열로 복사하고 배열의 요소를 반복하여 각각의 값을 A에 추가합니다. 변수 (요소의 합을 계산) 및 합계를 인쇄합니다. 15 개 이상의 논쟁은 없을 것입니다. 지금까지 나는 다음과 같습니다.

int sumofA (int sizeofA, int x, int y){  
  int i = sizeofA;  
   if (i <= 15){  
      int z = x + y;  
      return z;  
   }  
}  

int main (int argc, char*argv[]){    
   int sizeofA = argc - 1;  
   int i = 1;  
   while (i <= sizeofA){  
      int x = GetInt (argc, argv, i);  
      i = i + 1;  
      int y = GetInt (argc, argv, i);     
      printf ("%d\n", sumofA (sizeofA, x, y));
   }  
   return 0;  
}  

좋아, 이제 (./a 이외의 세 가지 인수가 주어 졌을 때) 첫 번째 인수의 합계와 두 번째 인수 ... 그리고 두 번째와 세 번째 ... 그리고 세 번째 인수의 가치를 인쇄합니다. 왜요?

GetInt의 코드는 다음과 같습니다 (이것을 사용해야합니다).

int GetInt (int argc, char * argv[], int i) {  
   if (i < 0 || i >= argc) return 0;  
   return atoi(argv[i]);  
}  

각 인수를 통과하여 정수에 할당해야합니까 (예. int z = GetInt (argc, argv, i + 2) )?

도움이 되었습니까?

해결책

여기에는 몇 가지 잘못이 있습니다.

  • 나는 sumofa에서 정의되지 않았으므로 그것과 비교하면 정의되지 않은 행동을 산출합니다.
  • i> = 15가 있으면 어떤 Sumofa가 돌아올지는 불분명합니다.
  • 당신은 루프 내부로 돌아갑니다. 확실히 그것은 당신이 원하는 것이 아닙니다.
  • 코드는 실제로 배열 A에 저장하지 않습니다.

모든 경고 플래그를 사용하여 코드를 컴파일하십시오 (gcc : -wall -werror -pedantic). 아니요 코드가 컴파일 될 때 경고.

변수입니다 크기 불필요하다 : 사용 while (i <argc).

편집하다: 이제 코드를 추가했습니다 getint, 바꾸다

GetInt (argc, argv, i);

~와 함께

atoi(argv[i]);

사용이 없습니다 getint, 당신은 그것을 완전히 제거 할 수 있습니다.

마지막으로 : 귀하의 질문에서 당신은 배열에 숫자를 저장 한 다음 합산하는 것을 언급합니다. 당신은 ~ 원하다 그렇게하려면 또는 필요 필요하지 않기 때문에 (약간의 과제로 인해) 그렇게하려면 : 모든 통화 결과를 추가하십시오. 아토이. 배열 그런 다음 불필요합니다.

편집 2 : 나는 당신이 어떤 곳에서 코드를 수정 한 것을 봅니다. 현재 코드 (23:31 Cest)는 각 인수에 개별적으로 첫 번째 인수를 추가하고 인쇄합니다. 당신은 아직 거기에 없습니다. 행운을 빕니다!

다른 팁

귀하의 문제는 여기에 있습니다.

 int x = GetInt (argc, argv, 1);
 int y = GetInt (argc, argv, i);

당신이 처음으로 루프를 통과 할 때, 나는 무엇이며 무엇이 인쇄됩니까? 두 번째로 루프를 통과하는 것은 어떻습니까?

우선, 당신은 루프의 첫 번째 반복 후 0을 반환합니다.

포맷 도움말을 원하기 때문에 ...

우선, C는 단순한 과제 연산자가 있습니다. =, 그리고 이것들은 같은 것들에 좋습니다 x = x + 1. C 포함 된 대부분의 언어는 a += 이렇게 보이는 연산자 : x += 1. 그것은 같은 일입니다 x = x + 1, 더 좋습니다. 설탕이 동기화되지만 설탕은 맛있습니다.

우리가 그것을하는 동안 C와 다른 많은 언어는 특별한 사례를 제공합니다. += 1 - ++ C ++의 이름을 얻는 연산자. 그래서 정말로, x = x + 1 다시 작성할 수 있습니다 x++ 이랑 똑같은 효과. 그러나 x++ 그리고 ++x, 그러나 현재는 중요하지 않습니다. 지금은 원하는 것을 사용하여 원하는 것을 사용하여 자신의 선에 차이를 배울 때까지 자체 라인에 넣으십시오. x++ 그리고 ++x.

한 번 사용하는 변수가 있다면 사용하지 마십시오. 대신 :

int sizeofA = argc - 1;
...
while (i <= sizeofA){
  ...
  printf ("%d\n", sumofA (sizeofA, x, y));
}

이 시도:

...
while (i <= argc - 1){
  ...
  printf ("%d\n", sumofA (argc - 1, x, y));
}

또는 (아마도 더 나은) :

...
while (i < argc){
  ...
  printf ("%d\n", sumofA (argc - 1, x, y));
}

셋째, 전체 인수 목록을 맹목적으로 전달해서는 안됩니다. 현재 시간에 변환하려는 인수 만 있지만 또 다른 문제이며 변경할 수 없다고 생각합니다. GetInt(). 이것은 또 다른 날을위한 전투처럼 보입니다.

(넷째, 왜 커뮤니티 위키 질문입니까?)

다섯 번째로, 나는 당신의 논리가 꺼져 있다고 생각합니다 - 당신이 1에서 시작하면, 나는 당신이 목록이 끝나기 전에 1을 멈추고 싶지 않다고 생각합니다. 그러나 이것은 간단한 오류 오류이며 나중에 오류인지 알면 나중에 고칠 수 있습니다.

마지막으로 변수를 정의하는 것이 좋습니다. int answer, 그리고 대신 printf()모두 목록의 요소는 단순히 목록을 통과하고 각각의 숫자 값을 추가하십시오. answer, 그때, 마지막에 인쇄 answer. 그러나 어쩌면 나는 과제의 요점을 놓치고 있을지도 모른다. 또는 루프를 반복 할 때마다 인쇄 할 때마다 answer, 따라서 매번 값이 올바르게 증가하는 것을 볼 수 있습니다. 나는 이것이 당신이 실제로 과제에서하고 싶은 일에 더 가깝다고 생각하지만, 나는 갈 수업이 있기 때문에 확인하는 데 시간을 할애 할 수 없습니다.

루프 x와 y를 통해 처음으로 동일한 값 (i = 1 이후)이 할당되고 합계가 인쇄 된 다음 기능이 프로그램을 끝냅니다. 그래서 당신은 그 자체로 첫 번째 가치를 더할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top