[問題] scanf 的引數
看板C_and_CPP作者Neisseria (Neisseria)時間13年前發表 (2012/08/03 12:42), 6年前編輯推噓3(3推 0噓 2→)留言5則, 3人參與討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
cygwin + gcc
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
在練習寫 queue ,但問題不是在 queue 上
為什麼在 scanf 輸入 char 時需要輸入 \n,例:scanf( "\n%c", &data );
而我用類似的方法試寫一個 stack
如果是在 int 時不需要加 \n,例:scanf( "%d", &data );
餵入的資料(Input):
單一的 char 例如 u, n, c, ...
預期的正確結果(Expected Output):
u --> n --> c --> NULL
照書上範例的列印方式
錯誤結果(Wrong Output):
-->
-->
-->
--> NULL
程式碼(Code):(請善用置底文網頁, 記得排版)
很長 請包涵 = =
#include<stdio.h>
#include<stdlib.h>
struct queueNode {
char data;
struct queueNode *nextPtr;
};
typedef struct queueNode QueueNode;
typedef QueueNode *QueueNodePtr;
void enqueue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char value );
char dequeue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr );
int isEmpty( QueueNodePtr headPtr );
void printQueue( QueueNodePtr currentPtr );
void instructions( void );
int main( void ){
QueueNodePtr headPtr = NULL;
QueueNodePtr tailPtr = NULL;
int choice;
char value;
instructions();
printf( "? " );
scanf( "%d", &choice );
while ( choice != 3 ) {
switch ( choice ) {
case 1:
printf( "Please input a character: " );
scanf( "\n%c", &value );
enqueue( &headPtr, &tailPtr, value );
printQueue( headPtr );
break;
case 2:
if ( !isEmpty( headPtr ) ) {
value = dequeue( &headPtr, &tailPtr );
printf( "%c has been dequeued.\n", value );
}
printQueue( headPtr );
break;
default:
printf( "Invalid choice.\n" );
instructions();
break;
}
printf( "? " );
scanf( "%d", &choice );
}
printf( "End of run.\n" );
return 0;
}
void instructions( void )
{
printf( "Enter your choice:\n"
" 1 to add an item to the queue.\n"
" 2 to remove an item from the queue.\n"
" 3 to end the program.\n" );
}
void enqueue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char value )
{
QueueNodePtr newPtr;
newPtr = malloc( sizeof( QueueNode ) );
if ( newPtr != NULL ) {
newPtr->data = value;
newPtr->nextPtr = NULL;
if ( isEmpty( *headPtr ) ) {
*headPtr = newPtr;
}
else {
( *tailPtr )->nextPtr = newPtr;
}
*tailPtr = newPtr;
}
else {
printf( "%c not inserted. No memory available.\n", value );
}
}
char dequeue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr )
{
QueueNodePtr tempPtr;
char value;
tempPtr = *headPtr;
value = tempPtr->data;
*headPtr = (*headPtr)->nextPtr;
if ( *headPtr == NULL ) {
*tailPtr == NULL;
}
free( tempPtr );
return value;
}
int isEmpty( QueueNodePtr headPtr ){
return headPtr == NULL;
}
void printQueue( QueueNodePtr currentPtr )
{
if ( currentPtr == NULL ) {
printf( "The queue is empty.\n" );
}
else {
printf( "The queue is: \n" );
while (currentPtr != NULL ) {
printf( "%c --> ", currentPtr->data );
currentPtr = currentPtr->nextPtr;
}
printf( "NULL\n" ); }}
補充說明(Supplement):
無
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.58.141.8
※ 編輯: Neisseria 來自: 61.58.141.8 (08/03 20:44)
推
08/03 21:45, , 1F
08/03 21:45, 1F
推
08/03 22:42, , 2F
08/03 22:42, 2F
→
08/03 22:43, , 3F
08/03 22:43, 3F
推
08/04 00:00, , 4F
08/04 00:00, 4F
→
08/04 00:01, , 5F
08/04 00:01, 5F
※ 編輯: Neisseria (112.104.128.230), 12/24/2018 06:34:04
討論串 (同標題文章)