运行它时,我都会不断遇到 seg 错误(核心转储(,无论我更改什么或编译正常的事实!不确定我在哪里犯了错误?有什么建议吗?
int main (int argc, char** argv)
{
FILE *output;
if ((output = fopen("output", "w")) == NULL)
{
printf ("cannot open the file inputn");
exit (EXIT_FAILURE);
}
int data = 1;
while (scanf("%d", data) > 0)
{
print(output, data);
}
fclose(output);
return (0);
}
void print(FILE* output, int data)
{
fprintf(output, "%dn", data);
return;
}
1 将while (scanf("%d", data) > 0)
更改为 while (scanf("%d", &data) > 0)
。
2 将print
的功能移到开头。
这可能对你有用。
#include <stdio.h>
#include <string.h>
#define MAX 100
void print(FILE* output, int data)
{
fprintf(output, "%dn", data);
return;
}
int main (int argc, char** argv)
{
FILE *output;
if ((output = fopen("output", "w")) == NULL)
{
printf ("cannot open the file inputn");
return -1;
}
int data = 1;
while (scanf("%d", &data) > 0)
{
print(output, data);
}
fclose(output);
return (0);
}
输入
1 2 3 "输入" "Ctrl+D">
while (scanf("%d", data) > 0)
应改为
while (scanf("%d", &data) > 0)
由于 scanf 期望传递变量的地址而不是变量本身,如果您传递一个变量,scanf 最终将通过考虑您传递的值作为内存地址来访问错误的内存,这将导致未定义的行为
首先,正如之前有人在这里所说,您需要将变量的地址传递给scanf函数,因此看起来像这样:
scanf("%d", &data)
但是像你一样在 while 循环中使用它将无法正常工作,因为 scanf 不会返回您分配给变量的值。你必须像这样使用它:
while(data > 0)
{
scanf("%d", &data);
print(output, data);
}
在这种情况下,我相信do-while循环比while循环更合适:
do
{
scanf("%d", &data);
print(output, data);
} while (data > 0);
这样,它将按照您期望的方式工作。
您还忘记指定输出文件的文件类型:
if ((output = fopen("output", "w")) == NULL)
应该是
if ((output = fopen("output.txt", "w")) == NULL)
我在这里为您发布了一个完整的解决方案:https://pastebin.com/vpK9i6Wk