我正在使用C,我的知识非常基础.我想扫描一个文件并在第一行或第二行之后获取内容...
我试过了 :
fscanf(pointer,"\n",&(*struct).test[i][j]);
Run Code Online (Sandbox Code Playgroud)
但是这个语法只是从第一行开始=
这怎么可能 ?
谢谢.
这三种输入函数在编程语言中有什么区别.他们以不同的方式相互输入吗?
1.getchar_unlocked()
#define getcx getchar_unlocked
inline void inp( int &n )
{
n=0;
int ch=getcx();int sign=1;
while( ch < '0' || ch > '9' ){if(ch=='-')sign=-1; ch=getcx();}
while( ch >= '0' && ch <= '9' )
n = (n<<3)+(n<<1) + ch-'0', ch=getcx();
n=n*sign;
}
Run Code Online (Sandbox Code Playgroud)
2.scanf("%d",&n)
3.cin>>n
输入整数时哪一个花费的时间最少?
我在c ++中使用THese头文件,其中所有3个用c ++运行;
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cassert>
Run Code Online (Sandbox Code Playgroud) 我有一个包含整数的字符串,我正在尝试将所有内容放入另一个数组中.当sscanf找不到int我想要循环停止时.所以,我做了以下事情:
int i;
int getout = 0;
for (i = 0; i < bsize && !getout; i++) {
if (!sscanf(startbuffer, "%d", &startarray[i])) {
getout = 1;
}
}
//startbuffer is a string, startarray is an int array.
Run Code Online (Sandbox Code Playgroud)
这导致将所有元素startarray作为第一个char startbuffer.
sscanf工作正常但它不会移动到下一个int它只是停留在第一个位置.
知道什么是错的吗?谢谢.
我想在控制台应用程序中完成以下事项:
1,程序将执行任务1,如果用户输入q,程序将退出;这是我的代码:
#include <stdio.h>
#include <time.h>
char buff[64];
char command;
while(command != 'q')
{
begin:
printf(">> ");
scanf("%s", buff);
command = buff[0];
switch (command)
{
case '1':
// task 1 code will be added here;
break;
case '2':
// task 2 code will be added here;
break;
case 'q':
printf("quit the loop.\n");
break;
}
// wait for 10 seconds;
Sleep(10000);
// default task code will be added here;
if(command != 'q')
{
goto begin; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用fscanf读取数据,'e'例如,输入的一部分是一个浮点数后跟字母41.72elapsed.在编写strng时fscanf,我尝试使用"%felapsed",但这不起作用,就像%fe它自己的格式说明符一样.我怎么用这个来读fscanf?
编辑:这是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define CHAR_MAX 1024
int main(int argc, char **argv)
{
FILE *file_in = fopen(argv[1], "r+");
char out_name[CHAR_MAX];
strcpy(out_name, argv[1]);
strcat(out_name, ".csv");
FILE *csv_out = fopen(out_name, "w");
int minutes;
float seconds;
fprintf(csv_out, "Trial #, Execution Time\n");
for (int i = 0; fscanf(file_in, "%*fuser %*fsystem %d:%felapsed %*d%%CPU (%*davgtest+%*davgdata %*dmaxresident)k\n%*dinputs+%*doutputs (%*dmajor+%*dminor)pagefaults %*dswaps\n", &minutes, &seconds) == 2; i++) {
fprintf(csv_out, "%d, %d:%.2f\n", i, …Run Code Online (Sandbox Code Playgroud) 最近发现的对 GTA 冗长加载时间的解释(1)表明,许多sscanf()调用strlen()其输入字符串的实现为与其他扫描函数共享的内部例程设置上下文对象 ( scanf(), fscanf()...)。当输入字符串很长时,这可能成为性能瓶颈。解析作为字符串加载的 10MB JSON 文件,sscanf()并通过偏移量和%n转换重复调用被证明是加载时间的主要原因。
我的问题是sscanf()甚至应该读取超出转换完成所需字节的输入字符串吗?例如,以下代码是否会调用未定义的行为:
int test(void) {
char buf[1] = { '1' };
int v;
sscanf(buf, "%1d", &v);
return v;
}
Run Code Online (Sandbox Code Playgroud)
函数应该返回1并且不需要从 中读取多个字节buf,但sscanf()允许从buf第一个字节之外读取?
(1) JdeBP提供的参考资料:
https
: //nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/ https://news.ycombinator.com/ item?id=26297612
https://github.com/biojppm/rapidyaml/issues/40
这个非常简单的问题可能是一个非常简单的答案:
我正在阅读Pratta的"C Primer Plus",他一直在使用这个例子
while (scanf("%d", &num) == 1)...
Run Code Online (Sandbox Code Playgroud)
== 1真的有必要吗?似乎可以写一下:
while (scanf("%d", &num))
Run Code Online (Sandbox Code Playgroud)
似乎相等测试是不必要的,因为scanf返回读取的对象数,1将使while循环成为真.是确保读取的元素数量正好为1还是完全多余的原因?
在我正在研究的函数中发现的一段代码让我感到困惑:
char GetCommand( void )
{
char command;
do {
printf( "Enter command (q=quit, n=new, l=list): " );
scanf( "%c", &command );
Flush();
}
while ( (command != 'q') && (command != 'n')
&& (command != 'l') );
printf( "\n----------\n" );
return( command );
}
void Flush( void ) {
while ( getchar() != '\n' )
;
}
Run Code Online (Sandbox Code Playgroud)
我在这里不太明白的是该Flush()功能的用法.我的意思是,我正在阅读的书通过说它阻止用户输入多个单个字符然后在第二次提示输入时读取该字符来解释它.
我不明白的是如何Flush()防止这种情况发生.它什么都不做.它只是一个while命令.(虽然这是真的......什么?????)没有意义.
我正在尝试使用sscanf以下方法从字符串中提取字符串和整数:
#include<stdio.h>
int main()
{
char Command[20] = "command:3";
char Keyword[20];
int Context;
sscanf(Command, "%s:%d", Keyword, &Context);
printf("Keyword:%s\n",Keyword);
printf("Context:%d",Context);
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这给了我输出:
Keyword:command:3
Context:1971293397
Run Code Online (Sandbox Code Playgroud)
我期待这个输出:
Keyword:command
Context:3
Run Code Online (Sandbox Code Playgroud)
为什么sscanf会这样?在此先感谢您的帮助!
如果我想在使用分号分隔符读取文件时将旧C代码"升级"为更新的C++,那么最佳选择是什么:
/* reading in from file C-like: */
fscanf(tFile, "%d", &mypost.nr); /*delimiter ; */
fscanf(tFile, " ;%[^;];", mypost.aftername);/* delimiter ; */
fscanf(tFile, " %[^;]", mypost.forename); /*delimiter ; */
fscanf(tFile, " ;%[^;];", mypost.dept);/*delimiter ; */
fscanf(tFile, " %[^;];", mypost.position);/* delimiter ; */
fscanf(tFile, "%d", &mypost.nr2);
//eqivalent best C++ method achieving the same thing?
Run Code Online (Sandbox Code Playgroud)