我正在嘗試制作一個可以修復另一個程式代碼的程式。
這是我制作的示例程式,需要修復它的代碼。
#include <stdio.h>
#include <math.h>
int
main (
) { printf("helloworld");
return 0;
}
我從這段代碼開始
#include <stdio.h>
int main() {
int chr ,areLibraries;
areLibraries = 1;
while ((chr = getchar()) != EOF) {
if ((chr == '#') && (areLibraries == 1)) {
while(chr != '\n') {
putchar(chr);
chr = getchar();
}
putchar(chr);
} else {
areLibraries = 0;
if (chr == '\n') {
continue;
} else {
putchar(chr);
}
}
}
}
在 ac 程式中應該忽略 #include .... 并忽略任何 '\n' 字符。
在運行程式之前,我希望這是輸出。
#include <stdio.h>
#include <math.h>
intmain () { printf("helloworld"); return 0;}
但是程式列印了這個
#include <stdio.h>
#include <math.h>
}
我已經嘗試了幾個小時來找到問題,但似乎沒有什么可以解決它。就像程式認為 #include 陳述句結束后輸入的每個字符都是一個 '\n' 字符。問題是否必須用我對 putchar() 和 getchar() 的使用,還是我太笨而找不到我的錯誤。
uj5u.com熱心網友回復:
在我看來,您嘗試修復的檔案必須具有 Windows 行結尾,即\r\n. 您正在過濾換行符,但保留回車符。這將導致最后一行覆寫自身。
嘗試將您的程式更新為:
#include <stdio.h>
int main() {
int chr ,areLibraries;
areLibraries = 1;
while ((chr = getchar()) != EOF) {
if ((chr == '#') && (areLibraries == 1)) {
while(chr != '\n') {
putchar(chr);
chr = getchar();
}
putchar(chr);
} else {
areLibraries = 0;
if (chr == '\n' || chr == '\r') { // <- CHANGE HERE
continue;
} else {
putchar(chr);
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370324.html
標籤:C
上一篇:在C中逐行從檔案中讀取整數和字符
下一篇:Vue.js中的依賴回圈問題
