使用fgets()
读取字符串。
但是当输入为3个字符的字符串“abc”时,打印大小的print语句打印出来。
这完全破坏了我的方法,因为它为char数组添加了一个空格,使得排列不起作用。
输入文件:
2
abc
bca
我确信琴弦后面没有空格。
int main(){
FILE * inF;
inF = fopen ("input2.txt", "r");
//Find number of Strings
int numWords = 0;
fscanf(inF, "%d", &numWords);
printf("%d\n", numWords);
int i = 0;
int counter = 0;
char string[10000];
//Run fgets so it starts at second line
fgets(string, 20, inF);
while(i< numWords) {
string[10000] = 0;
fgets(string, 20, inF);
printf("char: %s", string);
//find and print permutations
counter = strlen(string);
printf("size: %d\n", counter);
arrange(string, 0, counter - 1);
i++;
}
return 0;
}
任何帮助都会很棒,谢谢!
答案 0 :(得分:1)
第一个fscanf
读取数字,但保留换行符。因此,当您稍后致电fgets
时,这是fgets
读取的空行。
仅使用fgets
获取完整的行,如果您需要使用类似scanf
的功能,请在该行使用sscanf
。
答案 1 :(得分:0)
请勿混用fscanf()
和fgets()
。
读取第一行的整行,然后使用sscanf()
解析该行中的数字,然后继续使用更多fgets()
来读取剩余的行。
答案 2 :(得分:0)
您可以在string[]
之后打印缓冲区fgets
中的内容,如下所示:
...
while(i< numWords) {
string[10000] = 0; // !!! Do you mean string[9999] = 0;
fgets(string, 20, inF);
printf("char: %s", string);
// add printf here
for (j = 0; j < 20; j++)
printf("%02X ", (unsigned char)string[j]);
printf("\n");
...
}
你会看到这样的结果:
2
char: abc
61 62 63 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
size: 4
char: bca
62 63 61 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
size: 4
如您所见,每0A
后都有一个\n
,即fgets
。然后很明显为什么大小为4
。
$ man fgets
...
If a newline is read, it is stored into the buffer.
...
因此您可能需要手动删除换行符。