C:如何从标准输入中读取许多字符串

时间:2018-09-01 11:10:20

标签: c scanf stdin eof

我需要读取从标准输入到EOF的可变长度的许多字符串。 字符串由连续的字符组成,不用空格分隔,并且字符串没有最大长度。

使用:

add_action( 'woocommerce_after_variations_form' , 'woocommerce_show_hide_images_gallery', 5 );

function woocommerce_show_hide_images_gallery() {      
    global $product;
    if( $product->is_type('variable') ){
    ?>
    <script>
    var attribute_id = 'power-system'; // change attribute id here
    function showHideImages(attval)
    {
        if(attval)
        {
            var match_data = 'Electronics Protection';  // change attribute value here

            if(attval.toUpperCase()==match_data.toUpperCase())      
                jQuery(".yith_magnifier_gallery img:odd").parent().hide();
            else
                jQuery(".yith_magnifier_gallery img:odd").parent().show();
        }
    }

    //select box change
    jQuery("#"+attribute_id).change(function(){
        showHideImages( jQuery(this).val() );
    });

    //swatch click
    jQuery(".swatchinput label[selectid=" + attribute_id + "]").click(function(){
        showHideImages( jQuery(this).data('option') );
    });

    //select box & swatch change on page load (if you are getting back again)
    jQuery(document).ready(function(){
        showHideImages( jQuery("#"+attribute_id).val() );
        showHideImages( jQuery(".swatchinput label.selectedswatch[selectid=" + attribute_id + "]").data('option') );
    });
    </script>
    <?php
    }
}

我无法确定当前字符串是前一个字符串的一部分还是新字符串的一部分,因为它全部打印在一行中(而且我不知道在哪里打印“ \ n”)。

样本输入

char st[101];
while(scanf("%100s",st) != EOF){ //divide the input into parts of 100 chars
    int i;
    for(i=0; i<strlen(st);i++){
        printf("%c",st[i]);
    }
}

输出

aaaaaaaaa[...]aaaaa

bbbbbbbbb[...]bbbbb

有解决方案吗?

P.S。我无法使用aaaa[...]aabbbbbb[...]bbbb 处理EOF。

1 个答案:

答案 0 :(得分:0)

这是您使用/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package xlsxreader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.*; /** * * @author khaled */ public class XlsxReader { /** * @param args the command line arguments */ public static void main(String[] args) throws FileNotFoundException, IOException, InvalidFormatException { File file = new File("C:\\Users\\khaled\\Desktop\\myXLSX file.xlsx"); Workbook workbook = WorkbookFactory.create(new FileInputStream(file)); Sheet sheet = workbook.getSheetAt(0); int column_index_1 = 0; int column_index_2 = 0; int column_index_3 = 0; Row row = sheet.getRow(0); for (Cell cell : row) { // Column header names. switch (cell.getStringCellValue()) { case "MyFirst Column": column_index_1 = cell.getColumnIndex(); break; case "3rd Column": column_index_2 = cell.getColumnIndex(); break; case "forth Column": column_index_3 = cell.getColumnIndex(); break; } } for (Row r : sheet) { if (r.getRowNum()==0) continue;//hearders Cell c_1 = r.getCell(column_index_1); Cell c_2 = r.getCell(column_index_2); Cell c_3 = r.getCell(column_index_3); if (c_1 != null && c_1.getCellType() != Cell.CELL_TYPE_BLANK &&c_2 != null && c_2.getCellType() != Cell.CELL_TYPE_BLANK &&c_3 != null && c_3.getCellType() != Cell.CELL_TYPE_BLANK) { System.out.print(" "+c_1 + " " + c_2+" "+c_3+"\n"); } } } 处理EOF的方式:

getchar

此代码将在stdout上复制其输入。

如果您想一次处理整行,最简单的方法是使用int c; while ((c = getchar()) != EOF) { putchar(c); } (它是POSIX,不是标准C):

getline

如果您没有char *line = NULL; size_t size = 0; ssize_t nread; while ((nread = getline(&line, &size, stdin)) != -1) { // nread characters were read do_stuff_with(line); } free(line); ,则可以自己编写(使用getlinegetchar)。