我有一个包含多行的文件。每行有两个由空格分隔的数字。 我需要使用此代码,打印第一行,打印整个文件,但逐行
do
{
fscanf(fp,"%c", &c);
if(c == ' ')
break;
printf("%c", c);
}
while (c != ' ');
do
{
fscanf(fp, "%c", &c);
printf("%c", c);
}
while( c != '\n');
我尝试使用fgets但进入了一个无限循环。
while(fgets(buf, sizeof buf, fp) != NULL) // assuming buf can handle the line lenght
{
//code above
}
为什么我不能使用这样的fgets来逐行打印?
样品
输入:
10 5003
20 320
4003 200
输出
10 5003
20 320
4003 200
答案 0 :(得分:2)
显然我无法使用你的确切代码,或者你不会问这个问题,但这是一个类似的想法,做得有点不同,而且还使用导致你麻烦的$(document).on('click', 'input', function (e) {
doSomething();
});
。它的工作原理是搜索每一行的数字和非数字。请注意,我$(document).on('click', 'input', function (e) {
var inputForm = e.target;
modal.modal({show:true});
modal.find(".btn-success").click(function () {
var choice = $("modal").find('input[type=radio]:checked').val();
if (choice) {
modal.modal('hide');
inputForm.value = choice;
}
});
});
要慷慨,因为在上一个问题中,您说每个数字可以有500个数字,因此该行可能至少为1000个字符。
fgets
编辑你可以让它更简洁,用循环读取每组数字:
#define MAXLEN 2000
程序输出(来自您的输入):
#include <stdio.h>
#include <ctype.h>
#define MAXLEN 2000
int main(void)
{
FILE *fp;
char line[MAXLEN];
char *ptr;
if((fp = fopen("test.txt", "rt")) == NULL)
return 0; // or other action
while(fgets(line, MAXLEN, fp) != NULL) {
ptr = line;
// first number
while(*ptr && !isdigit(*ptr)) { // skip non-digits
ptr++;
}
while(*ptr && isdigit(*ptr)) {
printf("%c", *ptr++); // print digits
}
printf(" ");
// second number
while(*ptr && !isdigit(*ptr)) { // skip non-digits
ptr++;
}
while(*ptr && isdigit(*ptr)) {
printf("%c", *ptr++); // print digits
}
printf("\n");
}
fclose(fp);
return 0;
}
答案 1 :(得分:1)
如果我们用printf替换printf(fp,&#34;%c&#34;,c)(&#34;%c&#34;,c)(因为我们不在文件中打印,对吧?) ,以下示例应该完成这项工作(它创建了十行的测试文件)。
Timer t = new Timer();
t.schedule(
new TimerTask() {
@Override public void run(){
Firebase ref = new Firebase("https://fsn1xtvlo0z.firebaseio-demo.com/Move/connection");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
String connected = String.valueOf(snapshot.getValue());
/*if (connected.equals("a"))
label8.setText("Connected to Phone");*/
if (connected.equals("c"))
label8.setText("Phone is not connected");
}
@Override
public void onCancelled(FirebaseError firebaseError) {
label8.setText("No Connection");
}
});
ref.setValue("c");
}
}, 0, 5000);