Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 忽略超过某一点的输入_C_Scanf - Fatal编程技术网

C 忽略超过某一点的输入

C 忽略超过某一点的输入,c,scanf,C,Scanf,有没有办法忽略当前行经过某个点的所有输入?这意味着如果scanf阅读: -rw-rw-r-- 1 lukasz lukasz 423 Jan 19 01:49 Make file 有没有办法忽略423之后的所有输入?我目前正在编写一个读取此行格式的程序,文件名中的空格有问题。这意味着读取make,然后文件将转入下一个scanf迭代。我是否遗漏了什么?我刚刚设置了七个变量s1。。。s0并运行以下命令: scanf("%s %s %s %s %s %s %s %s %s %s", s1,s2,s

有没有办法忽略当前行经过某个点的所有输入?这意味着如果scanf阅读:

-rw-rw-r-- 1 lukasz lukasz  423 Jan 19 01:49 Make file

有没有办法忽略423之后的所有输入?我目前正在编写一个读取此行格式的程序,文件名中的空格有问题。这意味着读取make,然后文件将转入下一个scanf迭代。

我是否遗漏了什么?我刚刚设置了七个变量s1。。。s0并运行以下命令:

scanf("%s %s %s %s %s %s %s %s %s %s", s1,s2,s3,s4,s5,s6,s7,s8,s9,s0);
它列出了清单

-rw-rw-r--
1
lukasz
lukasz
423
Jan
19
01:49
Make
file
每当我有类似的事情要做时,我都会阅读整行内容,并用strtok处理这些片段

---更新---

如果文件名中有多个空格或名称以空格开头,会发生什么情况?如果您保证文件名不会以空格开头,则这将起作用:

char linein[200];
char s[12][12];
char *p;
char *in=linein;
char *file;
fgets(linein,sizeof(linein), stdin);
for(int ii=0; ii<8; ii++) {
    p=strtok(in," ");
    in=NULL;
}
file=strtok(in,"\r\n");
printf("file=%s\n", file);
charlinein[200];
chars[12][12];
char*p;
char*in=linein;
字符*文件;
fgets(线路输入、尺寸输出(线路输入)、标准输入);

对于(int ii=0;ii您可以忽略输入行的其余部分,格式字符串末尾有两个转换说明符:
%*[^\n]%*c

  • %*[^\n]
    读取换行符之前的所有字符并丢弃它们(这就是
    *
    的作用)
  • %*c
    读取并丢弃换行符
但是请注意,如果换行符之前没有要读取的字符,此方法将失败。您可以通过两个单独的调用
scanf()
来解决此问题:


读一整行,用
sscanf
来解析它,继续。然后什么都没有了。
%*[^\n]
会起作用。它确实会在输入端保留
\n
,但这通常由下一个
scanf
处理。你可以尝试
文件*fp=fopen(“文件名”,“r”);字符缓冲区[1024];fscanf(fp,%1023[!\n'],缓冲区);
将输入字符,直到遇到1023个字符输入-或-a'\n'。当然,代码需要检查
fp
的内容(!=NULL),以确保调用
fopen()
成功。当然,代码需要检查调用
fscanf()返回的值。
(在本例中,除1以外的任何内容都将是错误)@user3629249:您的意思是
fscanf(fp,“%1023[^\n]”,buffer);
?但是请注意,此格式将无法读取空行,导致潜在的未定义行为,因为未修改
buffer
更简单、更安全。@chqrlie,您有权使用
^
而不是
。但是,如果文件为空或处于EOF,则返回的值将不会为1。因此,将捕获此类事件。当存在一个(并且只有一个)事件时,此操作有效文件名中的空格顺序。如果文件名中没有空格,或者名称中有多个空格顺序,则该选项不起作用。是的。只有当文件名中有且只有一个空格时,第一个scanf版本才会起作用。strtok版本适用于零个或多个空格,但这仅用于回答t如果你想遍历目录树,你可以使用readdir和其他逻辑。
scanf("%*[^\n]");
scanf("%*c");