我有這個程式試圖從羅馬數字轉換為阿拉伯數字并且編譯沒有問題,但即使我輸入一個有效數字,它總是默認顯示無效引數。
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main () {
int Rnum = 0;
int Rdec = 0;
int cont = 0;
int cont3R = 0;
int Rnums[15] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char Rletter = ' ';
char roman[15] = "";
printf ("Enter a Roman numeral in the range I to MMMCMXCIX:\n");
而塊
while ((Rletter != 'n') && (cont < 15)) {
Rletter = toupper(getchar());
switch (Rletter) {
/* V, L and D can only appear once */
case 'V': case 'L': case 'D':
if ((cont > 0) && (roman[cont - 1] == Rletter)) {
printf ("\nInvalid argument");
sleep(1000);
exit(0);
}
else { roman[cont ] = Rletter; }
break;
case 'I': case 'X': case 'C': case 'M':
if (cont3R <= 3) {
roman[cont ] = Rletter;
}
cont3R ;
if ((cont3R > 3) && (roman[cont - 2] == Rletter)) {
printf ("\nInvalid argument");
sleep(1000);
exit(0);
}
if ((cont > 1) && ((cont3R > 3) || (roman[cont - 2] != Rletter))) {
cont3R = 1;
}
break;
case 'n': break;
default: printf("\nInvalid argument"); //<--- It comes out here
sleep(1000);
exit(0);
}
}
uj5u.com熱心網友回復:
您沒有指定輸入,但我認為您使用字符“n”來終止羅馬數字。
但是,回圈檢查:
while ((letraR != 'n') && (cont < 15)) {
和開關盒:
case 'n': break;
永遠不會匹配,因為您已經呼叫toupper()了輸入。
所以你可能只需要這些來檢查'N'而不是'n'.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/477481.html
