该程序应接收用户输入的一些单词字符串,将其保存在数据结构中,然后将所有内容打印到文件中。例如,如果我键入“ test one”,则应将其保存在inputs.one上,然后我应该在clients.txt上看到“ test one”。如果我键入“测试一”,“测试二”和“测试三”,则应该在client.txt上看到这三个输入。
问题在于该程序现在仅执行一个scanf而不是三个,这就是为什么我添加了三个scanf而不是仅执行一个scanf的原因。基本上,如果我输入“测试一”,它将只保存并打印测试一,而不询问其他两个输入,我不知道为什么。
额外:我添加了这些fget作为尝试正确保存输入的另一种方法,问题是fgets将把文件上的数据打印为
“测试一个 测试两个 测试三个”
而不是将所有内容都放在一行上,因此fgets都不起作用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct inputs {
char one[30];
char two[30];
char three[30];
};
int main(void)
{
struct inputs inputs = {"", "", ""};
FILE *cfPtr; // cfPtr = clients.txt file pointer
// fopen opens file. Exit program if unable to create file
if ((cfPtr = fopen("clients.txt", "w")) == NULL) {
puts("File could not be opened");
}
else {
puts("Enter one, two, three.");
puts("Enter EOF to end input.");
printf("%s", "? ");
//scanf("%[^\n]s%[^\n]s%[^\n]s", inputs.via, inputs.nome, inputs.stars);
/*
fgets(inputs.one, 30, stdin);
fgets(inputs.two, 30, stdin);
fgets(inputs.three, 30, stdin);
*/
while (!feof(stdin)) {
scanf("%[^\n]s", inputs.one);
scanf("%[^\n]s", inputs.two);
scanf("%[^\n]s", inputs.three);
fprintf(cfPtr, "%s%s%s", inputs.one, inputs.two, inputs.three);
}
fclose(cfPtr); // fclose closes file
}
}