我对这段代码有一些问题
我正在尝试通过stdin读取.txt,特别是我编译的步骤是:
g++ eda.c -o eda.exe
./eda.exe < eda.txt.txt文件的内容是:
3
[9.3,1.2,87.9]
[1.0,1.0]
[0.0,0.0,1.0]
print v3
incr v3 v1前4行现在没有兴趣了,这些行已经用getline指令读取了。所以问题从第五行开始,“包括.”
使用该行,我希望输出为:print!,但我得到:
print! print! print!
(incr也是如此)
读取incr和print的代码的特定部分以:char mystring [20];开头
注意:使用fget()解决了!
这是最终代码:
do {
//sscanf (mystring,"%s",str);
//int res = strncmp(str, "incr", 10);
if(mystring[0] == 'p') casenumber = 1;
else if(mystring[0] == 'i') casenumber = 2;
else if(mystring[0] == 'd' && mystring[1] == 'o') casenumber = 3;
else if(mystring[0] == 'd' && mystring[1] == 'i') casenumber = 4;
else if(mystring[0] == 'd' && mystring[1] == 'e') casenumber = 5;
switch(casenumber)
{
case 1 :
printf("print!\n" );
break;
case 2 :
printf("increase!\n");
break;
case 3 :
printf("dot!\n");
break;
case 4 :
printf("distance!\n");
break;
case 5 :
printf("decr!\n");
break;
default :
printf("casenumber value is: %d\n", casenumber);
break;
}
casenumber = 0;
} while (fgets (mystring , 21 , stdin) != NULL);发布于 2013-10-17 18:06:51
你试过打印扫描结果吗?
扫描不读取一行,它读取一个简单的字符串,因此您的代码将比您预期的循环次数更多。
其他问题..。
清除循环中每次运行的变量。
casenumber = 0;
memset(mystring, 0, sizeof(mystring));并测试了扫描结果。
if ( result == 1 )
printf("sscanf error");https://stackoverflow.com/questions/19433871
复制相似问题