#include <stdio.h>
#include <conio.h>
#include <string.h>
int msghere(const char *text)
{
printf("%s",text);
return 1; /* you want 1 instead of 0, because (strcmp != 0) && 1 == true */
}
int main(void)
{
char inp[256];
clrscr();
do {
printf("Type \"pass\": ");
fgets(inp, sizeof inp, stdin); /* gets is deprecated, use fgets */
} while (strcmp(inp, "pass\n") && msghere("Error!"));
msghere("Right Answer!");
getch();
return 0;
}
編集:
\n
パスインした後にあるのはなぜですかwhile((strcmp(inp, "pass\n") && msghere("Error!"))
fgets
は文字列の最後に余分なものを入れるため\n
、次を使用してこの新しい行をスキップできます。
if (fgets(inp, sizeof inp, stdin) != 0)
{
size_t len = strlen(inp);
if (len > 0 && inp[len - 1] == '\n')
inp[len - 1] = '\0';
/* ... */
}
Turbo C または古いコンパイラを使用しているようですが、最新のコンパイラ (例: MinGW) を使用してください。さらに:
- 初期化する必要はありません
inp
memset
反復ごとに行う必要はありません
- 関数は何らかの型 (この場合は
int
) またはvoid
const
修飾子は、データ オブジェクトを変更できないものとして明示的に宣言します。これを使用して、コンパイラがより適切なコードを作成できるようにします。
int main(void)
の代わりに 使用void main()