簡體   English   中英

printf在每個數字之后打印無效字符

[英]printf prints invalid characters after each number

在調用print_compressed()(下面給出的代碼)時,程序會正確打印字符,但是在執行printf()(打印數值)之后,還會打印其他字符。 該字符在終端上不可見。 但是在將輸出保存到文件時,它表示為“ ^ @”(使用nano編輯器)。

void modify(char *ch, int *cons, char *vow)
{
    if (strchr(vowels, *ch) == NULL) {
        if (*vow) {
            putchar(*vow);
            *vow = 0;
        }
        ++*cons;
    } else {
        if (*cons) {
            printf("%i", *cons);
            *cons = 0;
        }
        if (*vow != *ch)
            putchar(*vow);
        *vow = *ch;
    }    
}

void print_compressed(char *s)
{
    putchar(toupper(*(s++)));
    int curr = 0;
    int cons = 0;
    char vow = 0;
    while (s[curr]) {
        modify(s + curr, &cons, &vow);
        ++curr;
    }
    modify(s + curr, &cons, &vow);
    putchar('\n');
}

輸入:aaabcdefee

預期輸出:Aa3e1e

終端上的輸出與預期相同

將輸出保存為文件時的輸出:A ^ @ a3 ^ @ e1 ^ @ e

查看modify功能中的程序邏輯。 如果找到元音,則將*vow = 0設置*vow = 0如果之前不是0)。 在下一步中,如果找不到元音,則輸出*vow ,這是一個空字節。 然后,設置*vow = *ch

因此,總是在找不到元音且之前找到元音,然后再找到非元音時,才打印0字節。

重新考慮你的邏輯:)

或者只是改變

if (*vow != *ch)
    putchar(*vow)

if (*vow != *ch)
    if (*vow) putchar(*vow);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM