0から10までの数値を受け取り、それが有効かどうかを示すメッセージを表示するプログラムを作成したいと思います。そうでない場合は、有効な番号を要求し続ける必要があります。無効なcharのfloat型への変換、異なるコードおよび良い結果なし
私はすべてをコーディングすることができましたが、それはかなりいいようですが、正しく機能していません。
私は同様の問題で多くのトピックを見てきましたが、問題を解決できませんでした。私はいくつかの進歩を遂げましたが、私のコードはまだ動作していません。
私は何をしましたか: 挿入された値を格納するための変数を作成しました.ctypeライブラリを使用して数値を受け取り、マイチャーを浮動小数点に変換し、要件を満たしているかどうかを確認しました。
私はいくつかの異なるコードを試しましたが、私はそれをたくさん探していましたが、今は何をすべきか分かりません。
CODE 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 a ndの初期化を行いましたが、scanfで値を受け取っていました。
最後に、私はそれが配列であると考えました。私がやった:
CODE 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はゼロを返すことができました。だから、
、私はこのモデル使用した実行しようとしました最後のもの:(また、インターネット上で見つかった)最後に
double atof(const char *str)
を、
CODE 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:
私は中断できませんでした。
私はそれをデバッグして、それが第2の間につかまっていたことを発見しました。
もう一度値を印刷しようとしましたが、別の0.000があります...
私はインターネットで良い研究をしたので私はちょうどここに来ましたが、私はまだ私の問題を解決することはできません。
私は何か間違っている(申し訳ありませんが、ルール違反のようです)。もしそうなら、教えてください。私はそれを修正しようとします。
ご清聴ありがとうございました。
あなたは 'scanf()'で半ダースの場所に入力しますが、scanfの戻り値を決してチェックせず、入力された値を決して印刷しません。デバッグする方法を学ぶ - あなたが期待しているものを手に入れていると仮定してはいけません。 –