在C中写一个待办事项列表有很多问题

时间:2013-10-20 20:30:35

标签: c

我还在学习,所以如果我做的事情真的效率低下,请告诉我。否则,我更关心为什么这不起作用。

除非我使用引文,否则我无法写多个单词。有没有办法让我不必添加引号就可以写多个单词?

#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)如果不是这样的话我该如何退出?

2 个答案:

答案 0 :(得分:1)

if(str == "break")

这在C中不起作用。要比较字符串,您需要使用strcmpstrncmp库函数。

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

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

答案 1 :(得分: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作为输入和分组