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 中不起作用。要比较字符串,您需要使用strcmporstrncmp库函数。

看看这里,看看它是如何工作的,它返回什么等等。

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

于 2013-10-20T20:32:47.237 回答
0

您可以将字符串与一些预定义的值进行比较,例如“break”。所以当用户输入break时,你可以使用strcmp跳出循环

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

其他方法是使用fgetsgetch()getchar()检查空行或只是enter作为输入和突破

于 2013-10-20T20:33:08.020 回答