0

我正在尝试接收一串用户输入并将其写入文件。然而,无论我做什么,输出总是从字符串中删除空格。

我认为使用gets()/的全部目的puts()是它会读取/输出字符串中的所有字符,直到遇到换行符。

有人可以告诉我我做错了什么吗?

int main (void){
    char userInput[100];
    char filename[50];
    FILE *cfPtr;

    printf("Enter name of file to open: ");
    scanf("%s", &filename);

    cfPtr = fopen(filename, "a+");

    printf("Enter text to add to file: \n");
    fgets(userInput, 100, stdin);

    while (strcmp( userInput, "0") != 0) {
        fputs( userInput, cfPtr);
        fgets(userInput, 100, stdin);
    } // end while

    fclose( cfPtr );

    system("pause");
} // end main
4

3 回答 3

3

有人可以告诉我我做错了什么吗?

我注意到的第一个错误是在 scanf 中,因为%s您正在使用的字符串&

scanf("%s", &filename);
            ^
            |
            remove it, undefined behavior

它应该只是:

scanf("%s", filename);

在此之后您的代码将无法工作。我找不到任何其他语法错误,所以我相信这是您代码中的主要错误。

于 2013-07-23T19:18:54.093 回答
1

1) fgets() 和 fputs() 不会从字符串中删除任何空格。

2) 一个潜在的“陷阱”是 fgets()保留“Enter”字符,您可能不会将其视为字符串的一部分。

3)您的代码中的问题可能与您的“scanf()”有关 - 您应该传递“filename”(这是一个数组),而不是“&filename”(这是重复的冗余)。

4) 更好的是,您可以考虑将“fgets()”替换为“scanf()”。

恕我直言...

PS:这是使用 fgets() 和朋友的一个很好的链接:

http://beej.us/guide/bgc/output/html/multipage/gets.html

于 2013-07-23T19:22:49.730 回答
0

这在 g++ 和 linux 下运行。

int main (void){  
  char userInput[100];  
  char filename[50];  
  FILE *cfPtr;

  printf("Enter name of file to open: ");  
  scanf("%s\n", filename);

  cfPtr = fopen(filename, "a+");

  printf("Enter text to add to file: \n");  
  fgets(userInput, 100, stdin);

  while (strcmp( userInput, "0\n") != 0) {  
      fputs( userInput, cfPtr);  
      fgets(userInput, 100, stdin);  
  } // end while

  fclose( cfPtr );

  //system("pause");  
} // end main
于 2013-07-23T20:56:30.867 回答