【发布时间】:2021-08-11 04:56:29
【问题描述】:
我正在尝试编写一个简单的代码来在 .csv 文件上编写一些内容。我写了一个for 循环和一堆fgets() 来从文件中获取数据,但是程序不等待用户输入信息而只是关闭程序。有人知道如何解决吗?
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
int main() {
setlocale(LC_ALL, "Portuguese");
int i;
char nome, tel, email, cpf;
FILE *f_ptr;
f_ptr = fopen("3556346.csv", "w+");
fprintf(f_ptr, "Nome, CPF, Telefone, E-mail\n");
for (i = 0; i < 6; i++) {
printf("Digite o nome: ");
fgets(&nome, sizeof(nome), stdin);
printf("Digite o CPF: ");
fgets(&cpf, sizeof(cpf), stdin);
printf("Digite o telefone: ");
fgets(&tel, sizeof(tel), stdin);
printf("Digite o e-mail: ");
fgets(&email, sizeof(email), stdin);
fprintf(f_ptr, "%c, %d, %c, %c\n", nome, cpf, tel, email);
}
fclose(f_ptr);
return 0;
}
P.S.:如果有人来这里遇到和我一样的问题。解决方案,就像下面的好人指出的那样,将[101] 放在每个char 声明的名称之后。像字符 nome[101], tel[101], ...
同样在fprintf 命令中,您应该使用%s 而不是%c。我发现的最后一件事,fgets 存储了一个断行,所以如果你不想要它,你需要在每个fgets 之后写nome[strcspn(nome, "\n")] = '\0';,其中nome 是变量的名称。
【问题讨论】:
-
char nome, tel, email, cpf;不能保存任何字符串。char nome[100]可以。 (最多99个字符加上'\0'nul 终止字符)然后fgets (nome, sizeof nome, stdin); -
还要注意
#define _CRT_SECURE_NO_WARNINGS和#pragma warning(disable : 4996)做同样的事情,禁用警告4996。 -
感谢您的 cmets 大卫。我尝试使用 #define _CRT_SECURE_NO_WARNINGs 但它不起作用,这就是我尝试另一个的原因。但现在我只是使用 pragma 并且它工作正常。您对尺寸的输入就是我解决问题所需要的!再次感谢
-
很高兴它有帮助。
#define和#pragma的问题很奇怪,它们都应该做完全相同的事情,请参阅 Security Features in the CRT 尽管 VS 的行为从未停止让我感到惊讶:)