0부터 10 사이의 숫자를 받고 유효 함을 나타내는 메시지를 표시하는 프로그램을 작성하고 싶습니다. 그렇지 않다면 유효한 번호를 계속 요구해야합니다.char가 부동, 부동 한 코드 및 부적합한 결과로 변환되지 않음
나는 모든 것을 코딩 할 수 있으며 나에게 꽤 괜찮은 것처럼 보이지만 제대로 작동하지 않습니다.
비슷한 문제가 많은 주제를 보았지만 문제를 해결할 수 없었습니다. 내 말은, 약간의 진전이 있었지만, 제 코드는 아직 작동하지 않습니다.
내가 한 일 : 삽입 된 값을 저장하기 위해 변수를 만들었고, ctype 라이브러리를 사용하여 숫자를 허용하고, char을 부동 상태로 변환하고, 요구 사항을 충족하는지 확인했습니다.
나는 여러 가지 코드를 시도했다. 나는 그 코드를 많이 봤는데, 지금 내가 뭘해야하는지 잘 모른다.
코드 1 :
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
main(){
char grade;
float grade2;
printf("Please, insert a grade between 0 and 10.\n");
printf("Grade: ");
scanf("%c",&grade);
while(isalpha(grade) || ispunct(grade) || isspace(grade) || iscntrl(grade)){
printf("Please, insert a valid value.\n");
fflush(stdin);
printf("Grade: ");
scanf("%c",&grade);
}
if(isdigit(grade)){
grade2 = atof(grade);
while(grade2 < 0 || grade2 > 10){
printf("\nPlease, insert a valid value.\n");
fflush(stdin);
printf("grade: ");
scanf("%c",&grade2);
}
printf("Valid value.\n");
}
else{
printf("Restart the program and try again.");
}
system("PAUSE");
}
코드 1 큰 문제는 내가 얻을이 :
[Error] invalid conversion from 'char' to 'const char*' [-fpermissive]
난 그냥 작동하지 수 있지만, 여기 (코드를 작동 인터넷에서 발견됨) :
#include <stdio.h>
#include <stdlib.h>
int main(){
char a[10] = "3.14";
float pi = atof(a);
printf("Value of pi = %f\n", pi);
return 0;
}
나는 그것이 scanf nd 초기화를 수행했지만 scanf를 사용하여 값을받는 데에도 효과적이었습니다.
마지막으로 배열이 될 수 있다고 생각했습니다. 내가 그랬어 :
코드 2 :
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
main(){
char grade[50];
float grade2;
printf("Please, insert a grade between 0 and 10.\n");
printf("Grade: ");
scanf("%c",&grade[50]);
while(isalpha(grade[50]) || ispunct(grade[50]) || isspace(grade[50]) || iscntrl(grade[50])){
printf("Please, insert a valid value.\n");
fflush(stdin);
printf("Grade: ");
scanf("%c",&grade[50]);
}
if(isdigit(grade[50])){
grade2 = atof(grade);
while(grade2 < 0 || grade2 > 10){
printf("\nPlease, insert a valid value.\n");
fflush(stdin);
printf("Grade: ");
scanf("%c",&grade2);
}
printf("The grade is: %f\n", grade2);
printf("Valid value.\n");
}
else{
printf("Restart the program and try again.");
}
system("PAUSE");
}
그것은 항상 인쇄 된이 아무리 내가 쓴 번호, 유효한 값이 없습니다. 그래서, 나는 그것이 비교 된 값을 확인하려면 코드를 변경하고 출력했다 : 나는 그것을 봤
Please, insert a grade between 0 and 10.
Grade: 11
The grade is: 0.000000
Valid value.
내가 뭔가 잘못되면으로 atof는 0을 반환 할 수 보았다. 그래서
, 나는이 모델을 사용하던하려고 노력 마지막 일 : (인터넷에서도 발견) 마지막으로
double atof(const char *str)
을
코드 3 :
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
main(){
char grade;
printf("Please, insert a grade between 0 and 10.\n");
printf("Grade: ");
scanf("%c",&grade);
while(isalpha(grade) || ispunct(grade) || isspace(grade) || iscntrl(grade)){
printf("Please, insert a valid value.\n");
fflush(stdin);
printf("Grade: ");
scanf("%c",&grade);
}
if(isdigit(grade)){
float atof(grade *grade);
while(grade < 0 || grade > 10){
printf("\nPlease, insert a valid value.\n");
fflush(stdin);
printf("Grade: ");
scanf("%c",&grade);
}
printf("The grade is: %f\n", grade);
printf("Valid value.\n");
}
else{
printf("Restart the program and try again.");
}
system("PAUSE");
}
출력은 다음과 같습니다.
Please, insert a grade between 0 and 10.
Grade: 11
Please, insert a valid value.
Grade: 6
Please, insert a valid value.
Grade: 10
Please, insert a valid value.
Grade: 5
Please, insert a valid value.
Grade:
나는 벗어날 수 없었다.
나는 그것을 디버깅하여 두 번째로 붙어있는 것을 알았다.
값을 다시 인쇄하려고했는데 다른 0.000이 ...
글쎄, 인터넷에서 좋은 연구를했기 때문에 여기에 왔지만 여전히 문제를 해결할 수는 없습니다.
잘못된 행동을하면 (규칙 위반) 죄송합니다. 그렇다면 말해주십시오. 나는 그것을 고치려고 노력할 것입니다.
감사합니다.
당신은'scanf()'를 사용하여 여섯 개 입력을 받아들이지 만, scanf의 반환 값을 결코 확인하지 않고 결코 입력 된 값을 출력하지 않습니다. 디버깅하는 법을 배우십시오 - 당신이 기대하는 바를 얻고 있다고 가정하지 말고 인쇄하십시오! –