서식에 집중할 위치에 대한 힌트를받을 수 있습니까? [닫은
문제
이 프로그램은 인수의 수를 계산하고 인수 목록을 반복해야합니다. 각 인수는 인수를 정수로 변환하여 배열로 복사하고 배열의 요소를 반복하여 각각의 값을 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 이후)이 할당되고 합계가 인쇄 된 다음 기능이 프로그램을 끝냅니다. 그래서 당신은 그 자체로 첫 번째 가치를 더할 것입니다.