0

私はまだ勉強中なので、本当に効率の悪いことをしている場合は教えてください。そうでなければ、なぜこれがうまくいかないのかがもっと気になります。

引用符を使用しない限り、複数の単語を記述させることはできません。引用符を追加しなくても複数の単語を書けるようにする方法はありますか?

#include<stdio.h>
#include<stdlib.h>
main() {

    char str[BUFSIZ];
    FILE *f;
    f = fopen(".todo","a");

    printf("\n\nTODO list\n\n");
        printf("~ ");
        scanf("%s", str);
        fprintf(f,str);
        fprintf(f,"\n");
        fclose(f);
}

複数のことを書くことができるように、ループを作成することにしました。これは私がしたことです:

for(;;) {
    printf("~ ");
    scanf("%s", str);
    if(str == "break") {
        fclose(f);
        printf("\n");
        exit(1);
    }
    fprintf(f,str);
}

ただし、「break」と入力すると、終了しません。.todo に書き込みません (これは、fclose が実行されていないためだと思います)。そうでない場合、どうすれば終了させることができますか?

4

2 に答える 2

1
if(str == "break")

これは C では機能しません。文字列を比較するには、strcmpまたはstrncmpライブラリ関数を使用する必要があります。

それがどのように機能するか、何を返すかなどについては、こちらをご覧ください。

http://en.cppreference.com/w/c/string/byte/strcmp

于 2013-10-20T20:32:47.237 に答える
0

文字列を「break」などの事前定義された値と比較するだけです。したがって、ユーザーがブレークに入ると、strcmp を使用してループから抜け出すことができます。

for(;;) {
  printf("~ ");
  scanf("%s", str);
  if(strcmp(str,"break")==0) {
    fclose(f);
    printf("\n");
    break;
  }
  fprintf(f,str);
}

他の方法は、を使用fgetsするgetch()getchar()、空白行をチェックするかenter、入力してブレークアウトすることです

于 2013-10-20T20:33:08.020 に答える