scanf
и fgets
оба могут использоваться, но один, вероятно, будет проще для вашего приложения.
scanf
можно использовать, но проверьте возвращаемое значение.
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(void) {
char filename[20];
while(scanf("%19s", filename) == 1) {
printf("filename: %s\n", filename);
}
if(errno) return perror("filename"), EXIT_FAILURE;
return EXIT_SUCCESS;
}
Выходы,
12345678901234567890
filename: 1234567890123456789
filename: 0
fgets
получает всю строку, не сопоставляя ее с входом.
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(void) {
char filename[20];
while(fgets(filename, sizeof filename, stdin)) {
printf("filename: %s\n", filename);
}
if(errno) return perror("filename"), EXIT_FAILURE;
return EXIT_SUCCESS;
}
Выходы,
12345678901234567890
filename: 1234567890123456789
filename: 0
[\n]
Обычно тоже- длинные имена файлов либо усечены, либо жалуются, это легко увидеть с помощью fgets
, например, Как отбросить оставшуюся часть строки в C .