我有一个文本文件text.txt读取(为简单起见) this is line one this is line two this is line three 为了简单起见,我只是试图将每行中的第一个字符设置为’x’,所以我想要的结果是 xhis is line one xhis is line two xhis is line three 所以我打开text.txt文件并尝试用所需的输出覆盖每一行到同一文本文件。 在while循环中,我将每行中的第一个字符设置为“x”。 我还将变量“line”设置为等于1,因为如果它在第一行,我想回放到文件的开头,以便在开始时而不是在文件的末尾进行覆盖。 然后增加行,以便在下一次迭代时跳过倒带,并且应该继续覆盖第2行和第3行。 它适用于第一线。 有人有任何解决方案吗? 顺便说一句,我已经在stackoverflow和其他网站上进行了广泛的研究,但没有运气。 这是我的代码,我的输出也在下面: #include #include #define MAX 500 int main() { char *buffer = malloc(sizeof(char) * MAX); FILE *fp = fopen(“text.txt”, “r+”); int line […]
我知道每个人都告诉我使用fgets而不是因为缓冲区溢出而得到的。 但是,我对fgets()的第三个参数感到有点困惑。 据我了解,fgets依赖于: char * fgets ( char * str, int num, FILE * stream ); char* str是我的输入存储位置的ptr。 num是要读取的最大字符数。 但什么是FILE *stream ? 如果我只是提示用户输入字符串(如句子),我应该输入“ stdin ”吗? 我应该在main()附近的顶部键入FILE *stdin吗?
它不相等: fgets (answer, 256, stdin); if (strncmp(answer, “sta”, 4) == 0) printf(“omg, it’s equal”); 这段代码是: fgets (answer, 4, stdin); if (strncmp(answer, “sta”, 4) == 0) printf(“omg, it’s equal”); 为什么? 这是因为在第一个,答案没有\ 0在第四个地方我猜(如果我把它改为3而不是4它的工作原理)。 但是fgets做了什么? 字符串答案在第一个是str \whitespace*253\0″ ?在第二个是str\0 ?谢谢。
我需要读取一个文件并将文本从它发送到一个字符串,以便我可以解析它。 但是,程序不会准确知道文件的长度,所以如果我想使用fgets() ,或者有更好的选择,我该怎么办? 注意: char *fgets(char *str, size_t num, FILE *stream);
我从我的文档中提取了所有文字,并将所有文字都打印在屏幕上,但在打印完每个文字后,都有一个空行。 如何避免在字符串中读取或添加此新行? int main(void) { FILE *f; f = (“words”, “r”); char string[100]; while (fgets(string, 100, f)) { printf(“%s”, string); } } 这段代码没有复制粘贴,所以我可能忘记了小块但应该可以工作。 在words.txt中,每行都有一个单词。 我的程序将它们全部打印到屏幕上,但在每个单词后添加一个新行。 我不希望它添加新行或空格。 因此,如果txt在一行上有Hello而在下一行有Bye ,我希望它打印HelloBye 。 最终程序的目标不是打印字符串,而是将字符串用于其他内容,因此我需要一个字符串,其中只有文本末尾没有空格或新行。
这样做安全吗? fgets是否使用null终止缓冲区,或者我应该在调用fgets和调用clean之前将第20个字节设置为null? // strip new lines void clean(char *data) { while (*data) { if (*data == ‘\n’ || *data == ‘\r’) *data = ‘\0’; data++; } } // for this, assume that the file contains 1 line no longer than 19 bytes // buffer is freed elsewhere char *load_latest_info(char *file) { FILE *f; char *buffer […]
int main( int argc, char** argv) { FILE *inFilePtr = fopen(*(argv + 1), “r”); char *rawdata = malloc(sizeof(char) * 100); float *ary = malloc(sizeof(float) * 50); int counter = 0; float averageAns; int count = 0; while (count < 1 ){ //fgets(rawdata, 50, inFilePtr); //I have tried both fscanf(inFilePtr, "%s", rawdata); *(ary + counter) = […]
fgets()和gets()什么区别? 当用户点击“输入”时,我正试图打破我的循环。 它与gets()一起运行良好,但我不想使用gets() 。 我尝试使用fgets()和scanf()但是我没有与gets()相同的结果。 无论用户在文本中输入什么, fgets()打破循环! 这是我的代码: void enter(void) { int i, for(i=top; i Enter name (ENTER to quit): “); gets(cat[i].name); if(!*cat[i].name) break; printf(“.> Enter Last Name: “); scanf(“%s”,cat[i].lastname); printf(“.> Enter Phone Number: “); scanf(“%s”,cat[i].phonenum); printf(“.> Enter e-Mail: “); scanf(“%s”,cat[i].info.mail); printf(“.> Enter Address: “); scanf(“%s”,cat[i].info.address); printf(“\n”); } top = i; }
基本上如标题所示..当我的程序从控制台运行时,它会询问你是否要加密或解密..当我输入e或E时,它会创建一个新的空行(直到我输入一些那种文字),然后一次显示“输入文字”和“输入密钥”行。 因此,在控制台中它看起来像: 你想(E)ncrypt还是(D)ecrypt? Ë asdf jkl; <—-随机用户输入以使程序继续.. 输入要加密的文本:输入用于加密的密钥:(用户输入) 然后程序退出.. //message to be encrypted char text[250]; //word to use as the key char key[50]; //stores the encrypted word char encrypted[250]; char answer; printf(“Would you like to (E)ncrypt or (D)ecrypt? “); scanf(” %c”, &answer); if(answer == ‘e’ || answer == ‘E’) { printf(“Enter the text you want […]
我想知道是否有任何方法可以忽略fscanf或fgets函数的空格。 我的文本文件在每一行上有两个字符,可以用空格分隔,也可以不用空格分隔。 我需要读取两个字符并将每个字符放在不同的数组中。 file = fopen(argv[1], “r”); if ((file = fopen(argv[1], “r”)) == NULL) { printf(“\nError opening file”); } while (fscanf(file, “%s”, str) != EOF) { printf(“\n%s”, str); vertexArray[i].label = str[0]; dirc[i] = str[1]; i += 1; }