gpt4 book ai didi

c - 为什么我的程序在执行 scanf() 之前突然终止?

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:41 25 4
gpt4 key购买 nike

我正在尝试编写代码来替换文本文件中的一行。它编译成功,但一旦尝试扫描要替换的行号,它就会突然终止。

我真的不知道我做错了什么。我也尝试过使用 fgets(),但它仍然不起作用。

#include <stdio.h>
#include <stdlib.h>

#define MAXNAME 30
#define MAXLINE 256

int main(){
char fileName[MAXNAME];
FILE *originalFileCheck;

printf("Input the name of the file to be opened: ");
scanf("%s", fileName);
originalFileCheck = fopen(fileName, "r");

if(originalFileCheck == NULL){
printf("The file %s was not opened successfully. The program will now terminate.\n", fileName);
exit(1);
}
else{
FILE *tempFileWrite;
char tempName[MAXNAME] = "temp.txt";
tempFileWrite = fopen(tempName, "w");

char newLine[MAXLINE];
int lineNum;

printf("Input the content of the new line: ");
scanf("%s", newLine);
printf("Input the number of the line you want to replace: ");
scanf("%d", &lineNum); /* it terminates WITHOUT scanning this int*/

char str[MAXLINE];
int counter = 1;
while(fgets(str, MAXLINE, originalFileCheck) != NULL){
if(counter != lineNum){
for(int i = 0; str[i] != '\0' && str[i] != '\n'; i++){
fputc(str[i], tempFileWrite);
}
fprintf(tempFileWrite, "\n");
}
else{
fprintf(newLine, "%s\n", tempFileWrite);
}
counter++;
}

fclose(tempFileWrite);
fclose(originalFileCheck);
...
return 0;
}

最佳答案

以下建议代码:

  1. 干净地编译
  2. 检查输入错误
  3. 检查输出错误
  4. 执行所需的功能
  5. 发生错误时正确清理

现在,建议的代码:

#include <stdio.h>
#include <stdlib.h>

#define MAXNAME 30
#define MAXLINE 256

int main( void )
{
char fileName[MAXNAME];
FILE *originalFileCheck;

printf("Input the name of the file to be opened: ");
if( !fgets( filename, sizeof( fileName ), stdin) )
{
fprintf( stderr, "fgets to input 'original' file name failed\n" );
exit( EXIT_FAILURE );
}

// remove trailing newline
fileName[ strcspn( fileName, "\n" ) ] = '\0';
originalFileCheck = fopen( fileName, "r" );
if( !originalFileCheck )
{
perror( "fopen original file for read failed" );
exit( EXIT_FAILURE );
}


FILE *tempFileWrite;
char tempName[ MAXNAME ] = "temp.txt";

tempFileWrite = fopen( tempName, "w" );
if( !tempFileWrite )
{
perror( "fopen to write new file failed" );
fclose( originalFileCheck );
exit( EXIT_FAILURE );
}

char newLine[ MAXLINE ];
int lineNum;

printf("Input the content of the new line: ");
if( !fgets( newLine, sizeof( newLine ), stdin ) )
{
perror"fgets to input new line content failed" );
fclose( originalFileCheck );
exit( EXIT_FAILURE );
}

printf("Input the number of the line you want to replace: ");
if( scanf("%d", &lineNum) != 1 )
{
fprintf( stderr, "scanf for replacement line number failed\n" );
fclose( originalFileCheck );
fclose( tempFileWrite );
exit( EXIT_FAILURE );
}

char str[MAXLINE];
int counter = 1;
while( fgets(str, sizeof( str ), originalFileCheck) )
{
if(counter != lineNum)
{
if( fputs( str, tempFileWrite ) == EOF )
{
perror( "fputs for original line failed" );
fclose( originalFileCheck );
fclose( tempFileWrite );
exit( EXIT_FAILURE );
}
}

else
{
if( fputs( newLine, tempFileWrite ) == EOF )
{
perror( "fputs for replacement line failed" );
fclose( originalFileCheck );
fclose( tempFileWrite );
exit( EXIT_FAILURE );
}
}
counter++;
}

fclose(tempFileWrite);
fclose(originalFileCheck);

return 0;
}

关于c - 为什么我的程序在执行 scanf() 之前突然终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56581120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com