ใครเห็น error ในโค้ด ช่วยชี้เป้าให้ที

Started by Admin, November 12, 2013, 08:48:50 AM

Previous topic - Next topic

Admin

#include <stdio.h>
int main()
{
    char text[100];
    char space[100];
    int c = 0;
    int d = 0;
 
   printf("Enter some text: \n");
   gets(text);

   while (text[c] != '\0')
   {
       if (!(text[c] == ' ' && text[c+1] == ' '))
       {
            space[d] = text[c];
            d++;
       }
       c++;
    }
    printf("Text after removing blanks:\n%s\n", space);
    return 0;
}
รับทำ PCB (ออกใบกำกับภาษีได้) => https://www.electoday.com

wozniak

น่าจะใส่ '\0' ปิดท้ายที่ array ของ space ด้วยครับ เพราะ space อยู่ใน local แบบนี้อาจเป็นข้อมูลที่เป็นขยะ มีข้อมูลที่ไม่แน่นอน และเมื่อจะใช้เป็น string ก็จะต้องใส่ '\0' ปิดท้ายให้ด้วยเสมอ
ดังนั้นน่าจะเพิ่มเป็น


...
space[d] = 0;
printf("Text after removing blanks:\n%s\n", space);
...


และ text[100] , space[100] เป็นการจองเผื่อไว้ อาจไม่พอก็ได้ครับ ให้ระวังไว้

ไม่รู้ว่า ถูกเป้าไหมครับ ....!

Lastman

ขอเล่นด้วยคน

ค่า c ไม่ได้พวกเพิ่มฮับ...  ;)

ใช่ป่าวเอ่ย... ::)

======= update ==============

อ่าว......เวรละ.......พึ่งเจอ... c++ ในบรรทัดข้างล่าง... งั้นขอแก้ตัวสักครู่ครับ  :o

======= update ==============

ทำไม ตรง condition จึงเป็น

if (!(text[c] == ' ' && text[c+1] == ' '))

แทนที่จะเป็น

if (text[c] != ' ')

จินตภาพล้วนๆ ยังไม่ลองกับ compiler นะท่าน  :o


nont_peet

เล่นด้วยครับ   

:o :o :o   ถ้ารัน turbo 3.0 เราจะไม่เห็น เพราะไม่ได้ใส่ getch();  555   :o :o :o
คนรักหุ่นยนต์

gui

โปรแกรมไม่แสดงผลอะไรเพราะว่าตัวแปร space[d] มีค่าเป็นช่องว่างตลอด
space[d] = text[c];
คราวนี้ text[c] = ' ' ;

Lastman

Quote from: gui on November 12, 2013, 06:49:25 PM
โปรแกรมไม่แสดงผลอะไรเพราะว่าตัวแปร space[d] มีค่าเป็นช่องว่างตลอด
space[d] = text[c];
คราวนี้ text[c] = ' ' ;


text[c] = ' '

มันอยู่ตรงไหนท่าน... ผมหาไม่เจอ  :o

gui

ขออภัยครับ ดูไม่ดีเอง
if (!(text[c] == ' ' && text[c+1] == ' '))
เงื่อนไขมี ! นำหน้าทำให้เงื่อนไขนี้กลายเป็น NOT Gate

โปรแกรมทำงานได้ แต่โปรแกรมนี้จะตัดช่องว่างออกเฉพาะกรณีที่เจอ ช่องว่างติดกัน 2 ตัวขึ้นไปมันตัดเหลือช่องว่างตัวเดียว ถ้าเจอช่องว่างตัวเดียวไม่ตัดครับ
ปัญหาที่เจอแบบที่ท่าน wozniak ว่าไว้ ก็คือ ลืมใส่ '\0' ที่ท้ายข้อความ เพื่อบอกว่าจบข้อความ

Admin

เฉลย  =   Line#22: need to terminate space string, add: space[d]='\0′;
รับทำ PCB (ออกใบกำกับภาษีได้) => https://www.electoday.com