我正在嘗試制作一個程式,該程式將從用戶那里獲取一個句子并顛倒單詞的順序,同時在末尾保留特殊字符 ['.','?','!']。我遇到的問題是在最后一個單詞和特殊字符之后出現奇怪的符號。我正在使用 C 進行編程。我認為這是因為列印的最后一個元素不是 '\0'。但我不知道如何解決這個問題。
我的代碼:
#include <ctype.h>
#define N 200
int main()
{
char arr[N] = { 0 };
char* p, * q, mark = 0;
int c;
p = arr;
printf("Enter a sentence: ");
while ((c = getchar()) != '\n' && p < arr N)
{
if (c == '?' || c == '.' || c == '!')
{
mark = c;
break;
}
else
*p = c;
}
*p = '\0';
printf("Reversal of sentence: ");
while (p >= arr)
{
while (*--p != ' ' && p != arr);
if (p == arr) {q = arr;}
else {q = p 1;}
while (*q != '\0' && *q != ' ')
{
printf("%c", *q );
}
if (p >= arr)
{
printf(" ");
}
}
printf("%c", mark);
printf("\n");
return 0;
}
uj5u.com熱心網友回復:
通過洗掉 \0 終止符,我在閱讀句子時修復了溢位錯誤。輸入字串永遠不會被任何關心的東西使用。我還添加了對檔案結束的檢查。
接下來,我將反轉回圈更改為不下溢并固定在標記前輸出一個額外的 ' '。
最后 printf 呼叫可以使用 putchar 代替。
#include <ctype.h>
#include <stdio.h>
#define N 200
int main()
{
char arr[N] = { 0 }; // initialization optional, nothing cares
char* p, * q, mark = 0;
int c;
p = arr;
printf("Enter a sentence: ");
while ((c = getchar()) != '\n' && c != EOF && p < arr N)
{
if (c == '?' || c == '.' || c == '!')
{
mark = c;
break;
}
else
*p = c;
}
printf("Reversal of sentence: ");
while (p > arr)
{
while (*--p != ' ' && p != arr);
if (p == arr) {q = arr;}
else {q = p 1;}
while (*q != '\0' && *q != ' ')
{
putchar(*q );
}
if (p > arr)
{
putchar(' ');
}
}
putchar(mark);
putchar('\n');
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441587.html
