3
私のCプログラムでは、ユーザからの入力を得るためにfgets()
を2回呼び出します。しかし、(関数内にある)fgets()
の2回目の呼び出しでは、入力が取られるのを待たずに、それを要求していないかのようにスキップします。ここに私のコードは、(ビットをダウン短縮)である:Cプログラミング - fgets()を2回呼び出す?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ARE_EQUAL 0
void rm_nl(char *c, int s);
float ctof();
float ftoc();
int main()
{
char str[2]; // Setting vars
float result;
printf("Type 'C' or 'F': "); // Prompt
fgets(str, 2, stdin); // <-- First fgets
rm_nl(str, 2); // rm_nl() removes the newline
// from input
printf("\n");
if(strcmp(str, "C") == ARE_EQUAL || strcmp(str, "c") == ARE_EQUAL)
{
result = ctof(); // Compares strings and calls
printf("%.2f\n", result); // function conditionally
}
else
{
result = ftoc();
printf("%.2f\n", result);
}
return 0;
}
float ctof() // One of the two functions
{ // (they are almost the same)
char input[64];
float fahr, cels; // Local vars
printf("Type in a Celsius value: "); // Prompt
fgets(input, 64, stdin); // <-- Second fgets
rm_nl(input, sizeof(input));
// Yadda yadda yadda
}
// Second function and rm_nl() not shown for readability
このプログラムは何かを出力たい:
Type 'C' or 'F': (value)
、その後...
Type a Celsius value: 57.40 (I don't type this)
(Program terminates)
それは埋め57.40私もそれを入力していない!どうすれば違うのですか?
バッファを増やしてお知らせします。ありがとう! –
完璧に作業しました!ありがとう!! –