안녕 충돌 : 그것은 공정 입력을 콘솔에서 읽고 밖으로 다시 제공해야합니다C 프로그램은 내 프로그램을 디버깅에 도움이 필요
오류가 occures while(scanf("%15s", input) != EOF)
는 2 시간이 호출 된 후. 불행히도 나는 프로 그램이 얼어 버리고 나에게 어떤 정보도주지 않기 때문에 오류가 무엇인지 말할 수 없다. 나는 input
VAR에 문제 (이 전달되는 여러 번)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
char* repeat(char c, int n);
char* drawLabel(char* label, int n);
char* drawBarnorm(char* label, int value);
char* drawBar(char* label, double value);
int main(void)
{
char* input;
double numIn;
char buf[] = "";
char* pOutput = &buf[0];
while(scanf("%15s", input) != EOF)
{
scanf("%lf", &numIn);
if (numIn > 1)
{
if (numIn > 30)
{
printf("num to big!\n");
return 0;
}
strcat(pOutput, drawBarnorm(input, (int)numIn));
} else
{strcat(pOutput, drawBar(input, numIn));}
printf("%s\n", pOutput);
}
printf("%s\n", pOutput);
return 0;
}
char* repeat(char c, int n)
{
char* out = (char*)malloc(sizeof(char)*50);
int i, len;
out[0] = '\0';
for (i = 0; i < n; ++i)
{
len = strlen(out);
out[len] = c;
out[len+1] = '\0';
}
return out;
}
char* drawLabel(char* label, int n)
{
if (strlen(label) > n)
{
char* newLabel = (char*)malloc(sizeof(char)*(n+1));
newLabel[0] = '\0';
strncpy(newLabel, label, n);
newLabel[n] = '\0';
return newLabel;
} else if (strlen(label) < n)
{
strcat(label, repeat(' ', n-strlen(label)));
}
return label;
}
char* drawBarnorm(char* label, int value)
{
char* bar = (char*)malloc(sizeof(char)*41);
char* barPart;
bar[0] = '\0';
bar = drawLabel(label, 8);
strcat(bar, "|");
barPart = drawLabel(repeat('#', value), 30);
strcat(bar, barPart);
strcat(bar, "|");
return bar;
}
char* drawBar(char* label, double value)
{
int val = (int)(30.0*value);
return drawBarnorm(label, val);
}
이 나를 도와 주셔서 감사합니다 거기라고 생각합니다.
을 통해 값을 저장하기 위해 몇 가지 유효한 메모리 위치를 가리키는해야
당신은 이전과 같은이 질문에 똑같은 실수를했다. – Sadique
* 과거를 기억하지 못하는 사람들은 그것을 반복하도록 비난받습니다. * - George Santayana. –
이 줄은 : '(scanf ("% 15s", input)! = EOF)'오류가 있습니다. 코드에서 실제로 찾고자하는 것은 '입력/변환이 성공적 이었습니까?'입니다. 따라서 라인을 작성하는 올바른 방법은 'while (1 == scanf ("% 15s", input))'I.E. 1 입력 변환 및 형식 문자열에서 ''를 앞에 놓으면 선행 공백 (새 줄)을 건너 뛰거나 흡수합니다. – user3629249